Try it free

AI Observability metrics reference

  • Latest Dynatrace
  • Reference
  • 8-min read
  • Published Jul 02, 2026

This page lists every standard metric and span attribute that Dynatrace can ingest for GenAI workloads, grouped by where the data comes from.

  • OpenTelemetry-native metrics: First-class OTel metric instruments (gen_ai.client.*, gen_ai.server.*, gen_ai.workflow.*, gen_ai.invoke_agent.*, gen_ai.execute_tool.*) emitted directly by your instrumentation (Traceloop SDK, OneAgent, or other OTel/OpenLLMetry-based SDKs). Dynatrace ingests these as-is, and doesn't calculate them.

  • Dynatrace span-derived visualizations: Built by Dynatrace directly from gen_ai.* span attributes. No separate metric instrument is emitted for these; AI Observability AI Observability computes tiles, filters, and breakdowns straight from the span data.

  • Vendor-native metrics: These are sent directly by the AI platform or gateway (Amazon Bedrock, Azure OpenAI, NVIDIA NIM, Kong AI Gateway), either as provider-specific span attributes or as their own metrics.

  • Other OTel or third-party sources: These are metrics that you derive yourself (for example, by parsing inference-server or application logs) and then forward to Dynatrace.

OpenTelemetry-native metrics

All signals are ingestible and queryable via DQL. Some signals are visualized in tiles, as noted in the tables.

OpenTelemetry's GenAI semantic conventions call every property (as documented in this section) an "attribute," including the ones attached to metric data points. Once ingested into Dynatrace, properties on metrics become dimensions; only span, log, and resource properties keep the "attribute" name. The tables on this page use a single Attribute column for both, since most properties here start life as span attributes. In cases where a property is also usable as a metric dimension, this is called out directly in its row (for example, in the Type or Description cell).

GenAI client metrics (OpenTelemetry)

These are the standard OpenTelemetry semantic-convention metrics for GenAI clients. They are metric instruments, not span attributes; your instrumentation must be configured to emit them. Possible configuration options include, for example, Traceloop's should_enrich_metrics=True or a custom OTel MeterProvider. If a metric that already has a tile is missing, that tile shows empty or zeroed values without an error.

The Requirement level column in the per-metric attribute tables below is stricter than the upstream OTel semantic conventions. gen_ai.request.model and gen_ai.response.model are marked Required here because AI Observability AI Observability needs both to populate the model filter, prompts table, and overview charts. OTel semconv classifies them as "conditionally required" and "recommended" respectively.

MetricInstrument typeUnitDescriptionVisualization

gen_ai.client.token.usage

Histogram

{token}

Number of input and output tokens used.

Shows cost tiles, with token usage split by type

gen_ai.client.operation.duration

Histogram

s

GenAI operation duration.

Shows latency charts (p99, mean)

gen_ai.client.operation.time_to_first_chunk

Histogram

s

Time to receive the first chunk, measured from when the client issues the generation request to when the first chunk is received in the response stream. Only emitted for streaming calls.

Visualization not available

gen_ai.client.operation.time_per_output_chunk

Histogram

s

Time per output chunk, recorded for each chunk received after the first one, measured from the end of the previous chunk to the end of the current chunk. Only emitted for streaming calls.

Visualization not available

Metric: gen_ai.client.token.usage

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.operation.name

Required

string

The name of the operation being performed.

chat, generate_content, text_completion

gen_ai.provider.name

Required

string

The GenAI provider identified by the instrumentation.

openai, aws.bedrock, azure.ai.openai

gen_ai.token.type

Required

string

The type of token being counted. This splits the cost tile lanes.

input, output

gen_ai.request.model

Required

string

The model a request is being made to.

gpt-5

gen_ai.response.model

Required

string

The model that generated the response.

gpt-5-0616

If this metric is missing, all cost tiles show $0 with no visible error.

If the gen_ai.token.type attribute is missing, the tiles show an undifferentiated cost total instead of separate input/output lanes.

Metric: gen_ai.client.operation.duration

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.operation.name

Required

string

The name of the operation being performed.

chat, generate_content, text_completion

error.type

Conditionally required

string

Error class the operation ended with, if it errored.

