Telemetry Cheatsheet¶
Namespace:
Cognesy\\Telemetry\\
Minimal usage:
use Cognesy\Telemetry\Adapters\OTel\OtelExporter;
use Cognesy\Telemetry\Application\Registry\TraceRegistry;
use Cognesy\Telemetry\Application\Telemetry;
$telemetry = new Telemetry(
registry: new TraceRegistry(),
exporter: new OtelExporter(),
);
$telemetry->openRoot('run', 'demo.run');
$telemetry->log('run', 'demo.step');
$telemetry->complete('run');
$telemetry->flush();
Core concepts:
TraceContextSpanReferenceObservationMetricMeasurementTelemetryContinuationInstrumentationProfile
Application services:
TelemetryTraceRegistryCompositeTelemetryExporter
Exporter setup:
Telemetrytakesnew TraceRegistry()plus an exporter- use
CompositeTelemetryExporter([...])when you want to fan out to multiple backends - call
flush()after the run to send buffered observations and metrics
Live Interop Suite¶
Run the live backend interop suite from the monorepo root:
Notes:
- tests live under
packages/telemetry/tests/Integration - the suite is opt-in and skips cleanly when disabled
- backend contract tests cover direct exporter write/read interop
- runtime smoke tests cover inference, streaming, agent, and AgentCtrl paths
- inference, streaming, and agent runtime smoke coverage also require
OPENAI_API_KEY - AgentCtrl smoke coverage also requires a usable
codexCLI with working auth/config
Logfire¶
Basic setup:
use Cognesy\Telemetry\Adapters\Logfire\LogfireConfig;
use Cognesy\Telemetry\Adapters\Logfire\LogfireExporter;
use Cognesy\Telemetry\Application\Registry\TraceRegistry;
use Cognesy\Telemetry\Application\Telemetry;
$telemetry = new Telemetry(
registry: new TraceRegistry(),
exporter: new LogfireExporter(new LogfireConfig(
endpoint: 'https://logfire-eu.pydantic.dev',
serviceName: 'my-service',
headers: ['Authorization' => $token],
)),
);
Notes:
endpointis the base OTLP URL, not the full/v1/tracespathLogfireExporterrequires eitherLogfireConfigor a custom transport- practical examples:
examples/A03_Troubleshooting/TelemetryLogfire/run.phpexamples/D05_AgentTroubleshooting/TelemetryLogfire/run.phpexamples/D05_AgentTroubleshooting/SubagentTelemetryLogfire/run.php
Langfuse¶
Basic setup:
use Cognesy\Telemetry\Adapters\Langfuse\LangfuseConfig;
use Cognesy\Telemetry\Adapters\Langfuse\LangfuseExporter;
use Cognesy\Telemetry\Adapters\Langfuse\LangfuseHttpTransport;
use Cognesy\Telemetry\Application\Registry\TraceRegistry;
use Cognesy\Telemetry\Application\Telemetry;
$telemetry = new Telemetry(
registry: new TraceRegistry(),
exporter: new LangfuseExporter(
transport: new LangfuseHttpTransport(new LangfuseConfig(
baseUrl: $baseUrl,
publicKey: $publicKey,
secretKey: $secretKey,
)),
),
);
Notes:
- Langfuse traces are sent to
/api/public/otel/v1/traces - request-scoped traces fall back to request ids as
session.idvalues - practical examples:
examples/A03_Troubleshooting/TelemetryLangfuse/run.phpexamples/D05_AgentTroubleshooting/TelemetryLangfuse/run.phpexamples/D05_AgentTroubleshooting/SubagentTelemetryLangfuse/run.php
Runtime wiring¶
For runtime packages, telemetry is usually attached to an event bus through RuntimeEventBridge
and one or more projectors:
use Cognesy\Agents\Telemetry\AgentsTelemetryProjector;
use Cognesy\Http\Telemetry\HttpClientTelemetryProjector;
use Cognesy\Polyglot\Telemetry\PolyglotTelemetryProjector;
use Cognesy\Telemetry\Application\Projector\CompositeTelemetryProjector;
use Cognesy\Telemetry\Application\Projector\RuntimeEventBridge;
(new RuntimeEventBridge(new CompositeTelemetryProjector([
new AgentsTelemetryProjector($telemetry),
new PolyglotTelemetryProjector($telemetry),
new HttpClientTelemetryProjector($telemetry),
])))->attachTo($events);
Runtime notes:
- runtime packages own their local projectors and emit serialized
data['telemetry']envelopes - telemetry core rehydrates the envelope and correlates spans centrally
AgentCtrlTelemetryProjectorcorrelatesagent-ctrlbyexecutionIdagent_ctrl.session_idis continuation metadata, not the primary trace key- request-scoped traces fall back to request ids as
session.idvalues for Langfuse - use the Integration suite when you need live backend proof, not just local payload inspection
Adapter namespaces:
Cognesy\\Telemetry\\Adapters\\OTelCognesy\\Telemetry\\Adapters\\LogfireCognesy\\Telemetry\\Adapters\\Langfuse