Part 7 · 1 chapters · ~8 min
Observability Agents
The OpenTelemetry Collector as the standard pipeline, log shippers (Fluent Bit, Vector), vendor agents, sidecar against DaemonSet deployment, and the instrumentation each runtime is paired with.
10
Collectors, shippers and per-runtime instrumentation
code
# OpenTelemetry Collector pipeline: receive, process, export
receivers: { otlp: { protocols: { grpc: {}, http: {} } }, prometheus: { config: { scrape_configs: [...] } } }
processors: { batch: {}, memory_limiter: { limit_mib: 512 }, tail_sampling: { policies: [ { name: errors, type: status_code, status_code: { status_codes: [ERROR] } } ] } }
exporters: { otlphttp/tempo: { endpoint: http://tempo:4318 }, prometheusremotewrite: { endpoint: http://mimir/api/v1/push } }
service: { pipelines: { traces: { receivers: [otlp], processors: [memory_limiter, tail_sampling, batch], exporters: [otlphttp/tempo] } } }| runtime | instrumentation usually paired |
|---|---|
| Node | OpenTelemetry Node SDK with auto-instrumentations, pino |
| Python | opentelemetry-instrument (Django, Flask, psycopg, Celery), structlog |
| Go | OTel Go SDK with otelhttp and otelgrpc wrappers (explicit, no monkey patching), slog |
| Java | OpenTelemetry Java agent (bytecode instrumentation, zero code), Micrometer |
| Ruby | opentelemetry-ruby instrumentation-all, lograge |
| .NET | OpenTelemetry .NET with ASP.NET Core instrumentation |
Sidecar or DaemonSet: a Collector per node (DaemonSet) is cheaper and simpler; a sidecar per pod isolates tenants and config. Logs: apps write JSON to stdout; Fluent Bit or Vector on each node ships them. Vendor agents (Datadog, New Relic) bundle all of this, at a price.