Skip to main content

Bring the senders you already run — and keep writing to the backend you already have

Maintainers

Trying a new observability backend used to mean re-pointing or re-instrumenting every sender first. The gateway now speaks the protocols your fleet already emits, and can forward everything to your current backend at the same time.

Four more ways in

The drop-in promise stopped at OTLP. A fleet already emitting Jaeger, Zipkin, Prometheus remote-write or Loki push had work to do before it could even try avuru obs. The gateway now accepts all four natively:

ProtocolPortEndpoint
Jaeger14250 (gRPC), 14268 (thrift/HTTP)avuruobs-gateway:14250, /api/traces
Zipkin9411/api/v2/spans
Prometheus remote-write9291/api/v1/write
Loki push3100/loki/api/v1/push
  • One values flag per protocol, every one off by default. An install that wants none renders byte-for-byte as it did before — no new ports, no new pipeline. See the OTLP bridge page for the per-protocol recipes.
  • No protocol gets a side door. Every enabled receiver joins the same tenant stage as OTLP, so per-project ingest keys are checked identically whatever wire format the data arrived on. Turning on a receiver never widens what an unauthenticated sender can do.
  • A receiver follows its signal's module. Remote-write needs infra metrics, Loki push needs logs — enabling one for a signal you do not store is quietly a no-op rather than a surprise later.
  • Two limits, stated rather than hidden. Jaeger over UDP is not offered: it carries no authentication hook, and the agent it belongs to is deprecated upstream. Remote-write is protocol v2 only — a v1 sender is refused with 415 instead of having its samples dropped in silence.

Dual-write while you make up your mind

Adopting a backend should be a reversible decision, and evaluating one usually means running two at once. gateway.forward.otlp and gateway.forward.kafka send everything the gateway ingests to a second destination as well — the backend you run today, or a Kafka topic another team owns.

  • A dead target cannot hurt the live one. Forwarders always render with a bounded sending queue and retry, so a second backend going down can never backpressure the write path into storage. That failure is precisely what makes people distrust dual-write.
  • Credentials stay out of config. Kafka SASL comes only from an existing Secret, never inline, so it never lands in a ConfigMap.
  • Misconfiguration fails loudly. A forwarder enabled with no endpoint or no brokers stops the render instead of quietly forwarding nowhere.

The claim is tested, not asserted

Every protocol above is exercised for real in CI: a genuine Jaeger batch, a Zipkin span, a snappy-framed remote-write sample and a Loki push are sent through the receivers a real Helm install renders, then the rows are asserted in storage and the forwarded trace is checked arriving at a stand-in second backend. The compatibility claim is a gate, like the five-minute wedge, rather than a sentence in a README.