timeout, 500

gen_ai.provider.name

Conditionally required

string

The GenAI provider identified by the instrumentation.

openai, aws.bedrock

gen_ai.request.model

Required

string

The model a request is being made to.

gpt-5

gen_ai.response.model

Required

string

The model that generated the response.

gpt-5-0616

If this metric is missing, all latency tiles show as empty, with no error surfaced.

Metric: gen_ai.client.operation.time_to_first_chunk

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.operation.name

Required

string

The name of the operation being performed.

chat, generate_content, text_completion

gen_ai.provider.name

Required

string

The GenAI provider identified by the instrumentation.

openai, gcp.gen_ai, gcp.vertex_ai

gen_ai.request.model

Required

string

The model a request is being made to, if available.

gpt-5

server.port

Conditionally required

int

GenAI server port, if server.address is set.

80, 8080, 443

gen_ai.response.model

Required

string

The model that generated the response.

gpt-5-0616

server.address

Recommended

string

GenAI server address.

example.com

Metric: gen_ai.client.operation.time_per_output_chunk

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.operation.name

Required

string

The name of the operation being performed.

chat, generate_content, text_completion

gen_ai.provider.name

Required

string

The GenAI provider identified by the instrumentation.

openai, gcp.gen_ai, gcp.vertex_ai

gen_ai.request.model

Required

string

The model a request is being made to, if available.

gpt-5

server.port

Conditionally required

int

GenAI server port, if server.address is set.

80, 8080, 443

gen_ai.response.model

Required

string

The model that generated the response.

gpt-5-0616

server.address

Recommended

string

GenAI server address.

example.com

GenAI model server metrics (OpenTelemetry)

These metrics describe the operational behavior of GenAI model servers (functional and performance metrics), rather than the client's view of an operation. They're most relevant for self-hosted or gateway-fronted model servers.

MetricInstrument typeUnitDescriptionVisualization

gen_ai.server.request.duration

Histogram

s

Generative AI server request duration, such as time-to-last-byte or last output token.

Visualization not available

gen_ai.server.time_to_first_token

Histogram

s

Time to generate the first token of the response, for streaming requests.

Visualization not available

gen_ai.server.time_per_output_token

Histogram

s

Time per output token generated after the first token, for successful responses.

Visualization not available

Common attributes

All three Gen AI model server metrics share this attribute set:

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.operation.name

Required

string

The name of the operation being performed.

chat, generate_content, text_completion

gen_ai.provider.name

Required

string

The GenAI provider identified by the client or server instrumentation.

openai, gcp.gen_ai, gcp.vertex_ai

error.type

Conditionally required

string

Error class the operation ended with, if it errored. Applies to gen_ai.server.request.duration only.

timeout, 500

gen_ai.request.model

Required

string

The model a request is being made to, if available.

gpt-5

server.port

Conditionally required

int

GenAI server port, if server.address is set.

80, 8080, 443

gen_ai.response.model

Required

string

The model that generated the response.

gpt-5-0616

server.address

Recommended

string

GenAI server address.

example.com

GenAI workflow, agent, and tool metrics (OpenTelemetry)

These metrics measure orchestration boundaries above a single model call: a full workflow, a single agent invocation, or a single tool execution. When instrumentation can only observe a single provider-facing client call, use gen_ai.client.operation.duration instead.

MetricInstrument typeUnitDescriptionStatus

gen_ai.workflow.duration

Histogram

s

End-to-end duration of a workflow execution, from application code initiating the workflow to the workflow completing.

Visualization not available

gen_ai.invoke_agent.duration

Histogram

s

End-to-end duration of a single in-process agent invocation, from invocation start until the agent emits its last response chunk or errors.

Visualization not available

gen_ai.execute_tool.duration

Histogram

s

Duration of a single tool execution.

Visualization not available

Metric: gen_ai.workflow.duration

AttributeRequirement levelValue typeDescriptionExample values

error.type

Conditionally required

string

Error class the operation ended with, if it errored.

timeout, 500

gen_ai.workflow.name

Conditionally required

string

Human-readable workflow name provided by the application, if available.

multi_agent_rag, customer_support_pipeline

Metric: gen_ai.invoke_agent.duration

