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] } } }
runtimeinstrumentation usually paired
NodeOpenTelemetry Node SDK with auto-instrumentations, pino
Pythonopentelemetry-instrument (Django, Flask, psycopg, Celery), structlog
GoOTel Go SDK with otelhttp and otelgrpc wrappers (explicit, no monkey patching), slog
JavaOpenTelemetry Java agent (bytecode instrumentation, zero code), Micrometer
Rubyopentelemetry-ruby instrumentation-all, lograge
.NETOpenTelemetry .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.