Skip to content
Notifications
Clear all

Help: iboss agent keeps dropping events under high load on Kubernetes

70 Posts
63 Users
0 Reactions
303 Views
(@henryf)
Reputable Member
Joined: 3 months ago
Posts: 291
 

Good advice, but the script approach can mislead you if it's a one-shot test. The latency profile changes when you're sending batches back-to-back, which is the real scenario.

The agent's queue fills because the network can't clear a batch before the next one arrives. Your script should loop at your actual event rate to catch that sustained bottleneck.

Also, check if the agent's HTTP client respects keep-alive. A new connection per batch adds overhead that inflates latency.



   
ReplyQuote
(@grafana_guy_night)
Honorable Member
Joined: 7 months ago
Posts: 427
 

Interesting, we've seen the same thing with our mesh. The timeout fix helped, but you're right that it's not just about one number.

> default network policies or service mesh configurations

If you're using Istio or something similar, check the connection pool settings in your DestinationRule. The agent's HTTP client might be getting limited by the sidecar's own queues. Had a case where the sidecar's maxRequestsPerConnection was too low for the batch rate, causing silent throttling that looked like drops.

Have you checked the sidecar logs, not just the agent? Sometimes the mesh logs the real failure.



   
ReplyQuote
(@chrisk)
Honorable Member
Joined: 3 months ago
Posts: 398
 

Exactly right about the sidecar connection pools. We instrumented a similar setup and found the DestinationRule's `http1MaxPendingRequests` was the hidden throttle. The agent would open multiple connections within a batch, hit that ceiling, and the sidecar would start returning 503s internally, which the agent logged as generic send failures.

To reproduce it, we had to look at the sidecar's `istio-proxy` stats. The metric `cluster.outbound||.upstream_rq_pending_overflow` was incrementing during our load test. Tuning the connection pool settings there eliminated the drops completely, even with the original agent timeout.

Your point on sidecar logs is critical. The agent's logs just said "send failed," but the Envoy logs showed the explicit 503 with "overflow" in the response flag.



   
ReplyQuote
(@cloud_security_sera)
Honorable Member
Joined: 3 months ago
Posts: 543
 

The sidecar theory is valid, but it's a distraction if you haven't validated the agent's own settings first.

> Could the default network policies or service mesh configurations be inte

Everyone jumps to the mesh because it's complicated. The problem is usually simpler. The agent's internal queue and timeout are naive defaults meant for low-volume deployments. You need to find and adjust its batch size and http client timeout before you start blaming Istio. The buffer warnings are the agent telling you it's failing, not the network.

Check the raw agent config for `queue.max_size` and `http.client_timeout`. Increase the timeout based on actual egress latency from the pod. Reduce the batch size significantly. If drops stop, then you can look for mesh throttling. If they continue, *then* check the sidecar logs for `upstream_rq_pending_overflow`.


Least privilege is not a suggestion.


   
ReplyQuote
(@carlosr)
Honorable Member
Joined: 3 months ago
Posts: 443
 

Good summary of the symptoms. The buffer warnings are the key signal.

Most of the tuning advice you'll get points to the agent's queue and timeout settings, which is correct. But before you change anything, you need the actual P99 latency from your pod to iboss cloud during a real traffic burst. Guessing at the timeout is what keeps this problem coming back.

A quick test: set up a basic Pod in the same namespace to POST batch-sized payloads to the agent's service in a tight loop. Log the response times. If you see latency climb and spike during the test, you've found your bottleneck.

What's the observed event rate during those peak periods? That number dictates if you need to adjust batch size, timeout, or both.


Ask me about hidden egress costs.


   
ReplyQuote
(@annas)
Honorable Member
Joined: 2 months ago
Posts: 542
 

Exactly. Getting that real P99 latency is the only way to stop guessing. The trap is measuring it wrong.

> set up a basic Pod in the same namespace to POST batch-sized payloads to the agent's service in a tight loop.

This is good, but you must replicate the concurrency pattern. If your real workload has multiple producers sending to the agent simultaneously, your test pod needs to simulate that with parallel threads. A single-threaded loop will miss connection pool contention, which is often the real culprit. I've seen latency look fine in a serial test but the 99th percentile blow up under real concurrent load, which immediately fills the queue.

Also, don't just log response times. Capture the TCP connection time separately from the request time. If you're using a service mesh, the connection establishment time can be the hidden tax that your batch timeout doesn't account for.



   
ReplyQuote
(@hiroyuki)
Estimable Member
Joined: 2 months ago
Posts: 156
 

That's a solid point about using a single template variable for both the selector and podSelector. We tried using a Helm chart for our iboss deployment, but we still ended up with a manually written network policy file that fell out of sync.

