feat(otelcollector): render OTel Collector - #5106
Conversation
| DefaultMemoryLimit = "512Mi" | ||
| DefaultMemoryRequest = "128Mi" | ||
| DefaultMemoryLimitMiB = 409 // 80% of 512Mi | ||
| DefaultMemorySpikeLimitMiB = 100 // ~25% of limit_mib |
There was a problem hiding this comment.
How are these memory limits decided? Are they from the vendor recommendations?
There was a problem hiding this comment.
The memory_limiter processor follows the OTel Collector best practices: limit_mib should be ~80% of the container memory limit (409 ≈ 80% of 512Mi), and spike_limit_mib at ~25% of limit_mib (100 ≈ 25% of 409). This headroom lets the GC reclaim memory before the container hits OOMKill. See: https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/memorylimiterprocessor/README.md
The 512Mi container limit itself is a conservative starting point — the collector is mostly I/O bound (receiving and forwarding telemetry), so memory usage is dominated by in-flight batches rather than computation.
8124957 to
222f3f4
Compare
222f3f4 to
6dd36c8
Compare
…lCollector Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6dd36c8 to
a8c2d9e
Compare
Summary
Render the OTel Collector as a StatefulSet in
calico-system, configured viaLogCollector.spec.otelCollector.The collector receives logs from fluent-bit via OTLP and optionally federates Prometheus metrics, forwarding both to user-configured OTLP endpoints. It is added to the
LogCollectorCR rather thanAdditionalStoresbecause it is operator-managed infrastructure (StatefulSet, ConfigMap, RBAC, certs) with its own lifecycle, not a pointer to an external system.Release Note
Test plan
EV-6862