Tempo Config Generator
Generate production-ready Grafana Tempo configuration files. Configure OTLP, Jaeger, and Zipkin receivers with S3, Azure, GCS, or local storage backends and metrics generation.
Tempo Configuration
1server:2 http_listen_port: 32003 grpc_listen_port: 90954 log_level: info56distributor:7 receivers:8 otlp:9 protocols:10 grpc:11 endpoint: 0.0.0.0:431712 http:13 endpoint: 0.0.0.0:431814 jaeger:15 protocols:16 thrift_http:17 endpoint: 0.0.0.0:1426818 grpc:19 endpoint: 0.0.0.0:1425020 zipkin:21 endpoint: 0.0.0.0:94112223ingester:24 trace_idle_period: 30s25 max_block_bytes: 104857626 max_block_duration: 1h2728compactor:29 compaction:30 compaction_window: 1h31 max_block_bytes: 10485760032 block_retention: 48h33 compacted_block_retention: 168h3435storage:36 trace:37 backend: local38 local:39 path: /var/tempo/traces4041overrides:42 defaults:43 max_bytes_per_trace: 524288044 max_search_bytes_per_trace: 10485764546search:47 max_bytes_per_tag_values_query: 5242880
What is this tool?
The Tempo Config Generator helps you build production-ready Grafana Tempo configuration files in YAML format. Tempo is a distributed tracing backend from Grafana Labs, designed to ingest and store trace data at scale with minimal resource overhead. It is fully compatible with OpenTelemetry, Jaeger, Zipkin, and OpenCensus instrumentation libraries.
Unlike monolithic tracing solutions, Tempo follows a disaggregated architecture with distinct components for distribution, ingestion, compaction, and querying. This generator produces syntactically correct tempo.yaml files with all major subsystems configurable, including storage backends, metrics generation, compaction policies, search settings, and authentication. Whether you are running Tempo locally for development or in production on Kubernetes, this tool streamlines your configuration workflow.
How to Use This Tool
1. Configure Receivers: Enable trace ingestion endpoints for OTLP (gRPC and HTTP), Jaeger (Thrift HTTP, gRPC, Thrift Compact), Zipkin, and OpenCensus. Each receiver binds to a specific port on the distributor and handles protocol-specific deserialization.
2. Select Storage Backend: Choose between local filesystem, Amazon S3, Azure Blob Storage, or Google Cloud Storage. Each backend type requires specific authentication and connection parameters. The storage configuration is central to Tempo and affects both ingester WAL and backend block storage.
3. Set Compaction Policies: Configure how Tempo compacts small trace blocks into larger ones. The compaction window, maximum block size, and retention periods determine how long trace data is available and how efficiently it is stored.
4. Enable Metrics Generation: Tempo can derive RED metrics (Rate, Errors, Duration) from incoming traces using the service graphs and span metrics processors. Generated metrics are stored in a Prometheus-compatible TSDB and can be scraped by Prometheus or Grafana Mimir.
5. Configure Overrides: Set per-tenant limits for maximum bytes per trace and maximum search bytes. These controls prevent individual tenants from consuming excessive resources in multi-tenant deployments.
Best Practices
- Use S3 or GCS as the storage backend in production for durability and scalability rather than local filesystem storage.
- Set block_retention to match your compliance and debugging requirements, typically 48h to 7d for active debugging or 30d for auditing.
- Enable the service_graphs processor to automatically generate RED metrics from traces without any instrumentation changes.
- Configure max_block_duration between 1h and 2h to balance between compaction efficiency and query latency.
- Use the metrics_generator to derive span-level metrics for visibility into trace-derived performance signals.
Common Mistakes
- Using local storage in production environments, which provides no durability guarantees and cannot scale horizontally.
- Setting block_retention to 0, which causes immediate data deletion after compaction and makes traces unqueryable.
- Forgetting to configure overrides.max_bytes_per_trace, which can lead to OOM kills in the ingester under high cardinality.
- Not exposing the metrics_generator registry to Prometheus, causing generated RED metrics to be silently discarded.
Security Notes
- Enable multi-tenancy with X-Scope-OrgID headers to isolate trace data between tenants in shared deployments.
- Use basic or OAuth2 authentication on gRPC and HTTP endpoints when exposing Tempo to untrusted networks.
- Configure TLS on the gRPC listener for encrypting trace data in transit between distributors and ingesters.
- Store S3 or GCS credentials in environment variables or Kubernetes secrets rather than hardcoding them in tempo.yaml.
- Restrict the distributor's ingestion endpoints to internal networks and use an API gateway for external access.
Production Tips
- Deploy Tempo with a microservices architecture using separate distributor, ingester, compactor, and querier deployments in Kubernetes.
- Use the metrics_generator storage path on fast local SSDs for WAL durability and high write throughput.
- Scale the compactor to a single instance per tenant to avoid race conditions during block compaction.
- Monitor Tempo's internal metrics via the Prometheus metrics endpoint on port 3200 at /metrics.
- Use Grafana's Tempo datasource with TraceQL for expressive trace queries and dashboard integration.
Frequently Asked Questions
What is Grafana Tempo and how does it work?
What trace formats does Tempo support?
How does Tempo's storage backend work?
What is the Tempo metrics_generator?
How does multi-tenancy work in Tempo?
What is the recommended compaction configuration for production?
How We Keep Your Configs Safe & Valid
Built-in Error Checking
Every file is checked against official rules. We catch missing fields and bad syntax. YAML indentation errors are flagged right away. Kubernetes, Terraform, and Docker specs are all covered. API versions and labels are verified too. You get valid output every time you generate.
100% Private & Local
All tools run in your browser only. Your API keys never leave your machine. We do not use any tracking scripts. No data is sent to any server. Passwords and secrets stay on your device. Crypto operations use the Web Crypto API. Your privacy is fully protected at all times.
Secure Settings by Default
Configs use safe defaults out of the box. Containers run as non-root users. Root filesystems are set to read-only. Dangerous Linux capabilities are dropped. Network policies limit pod-to-pod traffic. TLS 1.3 is enabled for web servers. Security headers are added where needed.
Ready for CI/CD & Git
Output files are ready for your Git repo. Use them with ArgoCD, Flux, or GitHub Actions. Files use clear formatting and comments. Code review is easy for your team. Indentation and key order are consistent. Test in staging before going to production. Every file is clean and well-structured.
Infrastructure as Code
Store configs in Git alongside your code. Terraform modules include typed variables. Backend configs support remote state locking. Outputs work across multiple modules. Ansible playbooks use clear task steps. Chef and Puppet configs are also supported. Every file works with version control tools.
Monitoring & Tracing
Set up Prometheus with auto-discovery rules. Create Grafana dashboards with template variables. Add alerting rules with severity labels. Use OpenTelemetry for trace collection. Forward logs to Loki or Elasticsearch. Connect to Jaeger or Tempo for tracing. Monitor metrics, logs, and traces together.
Container & Docker Safety
Dockerfiles use multi-stage builds for small images. Base images are pinned to exact versions. Dev files are excluded from final images. Health checks are added for orchestrator use. Containers switch to non-root users. Docker Compose uses named volumes and networks. Resource limits are set in deploy configs.
Multiple Output Formats
Export as YAML, JSON, HCL, or TOML. Kubernetes uses YAML with proper separators. Terraform uses HCL with correct escaping. JSON output has consistent indentation. Copy to clipboard with one click. Preview output with syntax highlighting. Line numbers help you review quickly.