Dec 17, 2025
Viktoras D. & Valentinas C.
6min Read
Grafana Tempo is an open-source distributed tracing back end from Grafana Labs. In other words, it tracks – or “traces” – requests through every stage in an application. It collects, stores, and analyzes this trace data instrumented with tools like OpenTelemetry or Jaeger. Unlike other back ends, Tempo avoids external databases by writing directly to object storage, making it simpler to operate at scale.
This guide will walk you through installing Tempo on a Linux server, configuring it in single binary mode, integrating it with Grafana, sending test traces, and viewing them through Grafana’s User Interface (UI). By the end, you’ll have a basic Tempo tracing setup ready for debugging and performance monitoring.
Before you begin the Grafana Tempo installation, make sure your environment meets the following requirements:
With the above in place, you’re ready to start installing Tempo.

Grafana Tempo supports two common installation methods: running as a single binary or using a Docker container. The binary method is best for local testing, while Docker is often used in production environments.
To install Tempo using the binary:
wget https://github.com/grafana/tempo/releases/download/v2.8.1/tempo_2.8.1_linux_amd64.tar.gz
tar -xvf tempo_2.8.1_linux_amd64.tar.gz
This will extract the following files:
chmod +x tempo tempo-cli tempo-query sudo mv tempo tempo-cli tempo-query /usr/local/bin/
The /usr/local/bin directory is commonly used for user-installed programs, and makes the tempo commands accessible from anywhere in the terminal without specifying the full path.
echo "3ae537720814c7c5bea9e7ff82c373b62c44eea1271e1d0ac34d92922f53b223 tempo_2.8.1_linux_amd64.tar.gz" | sha256sum --check
Alternatively, you can install Tempo using Docker:
docker run --rm -p 3200:3200 grafana/tempo:2.8.1
This command runs the Tempo server with default settings and exposes port 3200 for trace ingestion and querying. For production use, mount a custom configuration file and connect external storage.
Tempo is now installed and ready to be configured.
Tempo relies on a configuration file to define how it runs. This includes trace receivers, local storage paths, and server settings. Before running the service, you must create and customize this file.
Create a directory for the Tempo configuration:
sudo mkdir -p /etc/tempo cd /etc/tempo
Now, create a new configuration file:
sudo nano tempo.yaml
Paste in the following minimal configuration:
server:
http_listen_port: 3200
distributor:
receivers:
otlp:
protocols:
grpc:
http:
jaeger:
protocols:
thrift_http:
grpc:
ingester:
trace_idle_period: 10s
max_block_duration: 5m
compactor:
compaction:
block_retention: 1h
storage:
trace:
backend: local
local:
path: /tmp/tempo/traces
wal:
path: /tmp/tempo/walHere’s what each key section of the config means:
This configuration is designed for quick testing in single binary mode. For production deployments, you’ll need to configure external object storage and fine-tune each service component.
Next, you’ll start the Tempo service and verify that it works.
To keep Tempo running in the background and automatically restart it on boot or failure, you can set it up as a systemd service.
sudo nano /etc/systemd/system/tempo.service
[Unit] Description=Grafana Tempo After=network.target [Service] User=root ExecStart=/usr/local/bin/tempo -config.file=/etc/tempo/tempo.yaml Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reexec sudo systemctl daemon-reload
sudo systemctl enable tempo sudo systemctl start tempo
sudo systemctl status tempo journalctl -u tempo -f
Tempo now runs as a background service and will start automatically after reboots or failures.
Once Tempo is running, you can connect it to Grafana to enable trace visualization.
http://<your-server-ip>:3000
Replace <your-server-ip> with your actual VPS IP address or domain name.
Grafana will prompt you to change the password after the first login, so ensure you choose secure credentials.



http://localhost:3200
If Tempo is running on a different server, use its IP address instead of localhost

Grafana will connect to Tempo to confirm whether it’s working. If successful, you will see a banner similar to this:

Once the connection is established, you can start exploring trace data. Tempo integrates with Explore in Grafana, especially when paired with logs from Loki or metrics from Prometheus. This allows you to correlate traces with log lines and performance data in one interface.
To make sure Tempo is receiving data correctly, it’s highly recommended to send some test traces. You can use tools like the OpenTelemetry Collector or the Jaeger client CLI.
You can quickly generate test traffic using Docker and the Jaeger HotROD demo app:
docker run --rm --network=host -e OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 jaegertracing/example-hotrod:latest all

This container starts multiple services such as frontend, driver, route, and customer. However, it won’t emit traces until a request is made.
To trigger trace generation, run:
curl http://localhost:8080
This request simulates a user interaction with the HotROD front end and generates distributed traces that are sent to Tempo.
To send OTLP traces without setting up a full collector, you can use the otel-cli tool:
docker run --rm --network=host ghcr.io/equinix-labs/otel-cli --endpoint http://localhost:4318 span --name "otel-span" --service "otel-service"
This sends a single span to Tempo using the OTLP HTTP protocol, which matches the default configuration in most local setups.
To confirm that everything is working, open Grafana and go to Explore on the left-hand menu.
In the Explore panel:


If no data appears:
journalctl -u tempo -f
Once you see trace data in Grafana, your Tempo installation and integration are confirmed.
Grafana Tempo makes distributed tracing more accessible by removing the complexity of external databases and integrating smoothly with Grafana. Whether you’re troubleshooting latency issues or tracking down errors across microservices, Tempo helps you get the visibility you need.
This tutorial demonstrated how to install Tempo on an Ubuntu VPS using either the official binary or Docker, configure it to receive traces using OTLP and Jaeger protocols, and set it up as a systemd service for persistent background operation. Tempo was integrated with Grafana for trace visualization and setup was verified by sending test traces using real-world tools like otel-cli and the Jaeger HotROD demo.
With your Tempo tracing setup complete, you’re ready to build a stronger observability stack. For even deeper insights, consider pairing Tempo with Loki for logs and Mimir for metrics.
Grafana Tempo is an open-source tool that collects and stores trace data from applications to help developers monitor and debug system performance. Tempo is designed to be highly scalable and integrates easily with Grafana for trace visualization and analysis.
Grafana Tempo is used to collect, store, and query distributed traces from applications. It helps developers understand how requests move through services, identify bottlenecks, and diagnose issues. Tempo supports popular tracing protocols like OTLP and Jaeger and works seamlessly with Grafana’s dashboards and Explore view.
Yes, Grafana Tempo is completely free and open source. You can download, install, and run it without any licensing fees. It’s maintained by Grafana Labs and supported by an active community. Paid options are available through Grafana Cloud, but self-hosted Tempo is fully functional at no cost.