@guard-sdk/otel
v0.5.0
Published
OpenTelemetry logger integration for guard-sdk.
Maintainers
Readme
@guard-sdk/otel
OpenTelemetry logger integration for guard-sdk.
API
createOpenTelemetryLogger(config)toGuardTelemetryAttributes(usage)GUARD_TELEMETRY_SCHEMA_VERSIONGUARD_TELEMETRY_ATTRIBUTE_KEYS
createOpenTelemetryLogger returns a GuardLogger that emits one span and/or one log record per completed guard run.
Config
import { createOpenTelemetryLogger } from "@guard-sdk/otel";
const logger = createOpenTelemetryLogger({
tracer,
logEmitter,
spanName: "guard.run",
logBody: "guard.run",
traceSampleRate: 1,
logSampleRate: 1,
});tracer: injected OpenTelemetry-compatible tracer.logEmitter: injected OpenTelemetry-compatible log emitter.- At least one of
tracerorlogEmitteris required. - Sampling values must be in
[0, 1].
Guard Integration
import { guard } from "@guard-sdk/core";
import { createOpenTelemetryLogger } from "@guard-sdk/otel";
const logger = createOpenTelemetryLogger({
tracer,
logEmitter,
});
const { usage } = await guard.run(async () => callLLM(), {
name: "report-summary",
provider: "openai",
model: "gpt-4.1-mini",
logger,
});
console.log(usage);Agent loop (guard.createRun)
const run = guard.createRun({
name: "research-agent",
logger,
});
await run.call("step-1", async () => callLLM());
await run.call("step-2", async () => callLLM());
console.log(run.summary());Stable telemetry schema
Schema version: 1.0.
Attributes use stable namespaced keys:
guard.schema_versionguard.run_idguard.nameguard.user_idguard.providerguard.modelguard.statusguard.blocked_reasonguard.callsguard.retriesguard.duration_msguard.input_tokensguard.output_tokensguard.total_tokensguard.estimated_cost_usdguard.would_blockguard.would_block_reasons
Missing optional values are omitted.
Semantic guarantees
v0.5starts telemetry schema stability for these keys.- Minor releases only add fields; existing keys keep meaning.
statussemantics stay aligned with@guard-sdk/core:success | failed | blocked | timeout.
