Cases3 cases
1 to 3 of 3
IL-0174After an upgrade to Fluent Bit 2.0, logging sidecars that used the Kafka output plugin kept restarting with SIGSEGV because the plugin read a corrupted record as a map without checking its typeHyperconnect2023- Symptoms
Hyperconnect upgraded the Fluent Bit sidecar of one service with little user impact to Fluent Bit 2.0 and watched it for several days. Only the containers that used the Kafka output plugin were being restarted, each time on SIGSEGV. The stack trace printed at the crash pointed into the Kafka output plugin, but no core file was left behind, because Fluent Bit ran inside Kubernetes.
- Trigger
Upgrading the Fluent Bit logging sidecar to version 2.0 (the 2.0.3 image) on a service with low user impact.
- Root cause
- Component
- Contributing factor
- Detection
The team monitored the upgraded sidecars for several days after the upgrade and saw that the containers using the Kafka output plugin were restarting with SIGSEGV.
- Remediation
- patched the Fluent Bit Kafka output plugin to skip data that is not a map before calling produce_message()
- ran a custom build with the patch as the sidecar, which stopped the segmentation faults
- submitted the patch upstream as fluent-bit pull request 6452, which was merged eight days later
- Lessons
A segmentation fault in a container can be debugged from its core file, but Kubernetes does not keep one by default: a volume mounted into the pod and a core_pattern pointing into it on the node are needed first. The debug image of the same version, run locally on the same CPU architecture with the matching source checkout, gives a gdb environment that matches production. Core files contain part of the process memory and may hold sensitive data, so they should be shared with care.
IL-0041fluent-bit silently stopped shipping application logs from one node to ElasticsearchPrometheusKube2020- Symptoms
On a Tuesday morning a developer reported that some production logs were missing. Only the logs from a single node were gone; the other nodes kept shipping normally through fluent-bit, the log shipper the team had run for more than three years.
- Root cause
- Component
- Contributing factor
- Detection
A developer reported missing production logs; no alert fired because fluent-bit's metrics showed no errors.
- Remediation
- added CPU to the Elasticsearch virtual machines, which cleared the write queue rejections
- rolled out Fluentd one node at a time, using node affinity to place Fluentd and anti-affinity to remove fluent-bit
- lowered Fluentd's flush_thread_count to 1 and set flush_interval to 5 seconds so the backlog of old logs did not overflow the buffer
- enabled Fluentd's Position DB so already-ingested data was skipped
- Action items
- Build monitoring for Fluentd on its Prometheus integration, including a throughput alert with separate day and night thresholds or a black-box log check
- Lessons
A log shipper can fail without an error message and with metrics that simply stop moving, so error-based alerts never fire; throughput alerts or end-to-end checks can catch it. Open source software can break in ways nobody expects, and sometimes the way out is to switch to a different shipper fast, node by node. A new shipper that starts from scratch replays every old log on the node and needs to be slowed down.
IL-0051A third-party log shipping client leaked file descriptors with every new container until nodes failed with too many open filesthredUP2018- Symptoms
While thredUP's move to Kubernetes seemed to be going well, Datadog showed the number of open files on the nodes climbing steadily, with no obvious reason.
- Trigger
Containers starting on a node, which in Kubernetes happens constantly with every deploy and every pod that moves between nodes.
- Root cause
- Component
- Contributing factor
- Detection
Datadog showed the number of open files on the nodes rising.
- Remediation
- killed the affected node, brought up a new one and redeployed
- Action items
- Move away from the log aggregation vendor
- Lessons
Libraries and agents that worked with the EC2 deployment lifecycle may not cope with Kubernetes, where containers start, stop and move between nodes constantly. Each one needs to be checked against the new lifecycle instead of being trusted because it worked before.
These 3 cases involve Telemetry agent and Elasticsearch or OpenSearch. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Software defect3 cases
- Contributing factor
- Organisation
IL-0174After an upgrade to Fluent Bit 2.0, logging sidecars that used the Kafka output plugin kept restarting with SIGSEGV because the plugin read a corrupted record as a map without checking its typeHyperconnect2023IL-0041fluent-bit silently stopped shipping application logs from one node to ElasticsearchPrometheusKube2020IL-0051A third-party log shipping client leaked file descriptors with every new container until nodes failed with too many open filesthredUP2018