Open-source AI infrastructure

OpenTelemetry for LLM Applications: A Practical Guide

How to instrument LLM applications with OpenTelemetry using the GenAI semantic conventions, why gen_ai.system is now gen_ai.provider.name, what belongs on a span, a…

Why OpenTelemetry rather than a vendor SDK

The honest argument is not technical elegance. It is that LLM observability vendors have been acquired, relicensed and repositioned repeatedly over the past two years, and instrumentation is the most expensive thing to redo. Every service you instrument is a code change, a review and a deploy. Doing that twice because your vendor changed is a bad use of a quarter.

The semantic conventions, and where they moved

The genai. namespace is the OpenTelemetry semantic convention for generative AI. Worth knowing where it came from: Traceloop's OpenLLMetry project developed conventions that became the basis for the official OTel GenAI effort, and its README notes that its semantic conventions are now part of OpenTelemetry. OpenLIT states that it follows and maintains the conventions with the OTel community.

What a useful span actually looks like

Here is a minimal manual instrumentation in Python. Adapt the attribute set, not the structure.

The two mistakes that make traces useless

Mistake one: putting prompts and completions on span attributes by default

Sessions and multi-turn conversations

A conversation is not a trace. It is a sequence of traces that need grouping.

Which generation is your backend on

The rename split the ecosystem in half, and it is the sort of thing nobody writes down. As of August 2026: