Store OpenTelemetry metrics using Telegraf and CrateDB¶
This how-to guide walks you through configuring Telegraf to receive OpenTelemetry metrics and store them into CrateDB.
Prerequisites¶
Use Docker or Podman to run all components. This approach works consistently across Linux, macOS, and Windows.
Files¶
First, download and save all required files to your machine.
Services¶
Start services using Docker Compose or Podman Compose.
If you use Podman, replace docker with podman (or enable the podman‑docker
compatibility shim) and run podman compose up.
docker compose up
Submit data¶
Use Python¶
To submit metrics using the OpenTelemetry Python SDK, choose one of these approaches:
Option 1: Using uv (recommended)
docker compose run --rm --env-from-file=.env uv uv run --with=opentelemetry-distro --with=opentelemetry-exporter-otlp opentelemetry-instrument python /src/example.py
Option 2: Using pip
First, install dependencies:
pip install opentelemetry-distro opentelemetry-exporter-otlp
Then run the example:
opentelemetry-instrument --service_name=app python example.py
Display example.py
# OpenTelemetry demo application.
# https://cratedb.com/docs/guide/integrate/opentelemetry/
from opentelemetry import metrics
def main():
meter = metrics.get_meter("testdrive.meter.name")
temperature = meter.create_gauge("temperature")
humidity = meter.create_gauge("humidity")
temperature.set(42.42)
humidity.set(84.84)
if __name__ == "__main__":
main()
Use any language¶
Use any of the available OpenTelemetry language APIs & SDKs for C++, C#/.NET, Erlang/Elixir, Go, Java, JavaScript, PHP, Python, Ruby, Rust, or Swift.
Explore data¶
CrateDB stores the metrics in the designated table, ready for inspection and analysis.
docker compose exec cratedb crash -c "SELECT * FROM doc.metrics ORDER BY timestamp LIMIT 5;"
+---------------------+---------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------+
| hash_id | timestamp | name | tags | fields | day |
+---------------------+---------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------+
| 4549776513022193265 | 1758500094846 | temperature | {"host": "2805bf17ee55", "otel_library_name": "testdrive.meter.name", "service_name": "app", "telemetry_auto_version": "0.58b0", "telemetry_sdk_language": "python", "telemetry_sdk_name": "opentelemetry", "telemetry_sdk_version": "1.37.0"} | {"gauge": 42.42} | 1758499200000 |
| -926134856403504308 | 1758500094846 | humidity | {"host": "2805bf17ee55", "otel_library_name": "testdrive.meter.name", "service_name": "app", "telemetry_auto_version": "0.58b0", "telemetry_sdk_language": "python", "telemetry_sdk_name": "opentelemetry", "telemetry_sdk_version": "1.37.0"} | {"gauge": 84.84} | 1758499200000 |
+---------------------+---------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+---------------+
SELECT 2 rows in set (0.049 sec)