<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deploy Tempo locally on Grafana Labs</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/</link><description>Recent content in Deploy Tempo locally on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/index.xml" rel="self" type="application/rss+xml"/><item><title>Deploy on Linux</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/linux/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/linux/</guid><content><![CDATA[&lt;h1 id=&#34;deploy-on-linux&#34;&gt;Deploy on Linux&lt;/h1&gt;
&lt;p&gt;This guide provides a step-by-step process for installing Grafana Tempo on Linux.
It assumes you have access to a Linux system and the permissions required to deploy a service with network and file system access.
At the end of this guide, you have a single Tempo instance deployed on a single node.&lt;/p&gt;
&lt;p&gt;This procedure provides a test installation suitable for local development and evaluation.
If you plan to use this as a starting point for a production deployment, review the configuration against your organization&amp;rsquo;s best practices for security, storage, retention, and availability.
If you&amp;rsquo;re upgrading from Tempo 2.x, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/upgrade/&#34;&gt;Upgrade your Tempo installation&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;These instructions focus on a 
    &lt;a href=&#34;/docs/tempo/v3.0.x/reference-tempo-architecture/deployment-modes/&#34;&gt;monolithic (single-binary) installation&lt;/a&gt;.
In single-binary mode, Tempo runs all components in one process and doesn&amp;rsquo;t require Kafka.
Traces are ingested directly in-process and flushed to storage.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;To follow this guide, you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry &lt;code&gt;telemetrygen&lt;/code&gt;&lt;/a&gt; installed to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/test-monolithic-local/&#34;&gt;test your deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A running Grafana instance (refer to 
    &lt;a href=&#34;/docs/grafana/next/setup-grafana/installation/&#34;&gt;the installation instructions&lt;/a&gt;) if you want to explore traces visually&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;system-requirements&#34;&gt;System requirements&lt;/h3&gt;
&lt;p&gt;These values are a starting point for a monolithic Tempo deployment on a single node.
They are not hard minimums for every environment, and they are not production sizing recommendations.&lt;/p&gt;
&lt;p&gt;For the Tempo host itself, start with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 CPUs&lt;/li&gt;
&lt;li&gt;4–8 GB of memory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use 16 GB of memory or more if any of the following apply:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You run additional local components on the same machine, such as Grafana, an object store, or Prometheus&lt;/li&gt;
&lt;li&gt;You enable metrics-generator&lt;/li&gt;
&lt;li&gt;You test moderate or high ingest rates&lt;/li&gt;
&lt;li&gt;You increase live-trace buffering or run heavier query workloads&lt;/li&gt;
&lt;li&gt;You want extra headroom for benchmarking or troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Co-locating Tempo with Grafana, Prometheus, or other services on the same machine is fine for evaluation, but increases memory pressure. If memory is constrained, run Tempo on its own host.&lt;/p&gt;
&lt;p&gt;Production sizing depends on your workload and infrastructure, including ingest rate, tenant count, query concurrency, retention, metrics-generator settings, and object store performance.&lt;/p&gt;
&lt;p&gt;Validate sizing with your own load before using it in production.&lt;/p&gt;
&lt;h2 id=&#34;set-up-storage&#34;&gt;Set up storage&lt;/h2&gt;
&lt;p&gt;This guide uses the local filesystem as the storage backend. The configuration stores the write-ahead log (WAL) at &lt;code&gt;/data/tempo/wal&lt;/code&gt; and trace blocks at &lt;code&gt;/data/tempo/blocks&lt;/code&gt;. Tempo also uses &lt;code&gt;/var/tempo&lt;/code&gt; at runtime for the live store and internal caches.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create the data directories:&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;Bash&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-bash&#34;&gt;sudo mkdir -p /data/tempo /var/tempo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the directory owner to the &lt;code&gt;tempo&lt;/code&gt; user (created by the deb package):&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;Bash&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-bash&#34;&gt;sudo chown -R tempo /data/tempo /var/tempo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Local storage is suitable for single-node evaluation and development. For production environments, use an object storage backend such as 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/s3/&#34;&gt;AWS S3&lt;/a&gt;, 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/azure/&#34;&gt;Azure Blob Storage&lt;/a&gt;, or 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/gcs/&#34;&gt;Google Cloud Storage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you prefer to use an S3-compatible object store for local testing, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/s3/#s3-compatible-local-stores-for-testing&#34;&gt;S3-compatible local stores for testing&lt;/a&gt; for setup instructions using MinIO, SeaweedFS, or &lt;code&gt;rclone&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;install-tempo&#34;&gt;Install Tempo&lt;/h2&gt;
&lt;p&gt;For a linux-amd64 installation, run the following commands using the command line interface on your Linux machine.
You need administrator privileges to do this by running as the &lt;code&gt;root&lt;/code&gt; user or via &lt;code&gt;sudo&lt;/code&gt; as a user with permissions to do so.&lt;/p&gt;
&lt;p&gt;Be sure to &lt;a href=&#34;https://github.com/grafana/tempo/releases/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;download the correct package&lt;/a&gt; for your OS and architecture. Replace &lt;code&gt;&amp;lt;TEMPO_VERSION_NUMBER&amp;gt;&lt;/code&gt; with the version you want to install, for example &lt;code&gt;3.0.0&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the Tempo binary. The following example downloads Tempo for the AMD64 (x86_64) processor architecture on a Linux distribution supporting deb packages:&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;Bash&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-bash&#34;&gt;curl -Lo tempo_&amp;lt;TEMPO_VERSION_NUMBER&amp;gt;_linux_amd64.deb \
  https://github.com/grafana/tempo/releases/download/v&amp;lt;TEMPO_VERSION_NUMBER&amp;gt;/tempo_&amp;lt;TEMPO_VERSION_NUMBER&amp;gt;_linux_amd64.deb&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the package:&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;Bash&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-bash&#34;&gt;sudo dpkg -i tempo_&amp;lt;TEMPO_VERSION_NUMBER&amp;gt;_linux_amd64.deb&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optional: Verify the download against the &lt;code&gt;SHA256SUMS&lt;/code&gt; file published on the &lt;a href=&#34;https://github.com/grafana/tempo/releases/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;releases page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;create-a-tempo-configuration-file&#34;&gt;Create a Tempo configuration file&lt;/h2&gt;