AttributeRequirement levelValue typeDescriptionExample values

error.type

Conditionally required

string

Error class the operation ended with, if it errored.

timeout, 500

gen_ai.agent.name

Conditionally required

string

Human-readable name of the invoked GenAI agent, when available.

Math Tutor, Fiction Writer

gen_ai.request.model

Recommended

string

The model configured for the agent, if applicable.

gpt-5

Metric: gen_ai.execute_tool.duration

AttributeRequirement levelValue typeDescriptionExample values

gen_ai.tool.name

Required

string

Name of the tool used by the agent.

Flights

error.type

Conditionally required

string

Error class the operation ended with, if it errored.

timeout, 500

gen_ai.agent.name

Conditionally required

string

Human-readable name of the agent executing the tool, when applicable.

Math Tutor, Fiction Writer

gen_ai.tool.type

Recommended

string

Type of the tool used by the agent, if available.

function, extension, datastore

Dynatrace span-derived visualizations

These attributes are set directly on spans by your instrumentation. Dynatrace computes the following tiles, filters, and breakdowns straight from them; there's no separate metric instrument behind these visualizations.

Core span attributes

AI Observability AI Observability visualizes the following attributes, which are set directly on spans and exist alongside the general OTel/Dynatrace fields service.name, span.status_code, and duration.

Requirement levels reflect what AI Observability AI Observability needs to render correctly, which is stricter than the upstream OpenTelemetry semantic conventions for GenAI spans. Attributes marked Required here are mandatory for the app to show data; missing any of them leaves filters, tiles, or table columns empty.

AttributeRequirement levelVisualization

gen_ai.provider.name (or deprecated gen_ai.system)

Required

Shows provider filter, service explorer table

service.name

General OTel resource attribute, not GenAI-specific.

Shows service filter, service explorer table

gen_ai.operation.name

Required

Shows operation breakdown, trace analysis

gen_ai.request.model

Required

Shows prompts table, distributed tracing

gen_ai.response.model

Required

Shows model filter, overview charts

gen_ai.usage.input_tokens / gen_ai.usage.output_tokens

Required

Shows prompts table, cost tile fallback when the gen_ai.client.token.usage metric isn't emitted

span.status_code

General OTel span field, not GenAI-specific.

Shows service health tile (success/failure rate)

duration

General OTel span field, not GenAI-specific.

Shows average and p50/p90 latency in the Explorer per-service and per-model tables

gen_ai.agent.name

Conditionally required

Shows agent vs. LLM distinction, agent filter

gen_ai.conversation.id

Conditionally required

Shows groups spans into conversation threads in the prompts view

gen_ai.input.messages / gen_ai.output.messages

Required

Shows prompts table content

For agent-specific and provider-specific span attributes, see Additional span attributes and Vendor-native metrics and attributes.

For the full attribute list, required vs. optional levels per view, and provider-specific attributes, see Semantic Conventions for GenAI agent and framework spans.

Additional span attributes

The OTel GenAI semantic conventions define more gen_ai.* span attributes that apply across providers than the ones AI Observability AI Observability currently visualizes, see Core span attributes. None of these additional span attributes have a dedicated tile yet, but they're ingestible and queryable via DQL if your instrumentation sets them. For provider-specific attributes (OpenAI, AWS Bedrock, Azure AI Foundry), see the matching vendor under Vendor-native metrics and attributes.

More common span attributes

Requirement levels follow Semantic Conventions for GenAI spans.

AttributeRequirement levelDescription

gen_ai.request.max_tokens

Recommended

Maximum number of tokens requested.

gen_ai.request.temperature

Recommended

Sampling temperature for the request. Visualized in the Model versioning and A/B testing dashboard, but not in the custom app pages.

gen_ai.request.top_p

Recommended

The top_p sampling setting for the request.

gen_ai.request.stop_sequences

Recommended

Sequences that stop generation, if requested.

gen_ai.request.seed

Conditionally required

Seed used for deterministic sampling, if included in the request.

gen_ai.request.choice.count

Conditionally required

Number of response choices requested, if available and not 1.

gen_ai.response.id

Recommended

Unique identifier for the response.

gen_ai.response.finish_reasons

