Quickstart: OpenTelemetry Collector fan-out
If your traces already flow through an OpenTelemetry Collector to Langfuse, Datadog, or another backend, you can keep that pipeline unchanged. You add a second pipeline that sends a copy of the same traces to Mibo. Your observability tool keeps the traces it has today, and Mibo tests them.
Before you start
Section titled “Before you start”- A Mibo account with a verified email. Mibo rejects traces and AI features until you verify. See Email verification.
- An OpenTelemetry Collector that receives your application’s traces over OTLP.
- An application whose traces include the user input and the final response. See Capture the content Mibo needs.
1. Set up your Agent in Mibo
Section titled “1. Set up your Agent in Mibo”- Create an account at app.mibo-ai.com, or sign in, and click Set up your Agent.
- Enter an Agent Name and choose the Other agent type. Click Continue to API key.
- Click Create Agent API key and copy the key. Mibo shows it only once. Click I’ve saved it — continue to traces.
- In the Agent navigation, open Set up agent. Set OTLP Service Name to your application’s
service.name, such assupport-agent-prod, and click Save Changes.
The Collector forwards each trace’s service.name unchanged. Mibo routes the trace to the Agent whose OTLP Service Name equals it.
2. Add Mibo to the Collector
Section titled “2. Add Mibo to the Collector”Add an otlp_http/mibo exporter and a traces/mibo pipeline. Leave your existing exporter and pipeline as they are. In the example below, otlp_http/existing stands for your current backend’s exporter. Both pipelines read from the same otlp receiver, so each gets a copy of every trace. This configuration is illustrative: keep your own receivers, processors, and existing exporter settings.
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318
processors: batch: {} batch/mibo: send_batch_size: 20 send_batch_max_size: 20
exporters: otlp_http/existing: endpoint: <YOUR_EXISTING_BACKEND_ENDPOINT> otlp_http/mibo: traces_endpoint: https://api.mibo-ai.com/public/traces headers: x-api-key: ${env:MIBO_API_KEY} encoding: proto compression: gzip
service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [otlp_http/existing] traces/mibo: receivers: [otlp] processors: [batch/mibo] exporters: [otlp_http/mibo]Start the Collector with MIBO_API_KEY set to your Mibo API key.
What matters in the Mibo exporter:
traces_endpointis used as written. If you setendpointinstead, the exporter appends/v1/traces, which Mibo does not serve.headerscarries your key inx-api-key.encodingcan beprotoorjson. Mibo accepts both over OTLP/HTTP. Mibo does not accept OTLP/gRPC, so do not use theotlpgRPC exporter for Mibo.compression: gzipis the exporter default, and Mibo accepts it.batch/mibokeeps each request small. Mibo accepts up to 10 MB per request, and verbose GenAI spans can pass that in large batches.
3. Send your first trace
Section titled “3. Send your first trace”- Restart the Collector so it loads the new pipeline.
- Run one interaction through your Agent.
- Open the Agent’s Traces page in Mibo. The same trace still appears in your existing backend.
If the trace does not appear, check the Collector’s logs for the Mibo exporter’s response:
| Status | Cause |
|---|---|
401 UNAUTHORIZED |
The API key is missing, wrong, revoked, or expired. |
403 EMAIL_NOT_VERIFIED |
Your Mibo email is not verified yet. |
400 OTLP_SERVICE_NAME_REQUIRED |
The trace has no service.name. |
404 OTLP_PLATFORM_NOT_FOUND |
No Agent has an OTLP Service Name equal to the trace’s service.name. |
403 OTLP_PLATFORM_NOT_ALLOWED |
The service name matched an Agent, but the API key cannot write to it. |
413 PAYLOAD_TOO_LARGE |
The request is over 10 MB. Lower send_batch_max_size. |
429 TRACE_LIMIT_REACHED |
Your plan’s monthly trace quota is used up. Each new trace counts toward it. |
429 RATE_LIMIT_EXCEEDED |
The API key sent more than 1,000 requests in a minute, or too many concurrent requests. |
If the Collector also receives traces from other services, Mibo rejects the traces whose service.name matches no Agent. When a batch mixes accepted and rejected traces, Mibo returns 200 with a partial-success response that counts the rejected spans, and stores the accepted traces. To send Mibo only your Agent’s traces, add the Collector’s filter processor to the traces/mibo pipeline. It ships in the contrib distribution.
4. Create your first test
Section titled “4. Create your first test”- In the Agent navigation, open Create tests with AI.
- Click Use real trace. In Ground generation on a real trace, select your trace and click Use this trace.
- Review the generated test cases and click Save. Keep the test enabled, with Passive behavior set to Always run or Run when relevant.
- Run another interaction through your Agent. Mibo evaluates each new trace against your saved tests.
- Open the test and check Last Result.
Capture the content Mibo needs
Section titled “Capture the content Mibo needs”The Collector forwards what your instrumentation records. Mibo reads the user input from gen_ai.input.messages or gen_ai.prompt, and the final response from gen_ai.output.messages or gen_ai.response.text. Without user input, Run when relevant tests are skipped and the trace shows No usable input. Always run tests still run.
| Instrumentation | How to record content |
|---|---|
| Vercel AI SDK 7 | On by default. See the Vercel AI SDK quickstart. |
| OpenLLMetry | On by default. TRACELOOP_TRACE_CONTENT=false turns it off. See the OpenLLMetry quickstart. |
| OpenTelemetry’s GenAI instrumentations | Off by default. Their documentation enables span content with OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental and OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=span_only. Mibo has not verified these end to end. |
Some teams turn content capture off for their observability backend. Mibo needs it on for the traces it receives. Mibo always redacts secrets and redacts personal data when your project enables it. See Data handling.
What’s next
Section titled “What’s next”- OpenTelemetry (OTLP) for trace identity, batching, and error codes.
- Passive testing to understand which tests run on each trace.
- Creating test cases to refine the generated tests.