What to measure
For every Claude call, capture: latency (TTFT and TTLT for streams), input/output/cache token counts, model id, feature label, stop_reason, error class (if any), tool_use names if applicable. These are the dimensions you slice on when costs spike or quality drops.
Trace the loop, not just the call
Tool loops can be 5-10 round-trips. A single trace per round is noise; a span per round inside one parent trace is signal. OpenTelemetry's parent/child span model fits naturally — wrap the loop in a span, each round becomes a child.
Sample prompts and responses
Cost spikes and quality regressions are usually caused by a specific prompt or input pattern. Periodically sample full prompt+response pairs (with PII redaction) into cold storage so you can replay later. cwkPippa's JSONL is exactly this — every event durable, every regression replayable.