Recommended

Reasons the model stopped generating, per choice.

gen_ai.usage.cache_read.input_tokens

Recommended

Input tokens served from a prompt cache. Distinct from the Bedrock-specific gen_ai.prompt.caching metric. For more information, see Amazon Bedrock.

gen_ai.usage.cache_creation.input_tokens

Recommended

Input tokens used to write to a prompt cache.

error.type

Conditionally required

Error class the operation ended with, if it errored. Same field also used as an attribute on the GenAI client metrics. For more information, see GenAI client metrics.

Agent span attributes

Set on spans for agent invocations. See Semantic Conventions for GenAI agent and framework spans for the full specification.

This is done in addition to the already-visualized gen_ai.agent.name and gen_ai.input.messages/gen_ai.output.messages, see Core span attributes

AttributeRequirement levelDescription

gen_ai.agent.id

Conditionally required

Provider-assigned stable identifier of the agent (not a transient in-memory instance ID), if applicable.

gen_ai.agent.description

Conditionally required

Free-form description of the agent, if provided by the application.

gen_ai.agent.version

Conditionally required

Version of the agent, if provided by the application.

gen_ai.data_source.id

Conditionally required

Identifier of the data source used for RAG, if applicable.

gen_ai.output.type

Conditionally required

Content type requested from the model (for example text, json, image), if the request includes an output format.

gen_ai.system_instructions

Opt-in

System message or instructions given to the model, separate from the chat history.

gen_ai.tool.definitions

Opt-in

Tool definitions available to the agent.

Vendor-native metrics and attributes

This page lists only what AI Observability AI Observability currently visualizes. Vendors and gateways expose far more native metrics and attributes; for each vendor's complete signal set, reference the vendor documentation as linked in the relevant section.

For the full list of AI platforms and gateways that Dynatrace integrates with, see AI Observability integrations.

For a high-level overview, see Which metrics are available?.

Amazon Bedrock

AI Observability AI Observability visualizes the following metrics and attributes.

Metric or attributeTypeUsed for

gen_ai.bedrock.guardrail.activation, .content, .sensitive_info, .contextual, .topics, .words

Span attribute

Guardrail overview cards, contextual grounding score

gen_ai.guardrail.grounding_type

Span attribute (metric dimension)

Splits grounding vs. relevance guardrail tiles

gen_ai.prompt.caching

Metric (counter)

Cache-read/write token savings, distinct from the span attribute gen_ai.prompt_caching

See Amazon Bedrock Guardrails for the full guardrail feature set.

Dynatrace also ingests the OTel semantic-convention attributes aws.bedrock.guardrail.id (required) and aws.bedrock.knowledge_base.id (recommended), set when gen_ai.provider.name is aws.bedrock. (For more information, see AWS Bedrock semantic conventions.) These are distinct from the gen_ai.bedrock.guardrail.* attributes and aren't used by a tile today.

Azure OpenAI

AI Observability AI Observability visualizes the following metrics and attributes.

Metric or attributeTypeUsed for

gen_ai.prompt.prompt_filter_results

Span attribute

Guardrail overview cards

gen_ai.completion.content_filter_results

Span attribute

Guardrail overview cards

See Content filtering for Azure OpenAI for the full set of filter categories and severity levels.

Dynatrace also ingests the OTel semantic-convention attribute azure.resource_provider.namespace (recommended), set when gen_ai.provider.name is azure.ai.inference. For more information, see Azure AI Inference semantic conventions. It identifies the Azure Resource Provider Namespace (Microsoft.CognitiveServices for Azure AI Inference operations) and isn't used by a tile today.

The ready-made Azure AI Foundry dashboard covers cost, latency, and token totals only. It doesn't add content-filter tiles beyond the custom app tiles.

NVIDIA NIM

NVIDIA NIM inference servers expose their own Prometheus-compatible metrics covering request latency, throughput, token counts, and GPU utilization. There's no dedicated NIM tile in the custom app pages, but the ready-made NVIDIA dashboard visualizes a subset directly:

MetricUsed for

request_prompt_tokens, request_generation_tokens

Token usage and cost-estimate tiles

e2e_request_latency_seconds

Average and p99 request-latency tiles

