<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configure Tempo on Grafana Labs</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/</link><description>Recent content in Configure Tempo on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/tempo/v3.0.x/configuration/index.xml" rel="self" type="application/rss+xml"/><item><title>Tenant IDs</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/tenant-ids/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/tenant-ids/</guid><content><![CDATA[&lt;h1 id=&#34;tenant-ids&#34;&gt;Tenant IDs&lt;/h1&gt;
&lt;p&gt;Within a Grafana Tempo cluster, the tenant ID is the unique identifier of a tenant. Tenant IDs enable multi-tenancy in Tempo, allowing multiple organizations or tenants to share the same Tempo cluster while maintaining data isolation.&lt;/p&gt;
&lt;p&gt;Tempo uses the &lt;code&gt;X-Scope-OrgID&lt;/code&gt; HTTP header to identify and enforce tenant boundaries. This header is set to the tenant ID value and is used for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scoped writes (ingest)&lt;/strong&gt;: Each span is stored under its specified tenant, ensuring data isolation at the storage level&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scoped reads (queries)&lt;/strong&gt;: Queries return only data belonging to the specified tenant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information about setting up multi-tenancy, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/manage-advanced-systems/multitenancy/&#34;&gt;Enable multi-tenancy&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;characters-and-length-restrictions&#34;&gt;Characters and length restrictions&lt;/h2&gt;
&lt;p&gt;Tenant IDs must be less-than or equal-to 150 bytes in length. The length is measured in bytes, not characters, which is important for multi-byte characters.&lt;/p&gt;
&lt;p&gt;Tenant IDs can only include the following supported characters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alphanumeric characters (&lt;code&gt;0-9&lt;/code&gt;, &lt;code&gt;a-z&lt;/code&gt;, &lt;code&gt;A-Z&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Special characters (&lt;code&gt;!&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;_&lt;/code&gt;, &lt;code&gt;.&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;&#39;&lt;/code&gt;, &lt;code&gt;(&lt;/code&gt;, &lt;code&gt;)&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All other characters, including slashes (&lt;code&gt;/&lt;/code&gt;), backslashes (&lt;code&gt;\&lt;/code&gt;), and whitespace, aren&amp;rsquo;t supported.&lt;/p&gt;
&lt;p&gt;Tenant IDs are case-sensitive. For example, &lt;code&gt;Tenant-123&lt;/code&gt; and &lt;code&gt;tenant-123&lt;/code&gt; are treated as different tenant IDs.&lt;/p&gt;
&lt;p&gt;The tenant ID should not be empty.&lt;/p&gt;
&lt;p&gt;For security reasons, &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;..&lt;/code&gt; aren&amp;rsquo;t valid tenant IDs. These values are restricted to prevent path traversal attacks.&lt;/p&gt;
&lt;h2 id=&#34;cross-tenant-queries&#34;&gt;Cross-tenant queries&lt;/h2&gt;
&lt;p&gt;Cross-tenant queries are supported for search, search-tags, and trace-by-ID search operations.
Refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/manage-advanced-systems/cross_tenant_query/&#34;&gt;Cross-tenant query federation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;multitenancy&#34;&gt;Multitenancy&lt;/h2&gt;
&lt;p&gt;Tenant IDs are transmitted to Tempo via the &lt;code&gt;X-Scope-OrgID&lt;/code&gt; HTTP header. This header must be included in all requests to Tempo when multi-tenancy is enabled.&lt;/p&gt;
&lt;p&gt;Multi-tenancy on ingestion is supported with both gRPC and HTTP for OTLP (OpenTelemetry Protocol). You can add the header in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenTelemetry Collector configuration&lt;/li&gt;
&lt;li&gt;Grafana Alloy configuration&lt;/li&gt;
&lt;li&gt;Any HTTP/gRPC client using &lt;code&gt;curl&lt;/code&gt; or other relevant tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/manage-advanced-systems/multitenancy/&#34;&gt;Enable multi-tenancy&lt;/a&gt; for more information.&lt;/p&gt;
]]></content><description>&lt;h1 id="tenant-ids">Tenant IDs&lt;/h1>
&lt;p>Within a Grafana Tempo cluster, the tenant ID is the unique identifier of a tenant. Tenant IDs enable multi-tenancy in Tempo, allowing multiple organizations or tenants to share the same Tempo cluster while maintaining data isolation.&lt;/p></description></item><item><title>Manifest</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/manifest/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/manifest/</guid><content><![CDATA[&lt;h1 id=&#34;manifest&#34;&gt;Manifest&lt;/h1&gt;
&lt;p&gt;This document is a reference for all Tempo options and their defaults. If you are just getting
started with Tempo, refer to &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/docker-compose&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo examples&lt;/a&gt;
and other &lt;a href=&#34;../&#34;&gt;configuration documentation&lt;/a&gt;. Most installations will require only setting 10 to 20 of these options.&lt;/p&gt;
&lt;h2 id=&#34;complete-configuration&#34;&gt;Complete configuration&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;target: all
http_api_prefix: &amp;#34;&amp;#34;
memory:
    automemlimit_enabled: false
    automemlimit_ratio: 0.8
server:
    http_listen_network: tcp
    http_listen_address: &amp;#34;&amp;#34;
    http_listen_port: 3200
    http_listen_conn_limit: 0
    grpc_listen_network: tcp
    grpc_listen_address: &amp;#34;&amp;#34;
    grpc_listen_port: 9095
    grpc_listen_conn_limit: 0
    grpc_collect_max_streams_by_conn: true
    proxy_protocol_enabled: false
    tls_cipher_suites: &amp;#34;&amp;#34;
    tls_min_version: &amp;#34;&amp;#34;
    http_tls_config:
        cert: &amp;#34;&amp;#34;
        key: null
        client_ca: &amp;#34;&amp;#34;
        cert_file: &amp;#34;&amp;#34;
        key_file: &amp;#34;&amp;#34;
        client_auth_type: &amp;#34;&amp;#34;
        client_ca_file: &amp;#34;&amp;#34;
    grpc_tls_config:
        cert: &amp;#34;&amp;#34;
        key: null
        client_ca: &amp;#34;&amp;#34;
        cert_file: &amp;#34;&amp;#34;
        key_file: &amp;#34;&amp;#34;
        client_auth_type: &amp;#34;&amp;#34;
        client_ca_file: &amp;#34;&amp;#34;
    register_instrumentation: true
    report_grpc_codes_in_instrumentation_label_enabled: false
    graceful_shutdown_timeout: 30s
    http_server_read_timeout: 30s
    http_server_read_header_timeout: 0s
    http_server_write_timeout: 30s
    http_server_idle_timeout: 2m0s
    http_log_closed_connections_without_response_enabled: false
    grpc_server_max_recv_msg_size: 16777216
    grpc_server_max_send_msg_size: 16777216
    grpc_server_max_concurrent_streams: 100
    grpc_server_max_connection_idle: 2562047h47m16.854775807s
    grpc_server_max_connection_age: 2562047h47m16.854775807s
    grpc_server_max_connection_age_grace: 2562047h47m16.854775807s
    grpc_server_keepalive_time: 2h0m0s
    grpc_server_keepalive_timeout: 20s
    grpc_server_min_time_between_pings: 10s
    grpc_server_ping_without_stream_allowed: true
    grpc_server_num_workers: 0
    grpc_server_stats_tracking_enabled: true
    grpc_server_recv_buffer_pools_enabled: false
    grpc_server_read_buffer_size: 32768
    grpc_server_write_buffer_size: 32768
    log_format: logfmt
    log_level: info
    log_source_ips_enabled: false
    log_source_ips_full: false
    log_source_ips_header: &amp;#34;&amp;#34;
    log_source_ips_regex: &amp;#34;&amp;#34;
    log_request_headers: false
    log_request_at_info_level_enabled: false
    log_request_exclude_headers_list: &amp;#34;&amp;#34;
    trace_request_headers: false
    trace_request_exclude_headers_list: &amp;#34;&amp;#34;
    http_path_prefix: &amp;#34;&amp;#34;
    cluster_validation:
        label: &amp;#34;&amp;#34;
        additional_labels: &amp;#34;&amp;#34;
        grpc:
            enabled: false
            soft_validation: false
        http:
            enabled: false
            soft_validation: false
            excluded_paths: &amp;#34;&amp;#34;
            excluded_user_agents: &amp;#34;&amp;#34;
    create_new_traces: false
internal_server:
    http_listen_network: tcp
    http_listen_address: &amp;#34;&amp;#34;
    http_listen_port: 3101
    http_listen_conn_limit: 0
    grpc_listen_network: &amp;#34;&amp;#34;
    grpc_listen_address: &amp;#34;&amp;#34;
    grpc_listen_port: 0
    grpc_listen_conn_limit: 0
    grpc_collect_max_streams_by_conn: false
    proxy_protocol_enabled: false
    tls_cipher_suites: &amp;#34;&amp;#34;
    tls_min_version: &amp;#34;&amp;#34;
    http_tls_config:
        cert: &amp;#34;&amp;#34;
        key: null
        client_ca: &amp;#34;&amp;#34;
        cert_file: &amp;#34;&amp;#34;
        key_file: &amp;#34;&amp;#34;
        client_auth_type: &amp;#34;&amp;#34;
        client_ca_file: &amp;#34;&amp;#34;
    grpc_tls_config:
        cert: &amp;#34;&amp;#34;
        key: null
        client_ca: &amp;#34;&amp;#34;
        cert_file: &amp;#34;&amp;#34;
        key_file: &amp;#34;&amp;#34;
        client_auth_type: &amp;#34;&amp;#34;
        client_ca_file: &amp;#34;&amp;#34;
    register_instrumentation: false
    report_grpc_codes_in_instrumentation_label_enabled: false
    graceful_shutdown_timeout: 30s
    http_server_read_timeout: 30s
    http_server_read_header_timeout: 0s
    http_server_write_timeout: 30s
    http_server_idle_timeout: 2m0s
    http_log_closed_connections_without_response_enabled: false
    grpc_server_max_recv_msg_size: 0
    grpc_server_max_send_msg_size: 0
    grpc_server_max_concurrent_streams: 0
    grpc_server_max_connection_idle: 0s
    grpc_server_max_connection_age: 0s
    grpc_server_max_connection_age_grace: 0s
    grpc_server_keepalive_time: 0s
    grpc_server_keepalive_timeout: 0s
    grpc_server_min_time_between_pings: 0s
    grpc_server_ping_without_stream_allowed: false
    grpc_server_num_workers: 0
    grpc_server_stats_tracking_enabled: false
    grpc_server_recv_buffer_pools_enabled: false
    grpc_server_read_buffer_size: 0
    grpc_server_write_buffer_size: 0
    log_format: logfmt
    log_level: info
    log_source_ips_enabled: false
    log_source_ips_full: false
    log_source_ips_header: &amp;#34;&amp;#34;
    log_source_ips_regex: &amp;#34;&amp;#34;
    log_request_headers: false
    log_request_at_info_level_enabled: false
    log_request_exclude_headers_list: &amp;#34;&amp;#34;
    trace_request_headers: false
    trace_request_exclude_headers_list: &amp;#34;&amp;#34;
    http_path_prefix: &amp;#34;&amp;#34;
    cluster_validation:
        label: &amp;#34;&amp;#34;
        additional_labels: &amp;#34;&amp;#34;
        grpc:
            enabled: false
            soft_validation: false
        http:
            enabled: false
            soft_validation: false
            excluded_paths: &amp;#34;&amp;#34;
            excluded_user_agents: &amp;#34;&amp;#34;
    create_new_traces: false
    enable: false
distributor:
    ring:
        kvstore:
            store: memberlist
            prefix: collectors/
            consul:
                host: localhost:8500
                acl_token: &amp;#34;&amp;#34;
                http_client_timeout: 20s
                consistent_reads: false
                watch_rate_limit: 1
                watch_burst_size: 1
                cas_retry_delay: 1s
            etcd:
                endpoints: []
                dial_timeout: 10s
                max_retries: 10
                tls_enabled: false
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: &amp;#34;&amp;#34;
                username: &amp;#34;&amp;#34;
                password: &amp;#34;&amp;#34;
            multi:
                primary: &amp;#34;&amp;#34;
                secondary: &amp;#34;&amp;#34;
                mirror_enabled: false
                mirror_timeout: 2s
        heartbeat_period: 5s
        heartbeat_timeout: 5m0s
        instance_id: hostname
        instance_interface_names:
            - eth0
            - en0
        instance_port: 0
        instance_addr: &amp;#34;&amp;#34;
        enable_inet6: false
    receivers: {}
    override_ring_key: distributor
    forwarders: []
    usage:
        cost_attribution:
            max_cardinality: 10000
            stale_duration: 15m0s
    kafka_config:
        address: &amp;#34;&amp;#34;
        topic: &amp;#34;&amp;#34;
        client_id: &amp;#34;&amp;#34;
        dial_timeout: 0s
        write_timeout: 0s
        sasl_username: &amp;#34;&amp;#34;
        sasl_password: &amp;#34;&amp;#34;
        consumer_group: &amp;#34;&amp;#34;
        consumer_group_offset_commit_interval: 0s
        last_produced_offset_retry_timeout: 0s
        auto_create_topic_enabled: false
        auto_create_topic_default_partitions: 0
        producer_max_record_size_bytes: 0
        producer_max_buffered_bytes: 0
        target_consumer_lag_at_startup: 0s
        max_consumer_lag_at_startup: 0s
        disable_kafka_telemetry: false
        consumer_group_lag_metric_update_interval: 0s
    retry_after_on_resource_exhausted: 5s
    max_attribute_bytes: 2048
live_store_client:
    pool_config:
        checkinterval: 15s
        healthcheckenabled: true
        healthchecktimeout: 1s
        healthcheckgraceperiod: 0s
        maxconcurrenthealthchecks: 0
    remote_timeout: 5s
    grpc_client_config:
        max_recv_msg_size: 104857600
        max_send_msg_size: 104857600
        grpc_compression: snappy
        rate_limit: 0
        rate_limit_burst: 0
        backoff_on_ratelimits: false
        backoff_config:
            min_period: 100ms
            max_period: 10s
            max_retries: 10
        initial_stream_window_size: 63KiB1023B
        initial_connection_window_size: 63KiB1023B
        tls_enabled: false
        tls_cert_path: &amp;#34;&amp;#34;
        tls_key_path: &amp;#34;&amp;#34;
        tls_ca_path: &amp;#34;&amp;#34;
        tls_server_name: &amp;#34;&amp;#34;
        tls_insecure_skip_verify: false
        tls_cipher_suites: &amp;#34;&amp;#34;
        tls_min_version: &amp;#34;&amp;#34;
        connect_timeout: 5s
        connect_backoff_base_delay: 1s
        connect_backoff_max_delay: 5s
        cluster_validation:
            label: &amp;#34;&amp;#34;
querier:
    search:
        query_timeout: 30s
    trace_by_id:
        query_timeout: 10s
        external:
            endpoint: &amp;#34;&amp;#34;
            timeout: 10s
    metrics:
        concurrent_blocks: 2
        time_overlap_cutoff: 0.2
    partition_ring:
        minimize_requests: true
        hedging_delay: 3s
    max_concurrent_queries: 20
    frontend_worker:
        frontend_address: &amp;#34;&amp;#34;
        dns_lookup_duration: 10s
        parallelism: 2
        match_max_concurrent: true
        id: &amp;#34;&amp;#34;
        grpc_client_config:
            max_recv_msg_size: 104857600
            max_send_msg_size: 16777216
            grpc_compression: snappy
            rate_limit: 0
            rate_limit_burst: 0
            backoff_on_ratelimits: false
            backoff_config:
                min_period: 100ms
                max_period: 1s
                max_retries: 5
            initial_stream_window_size: 0B
            initial_connection_window_size: 0B
            tls_enabled: false
            tls_cert_path: &amp;#34;&amp;#34;
            tls_key_path: &amp;#34;&amp;#34;
            tls_ca_path: &amp;#34;&amp;#34;
            tls_server_name: &amp;#34;&amp;#34;
            tls_insecure_skip_verify: false
            tls_cipher_suites: &amp;#34;&amp;#34;
            tls_min_version: &amp;#34;&amp;#34;
            connect_timeout: 0s
            connect_backoff_base_delay: 0s
            connect_backoff_max_delay: 0s
            cluster_validation:
                label: &amp;#34;&amp;#34;
    shuffle_sharding_ingesters_enabled: false
    shuffle_sharding_ingesters_lookback_period: 1h0m0s
    query_relevant_ingesters: false
query_frontend:
    max_outstanding_per_tenant: 2000
    max_batch_size: 7
    log_query_request_headers: &amp;#34;&amp;#34;
    max_retries: 2
    search:
        concurrent_jobs: 1000
        target_bytes_per_job: 104857600
        default_result_limit: 20
        max_result_limit: 262144
        max_duration: 168h0m0s
        query_backend_after: 15m0s
        ingester_shards: 3
        most_recent_shards: 200
        default_spans_per_span_set: 3
        max_spans_per_span_set: 100
    trace_by_id:
        query_shards: 50
    metrics:
        concurrent_jobs: 1000
        target_bytes_per_job: 104857600
        max_duration: 24h0m0s
        query_backend_after: 15m0s
        interval: 5m0s
        max_exemplars: 100
        streaming_shards: 200
        max_intervals: 10000
    multi_tenant_queries_enabled: true
    response_consumers: 10
    weights:
        request_with_weights: true
        retry_with_weights: true
        max_traceql_conditions: 4
        max_regex_conditions: 1
    mcp_server:
        enabled: false
    max_grpc_streaming_packet_size: 2097152
    max_query_expression_size_bytes: 131072
    query_end_cutoff: 30s
metrics_generator:
    ring:
        kvstore:
            store: memberlist
            prefix: collectors/
            consul:
                host: localhost:8500
                acl_token: &amp;#34;&amp;#34;
                http_client_timeout: 20s
                consistent_reads: false
                watch_rate_limit: 1
                watch_burst_size: 1
                cas_retry_delay: 1s
            etcd:
                endpoints: []
                dial_timeout: 10s
                max_retries: 10
                tls_enabled: false
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: &amp;#34;&amp;#34;
                username: &amp;#34;&amp;#34;
                password: &amp;#34;&amp;#34;
            multi:
                primary: &amp;#34;&amp;#34;
                secondary: &amp;#34;&amp;#34;
                mirror_enabled: false
                mirror_timeout: 2s
        heartbeat_period: 5s
        heartbeat_timeout: 1m0s
        instance_id: hostname
        instance_interface_names:
            - eth0
            - en0
        instance_addr: &amp;#34;&amp;#34;
        instance_port: 0
        enable_inet6: false
        instance_zone: &amp;#34;&amp;#34;
    processor:
        service_graphs:
            wait: 10s
            max_items: 10000
            workers: 10
            histogram_buckets:
                - 0.1
                - 0.2
                - 0.4
                - 0.8
                - 1.6
                - 3.2
                - 6.4
                - 12.8
            dimensions: []
            enable_client_server_prefix: false
            enable_messaging_system_latency_histogram: false
            peer_attributes:
                - peer.service
                - db.name
                - db.system
            span_multiplier_key: &amp;#34;&amp;#34;
            enable_tracestate_span_multiplier: false
            enable_virtual_node_label: false
            database_name_attributes:
                - db.namespace
                - db.name
                - db.system
            filter_policies: []
        span_metrics:
            histogram_buckets:
                - 0.002
                - 0.004
                - 0.008
                - 0.016
                - 0.032
                - 0.064
                - 0.128
                - 0.256
                - 0.512
                - 1.024
                - 2.048
                - 4.096
                - 8.192
                - 16.384
            intrinsic_dimensions:
                service: true
                span_name: true
                span_kind: true
                status_code: true
            dimensions: []
            dimension_mappings: []
            enable_target_info: false
            span_multiplier_key: &amp;#34;&amp;#34;
            enable_tracestate_span_multiplier: false
            subprocessors:
                0: true
                1: true
                2: true
            filter_policies: []
            target_info_excluded_dimensions: []
            enable_instance_label: true
        host_info:
            host_identifiers:
                - k8s.node.name
                - host.id
            metric_name: traces_host_info
    registry:
        collection_interval: 15s
        stale_duration: 15m0s
        max_label_name_length: 1024
        max_label_value_length: 2048
    storage:
        path: &amp;#34;&amp;#34;
        wal:
            wal_segment_size: 134217728
            wal_compression: none
            stripe_size: 16384
            truncate_frequency: 2h0m0s
            min_wal_time: 300000
            max_wal_time: 14400000
            no_lockfile: false
        remote_write_flush_deadline: 1m0s
        remote_write_add_org_id_header: true
    metrics_ingestion_time_range_slack: 30s
    override_ring_key: metrics-generator
    ring_mode: partition
    codec: push-bytes
    limiter_type: series
    ingest_concurrency: 16
    instance_id: hostname
    leave_consumer_group_on_shutdown: false
ingest:
    kafka:
        address: localhost:9092
        topic: &amp;#34;&amp;#34;
        client_id: &amp;#34;&amp;#34;
        dial_timeout: 2s
        write_timeout: 10s
        sasl_username: &amp;#34;&amp;#34;
        sasl_password: &amp;#34;&amp;#34;
        consumer_group: &amp;#34;&amp;#34;
        consumer_group_offset_commit_interval: 1s
        last_produced_offset_retry_timeout: 10s
        auto_create_topic_enabled: true
        auto_create_topic_default_partitions: 1000
        producer_max_record_size_bytes: 15983616
        producer_max_buffered_bytes: 1073741824
        target_consumer_lag_at_startup: 2s
        max_consumer_lag_at_startup: 15s
        disable_kafka_telemetry: false
        consumer_group_lag_metric_update_interval: 1m0s
block_builder:
    instance_id: hostname
    assigned_partitions: {}
    partitions_per_instance: 0
    consume_cycle_duration: 5m0s
    max_consuming_bytes: 5000000000
    block:
        max_block_bytes: 20971520
    wal:
        path: /var/tempo/block-builder/traces
        ingestion_time_range_slack: 2m0s
storage:
    trace:
        pool:
            max_workers: 400
            queue_depth: 20000
        wal:
            path: /var/tempo/wal
            ingestion_time_range_slack: 2m0s
        block:
            bloom_filter_false_positive: 0.01
            bloom_filter_shard_size_bytes: 102400
            version: vParquet4
            parquet_row_group_size_bytes: 100000000
            parquet_dedicated_columns:
                - scope: resource
                  name: k8s.cluster.name
                  type: string
                  options: []
                - scope: resource
                  name: k8s.namespace.name
                  type: string
                  options: []
                - scope: resource
                  name: k8s.pod.name
                  type: string
                  options: []
                - scope: resource
                  name: k8s.container.name
                  type: string
                  options: []
                - scope: span
                  name: http.request.method
                  type: string
                  options: []
                - scope: span
                  name: http.response.status_code
                  type: int
                  options: []
                - scope: span
                  name: url.path
                  type: string
                  options: []
                - scope: span
                  name: url.route
                  type: string
                  options: []
                - scope: span
                  name: server.address
                  type: string
                  options: []
                - scope: span
                  name: server.port
                  type: int
                  options: []
                - scope: span
                  name: http.method
                  type: string
                  options: []
                - scope: span
                  name: http.url
                  type: string
                  options: []
                - scope: span
                  name: http.route
                  type: string
                  options: []
                - scope: span
                  name: http.status_code
                  type: int
                  options: []
        search:
            chunk_size_bytes: 1000000
            prefetch_trace_count: 1000
            read_buffer_count: 32
            read_buffer_size_bytes: 1048576
            cache_control:
                footer: false
                column_index: false
                offset_index: false
        blocklist_poll: 5m0s
        blocklist_poll_concurrency: 50
        blocklist_poll_tenant_concurrency: 0
        blocklist_poll_fallback: true
        blocklist_poll_tenant_index_builders: 2
        blocklist_poll_stale_tenant_index: 0s
        blocklist_poll_jitter_ms: 0
        blocklist_poll_tolerate_consecutive_errors: 1
        blocklist_poll_tolerate_tenant_failures: 1
        empty_tenant_deletion_enabled: false
        empty_tenant_deletion_age: 0s
        backend: &amp;#34;&amp;#34;
        local:
            path: &amp;#34;&amp;#34;
        gcs:
            bucket_name: &amp;#34;&amp;#34;
            prefix: &amp;#34;&amp;#34;
            chunk_buffer_size: 10485760
            endpoint: &amp;#34;&amp;#34;
            hedge_requests_at: 0s
            hedge_requests_up_to: 2
            insecure: false
            object_cache_control: &amp;#34;&amp;#34;
            object_metadata: {}
            list_blocks_concurrency: 3
            max_retries: 3
        s3:
            tls_cert_path: &amp;#34;&amp;#34;
            tls_key_path: &amp;#34;&amp;#34;
            tls_ca_path: &amp;#34;&amp;#34;
            tls_server_name: &amp;#34;&amp;#34;
            tls_insecure_skip_verify: false
            tls_cipher_suites: &amp;#34;&amp;#34;
            tls_min_version: VersionTLS12
            bucket: &amp;#34;&amp;#34;
            prefix: &amp;#34;&amp;#34;
            endpoint: &amp;#34;&amp;#34;
            region: &amp;#34;&amp;#34;
            access_key: &amp;#34;&amp;#34;
            secret_key: &amp;#34;&amp;#34;
            session_token: &amp;#34;&amp;#34;
            insecure: false
            part_size: 0
            hedge_requests_at: 0s
            hedge_requests_up_to: 2
            retry_max_attempts: 10
            retry_backoff_initial: 200ms
            retry_backoff_max: 1s
            signature_v2: false
            forcepathstyle: false
            enable_dual_stack: false
            bucket_lookup_type: 0
            tags: {}
            storage_class: &amp;#34;&amp;#34;
            metadata: {}
            native_aws_auth_enabled: false
            list_blocks_concurrency: 3
            sse:
                type: &amp;#34;&amp;#34;
                kms_key_id: &amp;#34;&amp;#34;
                kms_encryption_context: &amp;#34;&amp;#34;
                encryption_key: &amp;#34;&amp;#34;
        azure:
            storage_account_name: &amp;#34;&amp;#34;
            storage_account_key: &amp;#34;&amp;#34;
            use_managed_identity: false
            use_federated_token: false
            user_assigned_id: &amp;#34;&amp;#34;
            container_name: &amp;#34;&amp;#34;
            prefix: &amp;#34;&amp;#34;
            endpoint_suffix: blob.core.windows.net
            max_buffers: 4
            buffer_size: 3145728
            hedge_requests_at: 0s
            hedge_requests_up_to: 2
        cache: &amp;#34;&amp;#34;
        background_cache:
            writeback_goroutines: 10
            writeback_buffer: 10000
        memcached: null
        redis: null
        cache_min_compaction_level: 0
        cache_max_block_age: 0s
overrides:
    defaults:
        ingestion:
            rate_strategy: local
            rate_limit_bytes: 30000000
            burst_size_bytes: 30000000
            max_traces_per_user: 10000
            retry_info_enabled: true
        read:
            max_bytes_per_tag_values_query: 1000000
            max_condition_groups_per_tag_query: 100
        metrics_generator:
            generate_native_histograms: classic
            native_histogram_bucket_factor: 1.1
            native_histogram_max_bucket_number: 100
            native_histogram_min_reset_duration: 15m0s
        global:
            max_bytes_per_trace: 5000000
    per_tenant_override_config: &amp;#34;&amp;#34;
    per_tenant_override_period: 10s
    user_configurable_overrides:
        enabled: false
        poll_interval: 1m0s
        client:
            backend: &amp;#34;&amp;#34;
            confirm_versioning: true
            local:
                path: &amp;#34;&amp;#34;
            gcs:
                bucket_name: &amp;#34;&amp;#34;
                prefix: &amp;#34;&amp;#34;
                chunk_buffer_size: 10485760
                endpoint: &amp;#34;&amp;#34;
                hedge_requests_at: 0s
                hedge_requests_up_to: 2
                insecure: false
                object_cache_control: &amp;#34;&amp;#34;
                object_metadata: {}
                list_blocks_concurrency: 3
                max_retries: 3
            s3:
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: VersionTLS12
                bucket: &amp;#34;&amp;#34;
                prefix: &amp;#34;&amp;#34;
                endpoint: &amp;#34;&amp;#34;
                region: &amp;#34;&amp;#34;
                access_key: &amp;#34;&amp;#34;
                secret_key: &amp;#34;&amp;#34;
                session_token: &amp;#34;&amp;#34;
                insecure: false
                part_size: 0
                hedge_requests_at: 0s
                hedge_requests_up_to: 2
                retry_max_attempts: 10
                retry_backoff_initial: 200ms
                retry_backoff_max: 1s
                signature_v2: false
                forcepathstyle: false
                enable_dual_stack: false
                bucket_lookup_type: 0
                tags: {}
                storage_class: &amp;#34;&amp;#34;
                metadata: {}
                native_aws_auth_enabled: false
                list_blocks_concurrency: 3
                sse:
                    type: &amp;#34;&amp;#34;
                    kms_key_id: &amp;#34;&amp;#34;
                    kms_encryption_context: &amp;#34;&amp;#34;
                    encryption_key: &amp;#34;&amp;#34;
            azure:
                storage_account_name: &amp;#34;&amp;#34;
                storage_account_key: &amp;#34;&amp;#34;
                use_managed_identity: false
                use_federated_token: false
                user_assigned_id: &amp;#34;&amp;#34;
                container_name: &amp;#34;&amp;#34;
                prefix: &amp;#34;&amp;#34;
                endpoint_suffix: blob.core.windows.net
                max_buffers: 4
                buffer_size: 3145728
                hedge_requests_at: 0s
                hedge_requests_up_to: 2
        api:
            check_for_conflicting_runtime_overrides: false
    enable_legacy_overrides: false
memberlist:
    node_name: &amp;#34;&amp;#34;
    randomize_node_name: true
    stream_timeout: 2s
    retransmit_factor: 2
    pull_push_interval: 30s
    gossip_interval: 1s
    gossip_nodes: 2
    gossip_to_dead_nodes_time: 30s
    dead_node_reclaim_time: 0s
    compression_enabled: false
    notify_interval: 0s
    received_messages_queue_size: 1024
    advertise_addr: &amp;#34;&amp;#34;
    advertise_port: 7946
    cluster_label: &amp;#34;&amp;#34;
    cluster_label_verification_disabled: false
    join_members: &amp;#34;&amp;#34;
    min_join_backoff: 1s
    max_join_backoff: 1m0s
    max_join_retries: 10
    abort_if_cluster_fast_join_fails: false
    abort_if_cluster_fast_join_fails_min_nodes: 1
    abort_if_cluster_join_fails: false
    rejoin_interval: 0s
    rejoin_seed_nodes: &amp;#34;&amp;#34;
    left_ingesters_timeout: 5m0s
    obsolete_entries_timeout: 30s
    leave_timeout: 20s
    broadcast_timeout_for_local_updates_on_shutdown: 10s
    message_history_buffer_bytes: 0
    watch_prefix_buffer_size: 128
    bind_addr: []
    bind_port: 7946
    packet_dial_timeout: 2s
    packet_write_timeout: 5s
    max_concurrent_writes: 3
    acquire_writer_timeout: 250ms
    tls_enabled: false
    tls_cert_path: &amp;#34;&amp;#34;
    tls_key_path: &amp;#34;&amp;#34;
    tls_ca_path: &amp;#34;&amp;#34;
    tls_server_name: &amp;#34;&amp;#34;
    tls_insecure_skip_verify: false
    tls_cipher_suites: &amp;#34;&amp;#34;
    tls_min_version: &amp;#34;&amp;#34;
    zone_aware_routing:
        enabled: false
        instance_availability_zone: &amp;#34;&amp;#34;
        role: member
    propagation_delay_tracker:
        enabled: false
        beacon_interval: 1m0s
        beacon_lifetime: 10m0s
        log_beacons_latency_longer_than: 0s
usage_report:
    reporting_enabled: true
    backoff:
        min_period: 100ms
        max_period: 10s
        max_retries: 0
cache:
    background:
        writeback_goroutines: 10
        writeback_buffer: 10000
    caches: []
backend_scheduler:
    work:
        prune_age: 1h0m0s
        dead_job_timeout: 24h0m0s
    maintenance_interval: 1m0s
    backend_flush_interval: 1m0s
    provider:
        retention:
            interval: 1h0m0s
        compaction:
            measure_interval: 1m0s
            compaction:
                compaction_window: 1h0m0s
                max_compaction_objects: 6000000
                max_block_bytes: 107374182400
                block_retention: 336h0m0s
                compacted_block_retention: 1h0m0s
                retention_concurrency: 10
                max_time_per_tenant: 5m0s
                compaction_cycle: 30s
            max_jobs_per_tenant: 1000
            min_input_blocks: 2
            max_input_blocks: 4
            max_compaction_level: 0
            min_cycle_interval: 30s
        redaction:
            poll_interval: 2s
            rescan_delay: 5m0s
            max_rescan_generations: 5
    job_timeout: 15s
    local_work_path: /var/tempo
backend_scheduler_client:
    grpc_client_config:
        max_recv_msg_size: 104857600
        max_send_msg_size: 104857600
        grpc_compression: snappy
        rate_limit: 0
        rate_limit_burst: 0
        backoff_on_ratelimits: false
        backoff_config:
            min_period: 100ms
            max_period: 10s
            max_retries: 10
        initial_stream_window_size: 63KiB1023B
        initial_connection_window_size: 63KiB1023B
        tls_enabled: false
        tls_cert_path: &amp;#34;&amp;#34;
        tls_key_path: &amp;#34;&amp;#34;
        tls_ca_path: &amp;#34;&amp;#34;
        tls_server_name: &amp;#34;&amp;#34;
        tls_insecure_skip_verify: false
        tls_cipher_suites: &amp;#34;&amp;#34;
        tls_min_version: &amp;#34;&amp;#34;
        connect_timeout: 5s
        connect_backoff_base_delay: 1s
        connect_backoff_max_delay: 5s
        cluster_validation:
            label: &amp;#34;&amp;#34;
backend_worker:
    backend_scheduler_addr: &amp;#34;&amp;#34;
    backoff:
        min_period: 100ms
        max_period: 1m0s
        max_retries: 0
    compaction:
        compaction_window: 1h0m0s
        max_compaction_objects: 6000000
        max_block_bytes: 107374182400
        block_retention: 336h0m0s
        compacted_block_retention: 1h0m0s
        retention_concurrency: 10
        max_time_per_tenant: 5m0s
        compaction_cycle: 30s
    override_ring_key: backend-worker
    ring:
        kvstore:
            store: &amp;#34;&amp;#34;
            prefix: collectors/
            consul:
                host: localhost:8500
                acl_token: &amp;#34;&amp;#34;
                http_client_timeout: 20s
                consistent_reads: false
                watch_rate_limit: 1
                watch_burst_size: 1
                cas_retry_delay: 1s
            etcd:
                endpoints: []
                dial_timeout: 10s
                max_retries: 10
                tls_enabled: false
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: &amp;#34;&amp;#34;
                username: &amp;#34;&amp;#34;
                password: &amp;#34;&amp;#34;
            multi:
                primary: &amp;#34;&amp;#34;
                secondary: &amp;#34;&amp;#34;
                mirror_enabled: false
                mirror_timeout: 2s
        heartbeat_period: 5s
        heartbeat_timeout: 1m0s
        wait_stability_min_duration: 1m0s
        wait_stability_max_duration: 5m0s
        instance_id: hostname
        instance_interface_names:
            - eth0
            - en0
        instance_port: 0
        instance_addr: &amp;#34;&amp;#34;
        enable_inet6: false
        wait_active_instance_timeout: 10m0s
    finish_on_shutdown_timeout: 30s
live_store:
    ring:
        kvstore:
            store: memberlist
            prefix: collectors/
            consul:
                host: localhost:8500
                acl_token: &amp;#34;&amp;#34;
                http_client_timeout: 20s
                consistent_reads: false
                watch_rate_limit: 1
                watch_burst_size: 1
                cas_retry_delay: 1s
            etcd:
                endpoints: []
                dial_timeout: 10s
                max_retries: 10
                tls_enabled: false
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: &amp;#34;&amp;#34;
                username: &amp;#34;&amp;#34;
                password: &amp;#34;&amp;#34;
            multi:
                primary: &amp;#34;&amp;#34;
                secondary: &amp;#34;&amp;#34;
                mirror_enabled: false
                mirror_timeout: 2s
        heartbeat_period: 5s
        heartbeat_timeout: 1m0s
        instance_id: hostname
        instance_interface_names:
            - eth0
        instance_addr: &amp;#34;&amp;#34;
        instance_port: 0
        enable_inet6: false
        instance_zone: &amp;#34;&amp;#34;
    partition_ring:
        kvstore:
            store: memberlist
            prefix: collectors/
            consul:
                host: localhost:8500
                acl_token: &amp;#34;&amp;#34;
                http_client_timeout: 20s
                consistent_reads: false
                watch_rate_limit: 1
                watch_burst_size: 1
                cas_retry_delay: 1s
            etcd:
                endpoints: []
                dial_timeout: 10s
                max_retries: 10
                tls_enabled: false
                tls_cert_path: &amp;#34;&amp;#34;
                tls_key_path: &amp;#34;&amp;#34;
                tls_ca_path: &amp;#34;&amp;#34;
                tls_server_name: &amp;#34;&amp;#34;
                tls_insecure_skip_verify: false
                tls_cipher_suites: &amp;#34;&amp;#34;
                tls_min_version: &amp;#34;&amp;#34;
                username: &amp;#34;&amp;#34;
                password: &amp;#34;&amp;#34;
            multi:
                primary: &amp;#34;&amp;#34;
                secondary: &amp;#34;&amp;#34;
                mirror_enabled: false
                mirror_timeout: 2s
        min_partition_owners_count: 1
        min_partition_owners_duration: 10s
        delete_inactive_partition_after: 13h0m0s
    metrics:
        time_overlap_cutoff: 0.2
    commit_interval: 5s
    wal:
        path: /var/tempo/live-store/traces
        ingestion_time_range_slack: 2m0s
    query_block_concurrency: 10
    complete_block_timeout: 20m0s
    complete_block_concurrency: 2
    block_reclaim_grace: 2m0s
    shutdown_marker_dir: /var/tempo/live-store/shutdown-marker
    flush_check_period: 5s
    flush_op_timeout: 5m0s
    max_trace_live: 30s
    max_trace_idle: 5s
    max_live_traces_bytes: 250000000
    max_block_duration: 30s
    max_block_bytes: 52428800
    readiness_target_lag: 0s
    readiness_max_wait: 30m0s
    fail_on_high_lag: true
    remove_owner_on_shutdown: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="manifest">Manifest&lt;/h1>
&lt;p>This document is a reference for all Tempo options and their defaults. If you are just getting
started with Tempo, refer to &lt;a href="https://github.com/grafana/tempo/tree/main/example/docker-compose" target="_blank" rel="noopener noreferrer">Tempo examples&lt;/a>
and other &lt;a href="../">configuration documentation&lt;/a>. Most installations will require only setting 10 to 20 of these options.&lt;/p></description></item><item><title>Apache Parquet block format</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/parquet/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/parquet/</guid><content><![CDATA[&lt;h1 id=&#34;apache-parquet-block-format&#34;&gt;Apache Parquet block format&lt;/h1&gt;
&lt;p&gt;Tempo has a default columnar block format based on Apache Parquet.
This format is required for tags-based search as well as &lt;a href=&#34;../../traceql/&#34;&gt;TraceQL&lt;/a&gt;, the query language for traces.
The columnar block format improves search performance and enables an ecosystem of tools, including 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/tempo_cli/#analyse-blocks&#34;&gt;Tempo CLI&lt;/a&gt;, to access the underlying trace data.&lt;/p&gt;
&lt;h2 id=&#34;considerations&#34;&gt;Considerations&lt;/h2&gt;
&lt;p&gt;The Parquet block format has been the default since Tempo 2.0 and is the only supported block format in Tempo 3.0.&lt;/p&gt;
&lt;p&gt;If you install using the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/setup/helm-chart/&#34;&gt;Tempo Helm charts&lt;/a&gt;, then Parquet is enabled by default.
No data conversion or upgrade process is necessary.
As soon as a block format version is enabled, Tempo starts writing data in that format, leaving existing data as-is.&lt;/p&gt;
&lt;h2 id=&#34;block-format-versions&#34;&gt;Block format versions&lt;/h2&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;The &lt;code&gt;v2&lt;/code&gt; and &lt;code&gt;vParquet3&lt;/code&gt; block formats have been removed in Tempo 3.0.
Use &lt;code&gt;vParquet4&lt;/code&gt; (default) or &lt;code&gt;vParquet5&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;vparquet4-default&#34;&gt;vParquet4 (default)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vParquet4&lt;/code&gt; is the default block format in Tempo 3.0.
It introduces columns that support querying array attributes, events, and links.
For more information, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/dedicated_columns/&#34;&gt;Dedicated attribute columns&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;vparquet5&#34;&gt;vParquet5&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vParquet5&lt;/code&gt; is production-ready and available as an opt-in alternative to &lt;code&gt;vParquet4&lt;/code&gt;.
It builds on vParquet4 with the following improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expanded dedicated columns: Up to 20 dedicated string columns and 5 dedicated integer columns per scope (span, resource, and event), compared with 10 string columns per scope in vParquet4.&lt;/li&gt;
&lt;li&gt;Event-scoped dedicated columns: Dedicated attribute columns can target event-scoped attributes such as &lt;code&gt;exception.message&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Blob column support: High-cardinality or high-length string attributes (for example, stack traces or UUIDs) can use &lt;code&gt;zstd&lt;/code&gt; compression instead of dictionary encoding for better efficiency.&lt;/li&gt;
&lt;li&gt;Array-valued dedicated columns: Dedicated columns can store multiple values per attribute using the &lt;code&gt;options: [&amp;quot;array&amp;quot;]&lt;/code&gt; configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details on configuring dedicated attribute columns with vParquet5 features, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/dedicated_columns/&#34;&gt;Dedicated attribute columns&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;change-the-block-format-version&#34;&gt;Change the block format version&lt;/h2&gt;
&lt;p&gt;To change the block format version, set the &lt;code&gt;version&lt;/code&gt; option in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#storage&#34;&gt;Storage section&lt;/a&gt; of the configuration file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;storage:
  trace:
    block:
      version: &amp;lt;version&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Replace &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; with &lt;code&gt;vParquet4&lt;/code&gt; or &lt;code&gt;vParquet5&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To restore the default &lt;code&gt;vParquet4&lt;/code&gt; format, remove the &lt;code&gt;version&lt;/code&gt; option from the configuration file or set it to &lt;code&gt;vParquet4&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;parquet-configuration-parameters&#34;&gt;Parquet configuration parameters&lt;/h2&gt;
&lt;p&gt;Some parameters in the Tempo configuration are specific to Parquet.
For more information, refer to the &lt;a href=&#34;../#storage&#34;&gt;storage configuration documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;trace-search-parameters&#34;&gt;Trace search parameters&lt;/h3&gt;
&lt;p&gt;These configuration options impact trace search.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Default value&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;[read_buffer_size_bytes: &amp;lt;int&amp;gt;]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;10485676&lt;/td&gt;
              &lt;td&gt;Size of read buffers used when performing search on a vParquet block. This value times the read_buffer_count is the total amount of bytes used for buffering when performing search on a Parquet block.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;[read_buffer_count: &amp;lt;int&amp;gt;]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;32&lt;/td&gt;
              &lt;td&gt;Number of read buffers used when performing search on a vParquet block. This value times the read_buffer_size_bytes is the total amount of bytes used for buffering when performing search on a Parquet block.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The &lt;code&gt;cache_control&lt;/code&gt; section contains the follow parameters for Parquet metadata objects:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Parameter&lt;/th&gt;
              &lt;th&gt;Default value&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;[footer: &lt;bool&gt; | default = false]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Specifies if the footer should be cached&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;[column_index: &amp;lt;bool&amp;gt; | default = false]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Specifies if the column index should be cached&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;[offset_index: &amp;lt;bool&amp;gt; | default = false]&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Specifies if the offset index should be cached&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;]]></content><description>&lt;h1 id="apache-parquet-block-format">Apache Parquet block format&lt;/h1>
&lt;p>Tempo has a default columnar block format based on Apache Parquet.
This format is required for tags-based search as well as &lt;a href="../../traceql/">TraceQL&lt;/a>, the query language for traces.
The columnar block format improves search performance and enables an ecosystem of tools, including
&lt;a href="/docs/tempo/v3.0.x/operations/tempo_cli/#analyse-blocks">Tempo CLI&lt;/a>, to access the underlying trace data.&lt;/p></description></item><item><title>Hosted storage</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/hosted-storage/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/hosted-storage/</guid><content><![CDATA[&lt;h1 id=&#34;hosted-storage&#34;&gt;Hosted storage&lt;/h1&gt;
&lt;p&gt;Tempo provides additional hosted storage configuration options discussed on the pages below. These options relate to providers such as Google Cloud, AWS S3, and Azure.&lt;/p&gt;
&lt;p&gt;For additional details about storage configuration, refer to &lt;a href=&#34;../#storage&#34;&gt;Storage configuration&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/s3/&#34;&gt;Amazon S3 and S3-compatible storage&lt;/a&gt;&lt;br&gt;Configure Tempo with Amazon S3 or S3-compatible object stores such as MinIO, SeaweedFS, or rclone.&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/azure/&#34;&gt;Azure blob storage permissions and management&lt;/a&gt;&lt;br&gt;Azure blob storage permissions and configuration options for Tempo.&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/gcs/&#34;&gt;Google Cloud Storage&lt;/a&gt;&lt;br&gt;Learn about Google Cloud Storage permissions for Tempo.&lt;/li&gt;&lt;/ul&gt;
]]></content><description>&lt;h1 id="hosted-storage">Hosted storage&lt;/h1>
&lt;p>Tempo provides additional hosted storage configuration options discussed on the pages below. These options relate to providers such as Google Cloud, AWS S3, and Azure.&lt;/p></description></item><item><title>Network options</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/network/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/network/</guid><content><![CDATA[&lt;h1 id=&#34;network-options&#34;&gt;Network options&lt;/h1&gt;
&lt;p&gt;Tempo provides additional network configuration options discussed on the pages below.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/network/ipv6/&#34;&gt;Configure IPv6&lt;/a&gt;&lt;br&gt;Learn how to configure IPv6 for Tempo.&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/network/tls/&#34;&gt;Configure TLS communication&lt;/a&gt;&lt;br&gt;Configure TLS for Tempo server endpoints, gRPC clients, trace receivers, object storage, and caches to secure communication between components.&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/network/sidecar-proxy/&#34;&gt;Run Tempo distributed with sidecar proxies&lt;/a&gt;&lt;br&gt;Configure Tempo distributed to run with sidecar proxies&lt;/li&gt;&lt;/ul&gt;
]]></content><description>&lt;h1 id="network-options">Network options&lt;/h1>
&lt;p>Tempo provides additional network configuration options discussed on the pages below.&lt;/p>
&lt;ul>&lt;li>
&lt;a href="/docs/tempo/v3.0.x/configuration/network/ipv6/">Configure IPv6&lt;/a>&lt;br>Learn how to configure IPv6 for Tempo.&lt;/li>&lt;li>
&lt;a href="/docs/tempo/v3.0.x/configuration/network/tls/">Configure TLS communication&lt;/a>&lt;br>Configure TLS for Tempo server endpoints, gRPC clients, trace receivers, object storage, and caches to secure communication between components.&lt;/li>&lt;li>
&lt;a href="/docs/tempo/v3.0.x/configuration/network/sidecar-proxy/">Run Tempo distributed with sidecar proxies&lt;/a>&lt;br>Configure Tempo distributed to run with sidecar proxies&lt;/li>&lt;/ul></description></item><item><title>Polling</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/polling/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/polling/</guid><content><![CDATA[&lt;h1 id=&#34;polling&#34;&gt;Polling&lt;/h1&gt;
&lt;p&gt;The polling cycle is controlled by a number of configuration options detailed here.&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;storage:
    trace:
        # How often to repoll the backend for new blocks. Default is 5m
        [blocklist_poll: &amp;lt;duration&amp;gt;]

        # Number of blocks to process in parallel during polling. Default is 50.
        [blocklist_poll_concurrency: &amp;lt;int&amp;gt;]

        # By default components will pull the blocklist from the tenant index. If that fails the component can
        # fallback to scanning the entire bucket. Set to false to disable this behavior. Default is true.
        [blocklist_poll_fallback: &amp;lt;bool&amp;gt;]

        # Maximum number of workers that should build the tenant index. All other components will download
        # the index. Default 2.
        [blocklist_poll_tenant_index_builders: &amp;lt;int&amp;gt;]

        # The oldest allowable tenant index. If an index is pulled that is older than this duration,
        # the polling will consider this an error. Note that `blocklist_poll_fallback` applies here.
        # If fallback is true and a tenant index exceeds this duration, it will fall back to listing
        # the bucket contents.
        # Default 0 (disabled).
        [blocklist_poll_stale_tenant_index: &amp;lt;duration&amp;gt;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Due to the mechanics of the &lt;a href=&#34;../../operations/monitor/polling/&#34;&gt;tenant index&lt;/a&gt;, the blocklist will be stale by
at most twice the configured &lt;code&gt;blocklist_poll&lt;/code&gt; duration.
This 2x staleness bound is the basis for the minimum values of &lt;code&gt;query_backend_after&lt;/code&gt; and &lt;code&gt;compacted_block_retention&lt;/code&gt; described below.
For a detailed explanation of how compaction interacts with the polling cycle, refer to &lt;a href=&#34;../../operations/compaction/&#34;&gt;Compaction&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-blocks-reach-object-storage&#34;&gt;How blocks reach object storage&lt;/h2&gt;
&lt;p&gt;Block-builders consume trace data from Kafka and organize spans into blocks based on a configurable time window.
Once a block is complete, the block-builder flushes it to object storage.
After the block is written, queriers won&amp;rsquo;t discover it until their next polling cycle completes.&lt;/p&gt;
&lt;h2 id=&#34;handling-blocklist-staleness&#34;&gt;Handling blocklist staleness&lt;/h2&gt;
&lt;p&gt;Two mechanisms ensure data availability despite blocklist staleness:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Live-stores cover the recent data gap&lt;/li&gt;
&lt;li&gt;Compacted block retention prevents premature deletion&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;live-stores-cover-the-recent-data-gap&#34;&gt;Live-stores cover the recent data gap&lt;/h3&gt;
&lt;p&gt;Live-stores serve recent trace data directly from Kafka, covering the window between when a block-builder flushes a new block and when queriers discover it through polling.
The query-frontend uses &lt;code&gt;query_backend_after&lt;/code&gt; to control when backend storage is searched:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Time ranges more recent than &lt;code&gt;query_backend_after&lt;/code&gt; are searched only in live-stores.&lt;/li&gt;
&lt;li&gt;Time ranges older than &lt;code&gt;query_backend_after&lt;/code&gt; are searched in backend storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;query_backend_after&lt;/code&gt; must be set to at least twice the &lt;code&gt;blocklist_poll&lt;/code&gt; duration.
A newly flushed block will not appear in any querier&amp;rsquo;s blocklist for up to &lt;code&gt;2 * blocklist_poll&lt;/code&gt; after it is written.
If &lt;code&gt;query_backend_after&lt;/code&gt; is shorter than this window, the query-frontend may route requests to the backend before the block is discoverable, causing data gaps.
With the default &lt;code&gt;blocklist_poll&lt;/code&gt; of 5 minutes, &lt;code&gt;query_backend_after&lt;/code&gt; should be at least 10 minutes.&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;query_frontend:
    search:
        # Time after which the query-frontend starts searching backend storage. Default is 15m.
        [query_backend_after: &amp;lt;duration&amp;gt;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;compacted-block-retention-prevents-premature-deletion&#34;&gt;Compacted block retention prevents premature deletion&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;compacted_block_retention&lt;/code&gt; keeps a block in object storage for a period of time after it has been compacted and the data has been merged into a new block.
This allows queriers with a stale blocklist to still access these blocks until they complete their polling cycles and have up-to-date blocklists.
At a minimum, this should be twice the configured &lt;code&gt;blocklist_poll&lt;/code&gt; duration.&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;backend_worker:
  compaction:
    # How long to leave a block in the backend after it has been compacted successfully. Default is 1h
    [compacted_block_retention: &amp;lt;duration&amp;gt;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Additionally, the querier &lt;code&gt;blocklist_poll&lt;/code&gt; duration needs to be greater than or equal to the worker
&lt;code&gt;blocklist_poll&lt;/code&gt; duration. Otherwise, a querier may not correctly check all assigned blocks and incorrectly return 404.
It is recommended to simply set both components to use the same poll duration.&lt;/p&gt;
]]></content><description>&lt;h1 id="polling">Polling&lt;/h1>
&lt;p>The polling cycle is controlled by a number of configuration options detailed here.&lt;/p>
&lt;div class="code-snippet code-snippet__mini">&lt;div class="lang-toolbar__mini">
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;/div>&lt;div class="code-snippet code-snippet__border">
&lt;pre data-expanded="false">&lt;code class="language-none">storage:
trace:
# How often to repoll the backend for new blocks. Default is 5m
[blocklist_poll: &amp;lt;duration&amp;gt;]
# Number of blocks to process in parallel during polling. Default is 50.
[blocklist_poll_concurrency: &amp;lt;int&amp;gt;]
# By default components will pull the blocklist from the tenant index. If that fails the component can
# fallback to scanning the entire bucket. Set to false to disable this behavior. Default is true.
[blocklist_poll_fallback: &amp;lt;bool&amp;gt;]
# Maximum number of workers that should build the tenant index. All other components will download
# the index. Default 2.
[blocklist_poll_tenant_index_builders: &amp;lt;int&amp;gt;]
# The oldest allowable tenant index. If an index is pulled that is older than this duration,
# the polling will consider this an error. Note that `blocklist_poll_fallback` applies here.
# If fallback is true and a tenant index exceeds this duration, it will fall back to listing
# the bucket contents.
# Default 0 (disabled).
[blocklist_poll_stale_tenant_index: &amp;lt;duration&amp;gt;]&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Due to the mechanics of the &lt;a href="../../operations/monitor/polling/">tenant index&lt;/a>, the blocklist will be stale by
at most twice the configured &lt;code>blocklist_poll&lt;/code> duration.
This 2x staleness bound is the basis for the minimum values of &lt;code>query_backend_after&lt;/code> and &lt;code>compacted_block_retention&lt;/code> described below.
For a detailed explanation of how compaction interacts with the polling cycle, refer to &lt;a href="../../operations/compaction/">Compaction&lt;/a>.&lt;/p></description></item><item><title>Usage tracker</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/usage-tracker/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/usage-tracker/</guid><content><![CDATA[&lt;h1 id=&#34;usage-tracker&#34;&gt;Usage tracker&lt;/h1&gt;
&lt;p&gt;The usage tracker accurately tracks the amount of ingested traffic using a set of custom labels on a per-tenant basis, providing fine-grained control over your data.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;cost_attributes&lt;/code&gt; option to configure usage trackers in the distributor, which expose metrics of ingested traffic grouped by configurable attributes exposed on &lt;code&gt;/usage_metrics&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;enable-the-usage-tracker&#34;&gt;Enable the usage tracker&lt;/h2&gt;
&lt;p&gt;To use this feature, you need to enable it in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#distributor&#34;&gt;distributor&lt;/a&gt; and configure the overrides to handle the data.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open your configuration file, for example, &lt;code&gt;tempo.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;code&gt;distributor&lt;/code&gt; section, locate the &lt;code&gt;cost_attribution&lt;/code&gt; line. If it is not present, then copy and paste the example below into your distributor section and update the options.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt; usage:
        cost_attribution:
            # Enables the &amp;#34;cost-attribution&amp;#34; usage tracker. Per-tenant attributes are configured in overrides.
            [enabled: &amp;lt;boolean&amp;gt; | default = false]
            # Maximum number of series per tenant.
            [max_cardinality: &amp;lt;int&amp;gt; | default = 10000]
            # Interval after which a series is considered stale and will be deleted from the registry.
            # Once a metrics series is deleted, it won&amp;#39;t be emitted anymore, keeping active series low.
            [stale_duration: &amp;lt;duration&amp;gt; | default = 15m0s]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;configure-overrides&#34;&gt;Configure overrides&lt;/h3&gt;
&lt;p&gt;You also need to configure the dimensions to break down your the usage data in the standard overrides.
In the overrides section, you can define attributes to group ingested data by and you can rename and combine attributes.&lt;/p&gt;
&lt;p&gt;For more information, refer to the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#standard-overrides&#34;&gt;standard overrides&lt;/a&gt; section of the Configuration documentation.&lt;/p&gt;
&lt;p&gt;In this example, usage data is grouped by &lt;code&gt;service.name&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;# Overrides configuration block
overrides:
  # Global ingestion limits configurations
  defaults:
    # Cost attribution usage tracker configuration
    cost_attribution:
      dimensions:
        service.name: &amp;#34;&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also configure per tenant in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#runtime-overrides&#34;&gt;runtime-overrides&lt;/a&gt; or in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#user-configurable-overrides&#34;&gt;user-configurable-overrides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;review-usage-metrics&#34;&gt;Review usage metrics&lt;/h2&gt;
&lt;p&gt;Once everything is configured, the usage metrics are exposed in the distributor:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;GET /usage_metrics&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;curl http://localhost:3200/usage_metrics
# HELP tempo_usage_tracker_bytes_received_total bytes total received with these attributes
# TYPE tempo_usage_tracker_bytes_received_total counter
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;article-service&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 7327
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;auth-service&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 8938
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;billing-service&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 2401
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;cart-service&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 4116
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;postgres&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 3571
tempo_usage_tracker_bytes_received_total{service_name=&amp;#34;shop-backend&amp;#34;,tenant=&amp;#34;single-tenant&amp;#34;,tracker=&amp;#34;cost-attribution&amp;#34;} 17619&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can configure Prometheus to scrape this endpoint to collect usage metrics.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;scrape_configs:
  - job_name: &amp;#39;tempo-usage&amp;#39;
    static_configs:
      - targets: [&amp;#39;&amp;lt;DISTRIBUTOR-HOST&amp;gt;:3200&amp;#39;]
    metrics_path: &amp;#39;/usage_metrics&amp;#39;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;scope-dimensions-by-resource-or-span&#34;&gt;Scope dimensions by resource or span&lt;/h2&gt;
&lt;p&gt;You can configure dimensions to look for attributes at specific scopes using prefixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resource.&amp;lt;attribute&amp;gt;&lt;/code&gt; - Look only at resource-level attributes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;span.&amp;lt;attribute&amp;gt;&lt;/code&gt; - Look only at span-level attributes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;attribute&amp;gt;&lt;/code&gt; (no prefix) - Look at both resource and span levels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  defaults:
    cost_attribution:
      dimensions:
        resource.service.name: &amp;#34;service&amp;#34;    # Scoped by resource, only look at `service.name` in resource attributes.
        span.db.system: &amp;#34;database&amp;#34;          # Scoped by span, only look at `db.system` in span attributes.
        k8s.namespace.name: &amp;#34;namespace&amp;#34;     # Unscoped, look at `k8s.namespace.name` in both resource and span attributes&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;When using unscoped attributes (no prefix), span-level attributes will always overwrite resource-level attributes if both exist.&lt;/p&gt;
&lt;p&gt;This can lead to mixed values from both scopes, use scope prefixes (&lt;code&gt;resource.&lt;/code&gt; or &lt;code&gt;span.&lt;/code&gt;) for predictable behavior when attributes exist at both and you only want values from one of them.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;This table provides more information about the behavior:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Configuration&lt;/th&gt;
              &lt;th&gt;Resource has &lt;code&gt;service.name=&amp;quot;api&amp;quot;&lt;/code&gt;&lt;/th&gt;
              &lt;th&gt;Span has &lt;code&gt;service.name=&amp;quot;worker&amp;quot;&lt;/code&gt;&lt;/th&gt;
              &lt;th&gt;Result&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;resource.service.name&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Uses &lt;code&gt;&amp;quot;api&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Ignores span value&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;api&amp;quot;&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;span.service.name&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Ignores resource value&lt;/td&gt;
              &lt;td&gt;Uses &lt;code&gt;&amp;quot;worker&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;worker&amp;quot;&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;service.name&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Uses &lt;code&gt;&amp;quot;api&amp;quot;&lt;/code&gt; initially&lt;/td&gt;
              &lt;td&gt;Overwrites with &lt;code&gt;&amp;quot;worker&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;worker&amp;quot;&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;configure-target-labels&#34;&gt;Configure target labels&lt;/h2&gt;
&lt;p&gt;You can customize the label names that appear in the &lt;code&gt;/usage_metrics&lt;/code&gt; metrics by configuring a custom label name in the dimensions configuration.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;dimensions:
  &amp;lt;ATTRIBUTE_NAME&amp;gt;: &amp;#34;&amp;lt;LABEL_NAME&amp;gt;&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The &lt;code&gt;_&amp;lt;LABEL_NAME&amp;gt;_&lt;/code&gt; should be a &lt;a href=&#34;https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;valid Prometheus label name&lt;/a&gt;.
If you provide an invalid label name, Tempo sanitizes it.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;overrides:
  defaults:
    cost_attribution:
      dimensions:
        service.name: &amp;#34;&amp;#34;                    # Results in: service_name
        span.service.name: &amp;#34;&amp;#34;               # Results in: service_name
        resource.service.name: &amp;#34;&amp;#34;           # Results in: service_name
        span.db.system: &amp;#34;&amp;#34;                  # Results in: db_system
        span.db.system: &amp;#34;database.type&amp;#34;     # Results in: database_type
        k8s.namespace.name: &amp;#34;namespace&amp;#34;     # Results in: namespace&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="usage-tracker">Usage tracker&lt;/h1>
&lt;p>The usage tracker accurately tracks the amount of ingested traffic using a set of custom labels on a per-tenant basis, providing fine-grained control over your data.&lt;/p></description></item><item><title>Use tracing data in Grafana</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/use-trace-data/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/use-trace-data/</guid><content><![CDATA[&lt;h1 id=&#34;use-tracing-data-in-grafana&#34;&gt;Use tracing data in Grafana&lt;/h1&gt;
&lt;p&gt;You can use Tempo as a data source in Grafana.
Grafana Cloud comes pre-configured with a Tempo data source.&lt;/p&gt;
&lt;p&gt;If you are using Grafana on-prem, you need to 
    &lt;a href=&#34;/docs/grafana/next/datasources/tempo/&#34;&gt;set up the Tempo data source&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-tip&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Tip&lt;/p&gt;&lt;p&gt;If you want to explore tracing data in Grafana, try the &lt;a href=&#34;../../getting-started/docker-example/&#34;&gt;Intro to Metrics, Logs, Traces, and Profiling example&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;This video explains how to add data sources, including Loki, Tempo, and Mimir, to Grafana and Grafana Cloud. Tempo data source set up starts at 4:58 in the video.&lt;/p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#39;https://www.youtube.com/embed/cqHO0oYW6Ic&#39; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&#34;configure-the-data-source&#34;&gt;Configure the data source&lt;/h2&gt;
&lt;p&gt;For detailed instructions on the Tempo data source in Grafana, refer to 
    &lt;a href=&#34;/docs/grafana/next/datasources/tempo/&#34;&gt;Tempo data source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To configure Tempo with Grafana:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Point the Grafana data source at your Tempo query frontend (or monolithic mode Tempo).&lt;/li&gt;
&lt;li&gt;Enter the URL: &lt;code&gt;http://&amp;lt;tempo hostname&amp;gt;:&amp;lt;http port number&amp;gt;&lt;/code&gt;. For most of &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/example/docker-compose&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the Tempo examples&lt;/a&gt; the following works.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The port of 3200 is a common port used in our examples. Tempo default HTTP port is 3200.&lt;/p&gt;
&lt;h2 id=&#34;query-the-data-source&#34;&gt;Query the data source&lt;/h2&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/introduction/tempo-in-grafana/&#34;&gt;Tempo in Grafana&lt;/a&gt; for an overview about how tracing data can be viewed and queried in Grafana.&lt;/p&gt;
&lt;p&gt;For information on querying the Tempo data source, refer to 
    &lt;a href=&#34;/docs/grafana/next/datasources/tempo/query-editor/&#34;&gt;Tempo query editor&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="use-tracing-data-in-grafana">Use tracing data in Grafana&lt;/h1>
&lt;p>You can use Tempo as a data source in Grafana.
Grafana Cloud comes pre-configured with a Tempo data source.&lt;/p>
&lt;p>If you are using Grafana on-prem, you need to
&lt;a href="/docs/grafana/next/datasources/tempo/">set up the Tempo data source&lt;/a>.&lt;/p></description></item><item><title>Anonymous usage reporting</title><link>https://grafana.com/docs/tempo/v3.0.x/configuration/anonymous-usage-reporting/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/configuration/anonymous-usage-reporting/</guid><content><![CDATA[&lt;h1 id=&#34;anonymous-usage-reporting&#34;&gt;Anonymous usage reporting&lt;/h1&gt;
&lt;p&gt;By default, Tempo reports anonymous usage data about itself to Grafana Labs.
This data is used to understand which features are commonly enabled, as well as which deployment modes, replication factors, and compression levels are most popular, etc.&lt;/p&gt;
&lt;p&gt;By providing information on how people use Tempo, usage reporting helps the Tempo team decide where to focus their development and documentation efforts.&lt;/p&gt;
&lt;p&gt;The following configuration values are used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Receivers enabled&lt;/li&gt;
&lt;li&gt;Frontend concurrency and version&lt;/li&gt;
&lt;li&gt;Storage cache, backend, WAL and block encodings&lt;/li&gt;
&lt;li&gt;Ring replication factor, and &lt;code&gt;kvstore&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Features toggles enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No private information is collected, and all reports are completely anonymous.&lt;/p&gt;
&lt;h2 id=&#34;configure-anonymous-usage-reporting&#34;&gt;Configure anonymous usage reporting&lt;/h2&gt;
&lt;p&gt;Reporting is controlled by the &lt;code&gt;usage_report&lt;/code&gt; configuration option and can be disabled.
For instructions, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#usage-report&#34;&gt;the Configuration documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;view-usage-stats-report&#34;&gt;View usage stats report&lt;/h2&gt;
&lt;p&gt;Tempo provides a usage stats report that you can view in your browser.&lt;/p&gt;
&lt;p&gt;To view the report, go to the following URL on the Tempo instance: &lt;code&gt;http://localhost:3200/status/usage-stats&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;An example report output looks like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;clusterID&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;createdAt&amp;#34;: &amp;#34;0001-01-01T00:00:00Z&amp;#34;,
  &amp;#34;interval&amp;#34;: &amp;#34;0001-01-01T00:00:00Z&amp;#34;,
  &amp;#34;intervalPeriod&amp;#34;: 14400,
  &amp;#34;target&amp;#34;: &amp;#34;all&amp;#34;,
  &amp;#34;version&amp;#34;: {
    &amp;#34;version&amp;#34;: &amp;#34;v2.8.0&amp;#34;,
    &amp;#34;revision&amp;#34;: &amp;#34;31e2dddb5&amp;#34;,
    &amp;#34;branch&amp;#34;: &amp;#34;main&amp;#34;,
    &amp;#34;buildUser&amp;#34;: &amp;#34;&amp;#34;,
    &amp;#34;buildDate&amp;#34;: &amp;#34;&amp;#34;,
    &amp;#34;goVersion&amp;#34;: &amp;#34;go1.24.3&amp;#34;
  },
  &amp;#34;os&amp;#34;: &amp;#34;linux&amp;#34;,
  &amp;#34;arch&amp;#34;: &amp;#34;arm64&amp;#34;,
  &amp;#34;edition&amp;#34;: &amp;#34;oss&amp;#34;,
  &amp;#34;metrics&amp;#34;: {
    &amp;#34;ring_kv_store&amp;#34;: &amp;#34;inmemory&amp;#34;,
    &amp;#34;memstats&amp;#34;: {
      &amp;#34;heap_inuse&amp;#34;: 14106624,
      &amp;#34;stack_inuse&amp;#34;: 2490368,
      &amp;#34;pause_total_ns&amp;#34;: 872084,
      &amp;#34;num_gc&amp;#34;: 3,
      &amp;#34;gc_cpu_fraction&amp;#34;: 0.08786506719453682,
      &amp;#34;heap_alloc&amp;#34;: 11640400,
      &amp;#34;alloc&amp;#34;: 11640400,
      &amp;#34;total_alloc&amp;#34;: 16491760,
      &amp;#34;sys&amp;#34;: 27874568
    },
    &amp;#34;num_cpu&amp;#34;: 8,
    &amp;#34;feature_enabled_multitenancy&amp;#34;: 0,
    &amp;#34;receiver_enabled_jaeger&amp;#34;: 0,
    &amp;#34;storage_block_encoding&amp;#34;: &amp;#34;zstd&amp;#34;,
    &amp;#34;storage_block_search_encoding&amp;#34;: &amp;#34;snappy&amp;#34;,
    &amp;#34;storage_cache&amp;#34;: &amp;#34;&amp;#34;,
    &amp;#34;feature_enabled_auth_stats&amp;#34;: 0,
    &amp;#34;frontend_version&amp;#34;: &amp;#34;v1&amp;#34;,
    &amp;#34;storage_backend&amp;#34;: &amp;#34;local&amp;#34;,
    &amp;#34;receiver_enabled_otlp&amp;#34;: 0,
    &amp;#34;ring_replication_factor&amp;#34;: 1,
    &amp;#34;storage_wal_encoding&amp;#34;: &amp;#34;snappy&amp;#34;,
    &amp;#34;storage_wal_search_encoding&amp;#34;: &amp;#34;none&amp;#34;,
    &amp;#34;num_goroutine&amp;#34;: 813,
    &amp;#34;cache_memcached&amp;#34;: 1,
    &amp;#34;cache_redis&amp;#34;: 0,
    &amp;#34;distributor_bytes_received&amp;#34;: {
      &amp;#34;total&amp;#34;: 0,
      &amp;#34;rate&amp;#34;: 0
    },
    &amp;#34;distributor_spans_received&amp;#34;: {
      &amp;#34;total&amp;#34;: 0,
      &amp;#34;rate&amp;#34;: 0
    },
    &amp;#34;receiver_enabled_kafka&amp;#34;: 0,
    &amp;#34;receiver_enabled_zipkin&amp;#34;: 0
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;which-information-is-collected&#34;&gt;Which information is collected?&lt;/h2&gt;
&lt;p&gt;Tempo collects and reports the following information to Grafana Labs.
The report from your Tempo instance may vary from the provided example.
Each field provides insight into the Tempo instance, its environment, and configuration. The fields are grouped by their purpose.&lt;/p&gt;
&lt;p&gt;This information helps Grafana Labs understand how Tempo is used, which features are enabled, and the typical deployment environments, without collecting any private or user-identifying data.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Tempo maintainers commit to keeping the list of tracked information updated over time, and reporting any change both via the CHANGELOG and the release notes.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;instance-identification&#34;&gt;Instance identification&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;clusterID&lt;/code&gt;&lt;/strong&gt;: A unique, randomly generated identifier for the Tempo cluster. This value helps Grafana Labs distinguish between different deployments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;createdAt&lt;/code&gt;&lt;/strong&gt;: The timestamp when anonymous usage reporting was first enabled and the cluster ID was created.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;interval&lt;/code&gt;&lt;/strong&gt;: The timestamp marking the start of the current reporting interval.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;intervalPeriod&lt;/code&gt;&lt;/strong&gt;: The length of the reporting interval, in seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;deployment-and-version-information&#34;&gt;Deployment and version information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;target&lt;/code&gt;&lt;/strong&gt;: The deployment mode or target for the Tempo instance, such as &lt;code&gt;all&lt;/code&gt; for monolithic mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;version&lt;/code&gt;&lt;/strong&gt;: An object containing detailed version information:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;version&lt;/code&gt;&lt;/strong&gt;: The Tempo version, for example &lt;code&gt;v2.8.0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;revision&lt;/code&gt;&lt;/strong&gt;: The Git commit hash or revision used to build the binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;branch&lt;/code&gt;&lt;/strong&gt;: The Git branch used for the build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;buildUser&lt;/code&gt;&lt;/strong&gt;: The user who built the binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;buildDate&lt;/code&gt;&lt;/strong&gt;: The date and time when the binary was built.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;goVersion&lt;/code&gt;&lt;/strong&gt;: The Go language version used for the build.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;environment-details&#34;&gt;Environment details&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;os&lt;/code&gt;&lt;/strong&gt;: The operating system the Tempo instance is running on, such as &lt;code&gt;linux&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;arch&lt;/code&gt;&lt;/strong&gt;: The system architecture, such as &lt;code&gt;arm64&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;edition&lt;/code&gt;&lt;/strong&gt;: The edition of Tempo, such as &lt;code&gt;oss&lt;/code&gt; for open source.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;metrics-and-configuration&#34;&gt;Metrics and configuration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;metrics&lt;/code&gt;&lt;/strong&gt;: An object containing runtime metrics and configuration:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ring_kv_store&lt;/code&gt;&lt;/strong&gt;: The key-value store used for the ring, for example &lt;code&gt;inmemory&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;memstats&lt;/code&gt;&lt;/strong&gt;: Memory usage statistics, including heap and stack usage, garbage collection metrics, and total allocations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;num_cpu&lt;/code&gt;&lt;/strong&gt;: The number of logical CPU cores available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;feature_enabled_multitenancy&lt;/code&gt;&lt;/strong&gt;: Indicates if multitenancy is enabled (&lt;code&gt;1&lt;/code&gt;) or not (&lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;receiver_enabled_jaeger&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;receiver_enabled_otlp&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;receiver_enabled_kafka&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;receiver_enabled_zipkin&lt;/code&gt;&lt;/strong&gt;: Flags indicating if each trace receiver is enabled (&lt;code&gt;1&lt;/code&gt;) or not (&lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;storage_block_encoding&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;storage_block_search_encoding&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;storage_wal_encoding&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;storage_wal_search_encoding&lt;/code&gt;&lt;/strong&gt;: The encoding or compression algorithms used for storage blocks and write-ahead logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;storage_cache&lt;/code&gt;&lt;/strong&gt;: The cache backend used for storage, if any.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;feature_enabled_auth_stats&lt;/code&gt;&lt;/strong&gt;: Indicates if authentication statistics are enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;frontend_version&lt;/code&gt;&lt;/strong&gt;: The version of the frontend component.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;storage_backend&lt;/code&gt;&lt;/strong&gt;: The storage backend in use, such as &lt;code&gt;local&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ring_replication_factor&lt;/code&gt;&lt;/strong&gt;: The replication factor for the ring.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;num_goroutine&lt;/code&gt;&lt;/strong&gt;: The number of active Go routines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cache_memcached&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;cache_redis&lt;/code&gt;&lt;/strong&gt;: Flags indicating if Memcached or Redis caching is enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;distributor_bytes_received&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;distributor_spans_received&lt;/code&gt;&lt;/strong&gt;: Objects showing the total and rate of bytes and spans received by the distributor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="anonymous-usage-reporting">Anonymous usage reporting&lt;/h1>
&lt;p>By default, Tempo reports anonymous usage data about itself to Grafana Labs.
This data is used to understand which features are commonly enabled, as well as which deployment modes, replication factors, and compression levels are most popular, etc.&lt;/p></description></item></channel></rss>