Skip to main content
This guide applies to teams running meetingMLservice (the Pipecat-based meeting engine). The Waterr.ai cloud product ships with internal tracing already wired — this page is for developers self-hosting or contributing to the service who want spans flowing to their own observability backend.

How it works

meetingMLservice uses the OpenTelemetry Protocol (OTLP) over HTTP to ship traces. That means it works with any OTLP-compatible backend — the integration is not tied to a single vendor. The same three env vars switch between providers:
Restart the service and traces start flowing. See Provider configurations below for the exact endpoint + header per backend.

What gets traced

Once tracing is enabled, every meeting emits structured spans for:
  • Pipeline stages — STT, LLM, and TTS latency + token usage per turn (Pipecat’s built-in enable_tracing on the PipelineTask)
  • Agentic LLM callsagentic.llm.call for every task-detection / orchestration call, with full input messages and JSON output
  • Agentic flow eventsagentic.process_user_message, agentic.task_detected, agentic.task_created, content-save spans
Standard GenAI semantic-convention attributes are attached so backends that understand OTel GenAI (Langfuse, Phoenix, Honeycomb, etc.) render them as proper LLM generations:

Provider configurations

Pick your backend, copy the env block into meetingMLservice/.env (local) or your deploy secrets (prod), restart the service. The OTel deps (opentelemetry-api, opentelemetry-sdk, opentelemetry-exporter-otlp-proto-http) are already pinned in requirements.txt — no extra pip install needed.
Best for: LLM-native observability with prompt/output replay, evals, datasets, and session grouping.
Build the header value:
Get keys from Project Settings → API Keys. View traces at cloud.langfuse.comTraces.
Want traces in two places at once (e.g. Langfuse for LLM debugging + Datadog for ops alerts)? Run an OpenTelemetry Collector as a sidecar, point meetingMLservice at the collector, and fan out from there. The service only exports to one OTLP endpoint — multi-destination is a collector concern.

How it’s wired

You don’t need to write any tracing code — the integration is built into the pipeline factories. For reference:
Agentic code creates its own child spans on the same provider — see services/agentic/llm_helper.py and services/agentic/agentic_flow_manager.py. You can also tee spans to stdout while debugging by setting OTEL_CONSOLE_EXPORT=true.

Verify

Start a meeting against your dev instance, then in your backend:
  1. Look for traces tagged with service name pipecat-demo (or whatever service_name you passed to setup_tracing).
  2. You should see one trace per meeting with nested spans for each pipeline stage and agentic call.
If nothing shows up:
  • ENABLE_TRACING is empty. os.getenv("ENABLE_TRACING") returns None if the var isn’t set. Set it to true.
  • Wrong region / endpoint. Most providers split EU and US data centers; using the wrong one returns 401 or 404.
  • Auth header malformed. Must be Header=Value (equals sign, not colon), on a single line. Multiple headers are comma-separated: key1=value1,key2=value2.
  • Enable console export. Set OTEL_CONSOLE_EXPORT=true and watch the service logs — if spans print there but not in your backend, the issue is auth or network egress.

Security notes

  • Never commit keys. Inject OTEL_EXPORTER_OTLP_HEADERS via your deploy secret store, not .env in git.
  • PII in spans. Agentic spans capture full input messages and LLM output for debuggability. If your meetings carry sensitive data (PHI, payment info, etc.), keep tracing off in prod or point it at a backend inside your VPC (self-hosted Langfuse, SigNoz, Phoenix, or an internal collector).
  • Rotate on exposure. All providers above let you revoke ingest keys from their settings UI; rotate immediately if a .env file leaks.

Scope

Only meetingMLservice emits OTLP spans today. CoreBackend (Node.js REST API) and ModelCloudService (LLM routing) are not yet instrumented — if you need full request-tracing across all three, you’ll need to add OTLP exporters there as a follow-up.