time_to_first_token_seconds

Time-to-first-token tile

generation_tokens_total

Throughput tile

gpu_cache_usage_perc

GPU cache utilization tile

num_requests_running

In-flight request count

request_success_total

Request-volume tile

Standalone vLLM deployments expose this same metric set, since NIM proxies vLLM's own metrics without renaming or wrapping them.

See NVIDIA NIM observability reference for the full Prometheus metric set.

Google Gemini / Vertex AI

Gemini and Vertex AI return safety ratings on each response: the safetyRatings array has a harm category, probability, and blocked flag per category, plus a finishReason of SAFETY when a response is blocked.

Neither the custom app pages nor the ready-made Gemini/Vertex AI dashboard visualize safety ratings yet. To do this, you need to forward them to Dynatrace and query via DQL. The ready-made dashboard does cover the same generic cost, latency, and token tiles as the other vendor dashboards.

Kong AI Gateway

Kong AI Gateway exposes its own AI Gateway observability signals covering token usage, cost, and latency across LLM traffic. There's no dedicated Kong tile in the custom app pages, but the ready-made Kong dashboard visualizes:

MetricUsed for

kong_ai_llm_requests_total

Request-volume tiles by provider and model

kong_ai_llm_tokens_total

Token usage and cost tiles, split by token_type

kong_ai_llm_provider_latency_ms

Average and p99 provider-latency tiles

kong_kong_latency_ms

Gateway-side latency by service and route

See Kong AI Gateway observability for the full signal reference.

OpenAI

Dynatrace also ingests the following OTel semantic-convention attributes, set when gen_ai.provider.name is openai. For more information, see OpenAI semantic conventions. None of them are used by a tile today.

AttributeRequirement levelDescription

openai.api.type

Recommended

Which OpenAI API served the request, for example chat_completions or responses.

openai.request.service_tier

Conditionally required

The service tier requested, if included and not auto.

openai.response.service_tier

Conditionally required

The service tier used for the response, if included.

openai.response.system_fingerprint

Recommended

Fingerprint tracking any change in the GenAI environment that generated the response.

The ready-made OpenAI dashboard follows the same pattern as Bedrock and Azure OpenAI's cost/latency/token tiles, built entirely on standard gen_ai.client.token.usage, gen_ai.token.type, and gen_ai.prompt.caching.

Other ready-made dashboards

In addition to the vendor-specific dashboards, Dynatrace provides the following ready-made dashboards within the AI Observability AI Observability Additional use cases tiles.

  • Model versioning and A/B testing: Compares two provider/model combinations side by side (response time, token consumption, cost, temperature, and sample responses), computed entirely from gen_ai.* span attributes (gen_ai.request.temperature, gen_ai.usage.input_tokens/output_tokens with fallback to the deprecated gen_ai.usage.prompt_tokens/completion_tokens). It doesn't use the gen_ai.client.token.usage or gen_ai.client.operation.duration metrics.
  • Audit trail: Reads AI-auditing business events (fetch bizevents, event.type == "gen_ai.auditing") rather than spans or metrics, for data-governance and compliance reporting.

Other OTel or third-party sources

Some instrumentation libraries don't emit gen_ai.* names natively. These need a normalization step before AI Observability AI Observability can read them.

  • OpenInference (used by frameworks like LangChain and LlamaIndex) emits its own convention (llm.model_name, llm.token_count.*, and so on). Normalize it to gen_ai.* using an OTel Collector transform processor or Dynatrace OpenPipeline. OpenInference example provides the full attribute mapping and known gaps (for example, guardrail details beyond the validator name aren't yet translated).
  • Custom log-derived metrics. For sources with no OTel exporter (for example, parsing Ollama server logs), you can compute your own metrics and forward them to Dynatrace using the standard metrics ingest API. These won't match gen_ai.* naming automatically, so use consistent naming and dimensions if you want them to appear alongside standard views.

Related topics

  • Frequently asked questions about AI Observability and Dynatrace
  • OpenTelemetry semantic conventions for GenAI metrics
  • OpenTelemetry semantic conventions for GenAI spans
  • Dynatrace AI Agent instrumentation examples
Related tags
AI Observability