9.5 KiB
title, description, keywords, weight
| title | description | keywords | weight | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Tempo Vulture | Guide to using Tempo Vulture for data integrity testing |
|
850 |
Tempo Vulture
Tempo Vulture is a testing tool that validates the end-to-end functionality of Tempo by continuously writing traces and verifying they can be read back correctly. It is useful for monitoring data integrity in production environments and for post-deployment validation testing.
Overview
Tempo Vulture performs the following operations:
- Write traces: Pushes test traces to Tempo using OTLP over gRPC
- Read traces by ID: Queries Tempo to retrieve traces by their trace ID
- Search traces: Uses TraceQL to search for traces by attributes
- Metrics queries: Validates TraceQL metrics queries (enabled by default)
Tempo Vulture can run in two modes:
- Continuous mode (default): Runs indefinitely, continuously writing and reading traces while exposing Prometheus metrics
- Validation mode: Executes a fixed number of write/read cycles and exits with a status code indicating success or failure
Run Tempo Vulture
Tempo Vulture is available as a Docker image:
docker run grafana/tempo-vulture:latest [arguments...]
You can also build it from source:
make tempo-vulture
./tempo-vulture [arguments...]
Configuration flags
Configure Tempo Vulture using command-line flags.
Required flags
| Flag | Description | Example |
|---|---|---|
--tempo-query-url |
The URL (scheme://hostname) at which to query Tempo | http://tempo:3200 |
--tempo-push-url |
The URL (scheme://hostname:port) at which to push traces to Tempo | http://tempo:4317 |
Optional flags
| Flag | Default | Description |
|---|---|---|
--tempo-org-id |
"" |
The org ID to use when querying Tempo (for multi-tenant deployments) |
--tempo-push-tls |
false |
Whether to use TLS when pushing spans to Tempo |
--tempo-write-backoff-duration |
15s |
Time to pause between write operations |
--tempo-long-write-backoff-duration |
1m |
Time to pause between long write operations |
--tempo-read-backoff-duration |
30s |
Time to pause between read operations |
--tempo-search-backoff-duration |
1m |
Time to pause between search operations. Set to 0s to disable search validation |
--tempo-metrics-backoff-duration |
0s |
Time to pause between TraceQL metrics operations. Set to 0s to disable |
--tempo-retention-duration |
336h |
The block retention that Tempo is using |
--tempo-recent-traces-backoff-duration |
14m |
Cutoff between recent and old traces query checks |
--tempo-query-livestore |
false |
Whether to query live stores |
--prometheus-listen-address |
:80 |
Address to listen on for Prometheus scrapes |
--prometheus-path |
/metrics |
Path to publish Prometheus metrics |
Validation mode flags
| Flag | Default | Description |
|---|---|---|
--validation-mode |
false |
Run in validation mode: execute a fixed number of cycles and exit |
--validation-cycles |
3 |
Number of write/read cycles to perform in validation mode |
--validation-timeout |
5m |
Maximum time to run validation mode before timing out |
Continuous mode
In continuous mode, Tempo Vulture runs indefinitely and exposes Prometheus metrics that can be used for monitoring and alerting.
Example
docker run grafana/tempo-vulture:latest \
--tempo-query-url=http://tempo:3200 \
--tempo-push-url=http://tempo:4317 \
--tempo-org-id=my-tenant \
--tempo-write-backoff-duration=15s \
--tempo-read-backoff-duration=30s \
--tempo-search-backoff-duration=60s
Prometheus metrics
Tempo Vulture exposes the following key metrics:
| Metric | Type | Description |
|---|---|---|
tempo_vulture_trace_total |
Counter | Total number of trace operations performed |
tempo_vulture_trace_error_total |
Counter | Total number of trace errors by error type |
Error types include:
incorrectresult: Retrieved trace doesn't match the expected traceincorrect_metrics_result: Metrics query returned unexpected resultsmissingspans: Trace has missing spansnotfound_byid: Trace not found by IDnotfound_search: Trace not found via searchnotfound_traceql: Trace not found via TraceQLnotfound_metrics: Trace not found via metrics querynotfound_search_attribute: No searchable attribute found in traceinaccurate_metrics: Metrics count doesn't match actual span countrequestfailed: Request to Tempo failed
Alerting
You can configure alerts based on Tempo Vulture metrics.
For example, the Tempo mixin includes a TempoVultureHighErrorRate alert that fires when the error rate exceeds a configurable threshold.
Validation mode
{{< admonition type="note" >}} Validation mode was added in Tempo 2.10. {{< /admonition >}}
Validation mode runs Tempo Vulture as a one-shot test that can be integrated into CI/CD pipelines for post-deployment validation. Instead of running continuously, it executes a fixed number of write/read cycles and exits with a status code indicating success or failure.
{{< admonition type="warning" >}}
Running Vulture as a Deployment while in validation mode causes problems in Kubernetes. Because Deployments expect long-running processes, a container that finishes its task and exits triggers a CrashLoopBackOff (even with exit code 0). Run validation mode as a Job instead.
{{< /admonition >}}
Exit codes
| Exit code | Meaning |
|---|---|
0 |
All validations passed |
1 |
One or more validations failed, or configuration error |
Environment variables
Validation mode requires authentication:
| Variable | Description |
|---|---|
TEMPO_ACCESS_POLICY_TOKEN |
Access policy token for authenticating with Tempo (required in validation mode) |
Example
docker run \
-e TEMPO_ACCESS_POLICY_TOKEN=your-token \
grafana/tempo-vulture:latest \
--tempo-query-url=https://tempo.example.com \
--tempo-push-url=https://tempo.example.com:4317 \
--tempo-org-id=my-tenant \
--validation-mode \
--validation-cycles=5 \
--validation-timeout=10m
CI/CD pipeline integration
Validation mode is useful for:
- Post-deployment testing: Verify Tempo is functioning correctly after a deployment
- Smoke testing: Quick validation that write and read paths are working
- Integration testing: Ensure end-to-end trace pipeline is operational
Example CI/CD usage in a GitHub Actions workflow:
- name: Validate Tempo deployment
run: |
docker run \
-e TEMPO_ACCESS_POLICY_TOKEN=${{ secrets.TEMPO_TOKEN }} \
grafana/tempo-vulture:latest \
--tempo-query-url=${{ vars.TEMPO_URL }} \
--tempo-push-url=${{ vars.TEMPO_PUSH_URL }} \
--tempo-org-id=${{ vars.TEMPO_ORG_ID }} \
--validation-mode \
--validation-cycles=3 \
--validation-timeout=5m
Validation process
In validation mode, Tempo Vulture performs these steps:
-
For each cycle (default: 3):
- Write a test trace to Tempo
- Wait briefly for ingestion
- Read the trace back by ID and verify it matches
-
After all cycles complete:
- Wait for traces to be searchable (if search is enabled)
- Search for each trace using a random attribute
- Verify all traces are found
-
Exit with code
0if all validations pass, or1if any fail
Docker Compose example
The Tempo repository includes Docker Compose examples that demonstrate how to run Tempo Vulture. Refer to the example configurations for complete setups.
Example from a Docker Compose file:
vulture:
image: grafana/tempo-vulture:latest
command:
- "-tempo-push-url=http://distributor:4317"
- "-tempo-query-url=http://query-frontend:3200"
- "-tempo-org-id="