&lt;p&gt;In the following configuration, Tempo is configured to listen on the OTLP gRPC and HTTP protocols.
By default, the OpenTelemetry Collector receiver binds to &lt;code&gt;localhost&lt;/code&gt; instead of &lt;code&gt;0.0.0.0&lt;/code&gt;.
This example binds to all interfaces. This can be a security risk if your Tempo instance is exposed to the public internet.&lt;/p&gt;
&lt;p&gt;Refer to the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/&#34;&gt;Tempo configuration documentation&lt;/a&gt; for explanations of the available options.&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;Tempo&amp;rsquo;s configuration parser is strict about YAML indentation, especially for nested blocks like &lt;code&gt;storage.trace.wal.path&lt;/code&gt;. If Tempo fails to start, check your indentation first.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Copy the following YAML configuration to a file called &lt;code&gt;tempo.yaml&lt;/code&gt;:&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;stream_over_http_enabled: true

server:
  http_listen_port: 3200

distributor:
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: &amp;#34;0.0.0.0:4317&amp;#34;
        http:
          endpoint: &amp;#34;0.0.0.0:4318&amp;#34;

storage:
  trace:
    backend: local
    wal:
      path: /data/tempo/wal
    local:
      path: /data/tempo/blocks

usage_report:
  reporting_enabled: false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code&gt;tempo.yaml&lt;/code&gt; to the Tempo configuration directory:&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;Bash&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-bash&#34;&gt;sudo cp tempo.yaml /etc/tempo/config.yml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configuration-file-notes&#34;&gt;Configuration file notes&lt;/h3&gt;