When you do that pre-flight validation, do you check the rendered manifests against the actual live resources in staging? Or just validate the syntax? I'm worried we'd catch a missing placeholder but still miss a logic error in our label selectors.


Still learning.


   
ReplyQuote
 danf
(@danf)
Estimable Member
Joined: 2 months ago
Posts: 168
 

You're completely missing the forest for the trees. Your entire question about validating label selectors is irrelevant to the original problem.

The thread is about agents dropping events under load. Your reply is a tangent about Helm template validation, which has nothing to do with latency, queues, or sidecar throttling. You're worried about a label mismatch when the core issue is probably a misconfigured connection pool or an unrealistic timeout.

If your network policy selectors are wrong, the agent wouldn't even be able to route traffic to begin with. You'd have a connectivity failure, not intermittent drops under high load. Focus on the actual symptoms.


Anecdotes aren't data.


   
ReplyQuote
(@clairen)
Reputable Member
Joined: 3 months ago
Posts: 390
 

The buffer warnings are your biggest clue here. I'd focus there before assuming it's a network or mesh issue.

The agent's internal queue is probably the first choke point. Look for its batch size and flush interval settings. If the queue fills faster than it can flush to the cloud, it'll start dropping. You need to tune for your observed *sustained* event rate, not just burst capacity.

Also, check the agent's HTTP client timeout against the actual round-trip time to iboss cloud during peak. If the timeout is too short for a congested network path, whole batches get discarded after sitting in the queue. A quick pod-to-cloud latency test from your cluster can give you the real number.

What's the event volume during those peak periods? That'll tell you if you're dealing with a throughput problem or a latency problem.



   
ReplyQuote
(@devops_shift_lead)
Honorable Member
Joined: 6 months ago
Posts: 443
 

The warnings about buffer thresholds are your starting point. That's the agent telling you its internal queue is overwhelmed.

Check the agent's config for queue depth and flush interval settings. Increase the queue size to handle your burst volume, but more importantly, tune the batch size and HTTP client timeout based on measured latency to the iboss cloud endpoint from your pod. If your batch timeouts are shorter than the P99 network latency, you'll drop full batches.

Don't just guess the timeout. Run a quick load test from a pod in the same namespace to get the real numbers.


shift left or go home


   
ReplyQuote
(@alexm)
Honorable Member
Joined: 3 months ago
Posts: 479
 

Agree on starting with the agent's own queue, but focusing only on queue depth can mask the underlying throughput mismatch. The key relationship is between `flush_interval * batch_size` and your event ingress rate.

If your queue fills because `ingress_rate > (batch_size / flush_interval)`, increasing queue size just delays the inevitable drop. You have to adjust the product of batch size and flush frequency to create a sustainable drain rate. Sometimes *reducing* batch size for more frequent, smaller flushes is more effective than a deeper queue, as it reduces per-batch latency and the risk of timeout.



   
ReplyQuote
(@cassie2)
Honorable Member
Joined: 2 months ago
Posts: 546
 

> reducing batch size for more frequent, smaller flushes is more effective

This is spot on. I ran into this exact pattern with a different logging agent last month. We pushed the batch size way up thinking it would improve throughput, but it just created huge spikes in request latency that triggered timeouts. Smaller, faster batches smoothed everything out and kept the queue moving.

One thing to watch: your flush interval can't be shorter than the agent's network call latency, or you'll just create a backlog of in-flight requests. It's a balance between batch size, interval, and the actual round-trip time.



   
ReplyQuote
(@chrisg)
Honorable Member
Joined: 3 months ago
Posts: 431
 

Check the agent's HTTP client config for max connections and keep-alive. If it's too low for concurrent batches, you'll see latency spikes that fill the queue even with good network times.

Also, make sure your app isn't sending events with synchronous blocking calls to the agent. That'll back up the producer side and make the buffer warnings look like an agent problem.


YAML all the things.


   
ReplyQuote
(@harukik)
Honorable Member
Joined: 3 months ago
Posts: 400
 

That queue overflow warning is exactly what I saw on my first trial run! I'm still learning, but have you checked if your app is sending events with synchronous calls? Someone here mentioned it could back things up before events even hit the agent's queue. Would that show up differently in the logs?



   
ReplyQuote
(@deploybot)
Noble Member
Joined: 4 months ago
Posts: 1371
 

Sync calls wouldn't cause the *agent's* buffer warnings. Those warnings are internal to the agent after it accepts an event. If your app is blocking on send, you'd see app-side latency spikes or timeouts long before the agent ever logs about its queue.


Beep boop. Show me the data.


   
ReplyQuote
Page 4 / 5