&lt;p&gt;This configuration is for monolithic mode (&lt;code&gt;-target=all&lt;/code&gt;), where all required components run in one process without Kafka. Configuration blocks such as &lt;code&gt;ingest&lt;/code&gt;, &lt;code&gt;block_builder&lt;/code&gt;, &lt;code&gt;live_store_client&lt;/code&gt;, and &lt;code&gt;backend_scheduler_client&lt;/code&gt; do not apply to monolithic mode. Don&amp;rsquo;t copy them from microservices examples. Refer to the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/reference-tempo-architecture/deployment-modes/#components-by-deployment-mode&#34;&gt;Components by deployment mode&lt;/a&gt; table for the full mapping of components and configuration blocks to each mode.&lt;/p&gt;
&lt;p&gt;The following options are common additions to this basic configuration:&lt;/p&gt;
&lt;h4 id=&#34;block-retention&#34;&gt;Block retention&lt;/h4&gt;
&lt;p&gt;With local storage, trace blocks accumulate on disk until they exceed the configured retention period. The default is 14 days (336h). If disk space is limited, set a shorter retention using the &lt;code&gt;block_retention&lt;/code&gt; setting in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#compaction&#34;&gt;compaction configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;metrics-generator&#34;&gt;Metrics-generator&lt;/h4&gt;
&lt;p&gt;The metrics-generator produces RED metrics (rate, errors, duration) and service graphs from incoming trace spans. It requires a Prometheus-compatible remote write target and enabling processors in the &lt;code&gt;overrides&lt;/code&gt; block. Refer to the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#metrics-generator&#34;&gt;metrics-generator configuration&lt;/a&gt; and the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/metrics-from-traces/metrics-generator/&#34;&gt;metrics-generator documentation&lt;/a&gt; for setup details.&lt;/p&gt;
&lt;h4 id=&#34;ingestion-limits&#34;&gt;Ingestion limits&lt;/h4&gt;
&lt;p&gt;Tempo enforces default ingestion limits that may not fit every workload. If you see &lt;code&gt;RATE_LIMITED&lt;/code&gt;, &lt;code&gt;TRACE_TOO_LARGE&lt;/code&gt;, or &lt;code&gt;LIVE_TRACES_EXCEEDED&lt;/code&gt; errors, you can tune these limits globally or per-tenant in the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/#overrides&#34;&gt;overrides configuration&lt;/a&gt;. Refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/manage-trace-ingestion/&#34;&gt;Manage trace ingestion&lt;/a&gt; for sizing guidance.&lt;/p&gt;
&lt;h4 id=&#34;backend-worker&#34;&gt;Backend worker&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;backend_worker.backend_scheduler_addr&lt;/code&gt; setting is omitted from this configuration. In monolithic mode, Tempo auto-configures the backend worker to connect to the scheduler on the native gRPC port (default &lt;code&gt;9095&lt;/code&gt;). Setting it explicitly to the HTTP port can produce noisy polling logs.&lt;/p&gt;
&lt;h2 id=&#34;start-the-tempo-service&#34;&gt;Start the Tempo service&lt;/h2&gt;
&lt;p&gt;These &lt;code&gt;systemctl&lt;/code&gt; instructions apply to monolithic mode only. Running individual Tempo components as separate systemd services (microservices mode) is not covered here.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;systemctl&lt;/code&gt; to restart the service (depending on how you installed Tempo, this may be different):&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;Bash&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-bash&#34;&gt;sudo systemctl restart tempo.service&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can replace &lt;code&gt;restart&lt;/code&gt; with &lt;code&gt;stop&lt;/code&gt; to stop the service, and &lt;code&gt;start&lt;/code&gt; to start the service again after it&amp;rsquo;s stopped, if required.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Tempo is running:&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;Bash&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-bash&#34;&gt;systemctl is-active tempo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see the status &lt;code&gt;active&lt;/code&gt; returned. If you don&amp;rsquo;t, check that the configuration file is correct, and then restart the service.
You can also use &lt;code&gt;journalctl -u tempo&lt;/code&gt; to view the logs for Tempo to determine if there are any obvious reasons for failure to start.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Tempo created the storage subdirectories:&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;Bash&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-bash&#34;&gt;ls /data/tempo/&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;blocks&lt;/code&gt; directories. Trace data appears in &lt;code&gt;blocks&lt;/code&gt; after you send traces and the live store flushes them to disk, which can take 15–30 seconds.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;test-your-installation&#34;&gt;Test your installation&lt;/h2&gt;
&lt;p&gt;To verify that traces flow through Tempo correctly, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/test-monolithic-local/&#34;&gt;Validate your local Tempo deployment&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;After you validate your Tempo deployment, consider exploring these topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/instrument-send/&#34;&gt;Instrument for distributed tracing&lt;/a&gt; to send traces from your own applications&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/&#34;&gt;Configure Tempo&lt;/a&gt; to customize settings for your environment&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/monitor/set-up-monitoring/&#34;&gt;Set up monitoring for Tempo&lt;/a&gt; to observe your Tempo instance with dashboards and alerts&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="deploy-on-linux">Deploy on Linux&lt;/h1>
&lt;p>This guide provides a step-by-step process for installing Grafana Tempo on Linux.
It assumes you have access to a Linux system and the permissions required to deploy a service with network and file system access.
At the end of this guide, you have a single Tempo instance deployed on a single node.&lt;/p></description></item><item><title>Deploy Tempo using Docker Compose</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/docker-compose/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/docker-compose/</guid><content><![CDATA[&lt;h1 id=&#34;deploy-tempo-using-docker-compose&#34;&gt;Deploy Tempo using Docker Compose&lt;/h1&gt;
&lt;p&gt;The &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;&lt;code&gt;example&lt;/code&gt; directory&lt;/a&gt; in the Tempo repository provides a collection of &lt;code&gt;docker-compose&lt;/code&gt; examples with different configurations. Refer
to the readme in this folder for more information.&lt;/p&gt;
]]></content><description>&lt;h1 id="deploy-tempo-using-docker-compose">Deploy Tempo using Docker Compose&lt;/h1>
&lt;p>The &lt;a href="https://github.com/grafana/tempo/tree/main/example/docker-compose" target="_blank" rel="noopener noreferrer">&lt;code>example&lt;/code> directory&lt;/a> in the Tempo repository provides a collection of &lt;code>docker-compose&lt;/code> examples with different configurations. Refer
to the readme in this folder for more information.&lt;/p></description></item></channel></rss>