Otava imports query results from InfluxDB 3 Core or Enterprise through the influxdb3-python client. SQL is the default query language; set query_language: influxql for InfluxQL queries.
pip install 'apache-otava[influxdb]'
influxdb: host: http://localhost:8181 database: performance token: ${INFLUXDB_TOKEN}
The same settings are available through INFLUXDB_HOST, INFLUXDB_DATABASE, and INFLUXDB_TOKEN, or the --influxdb-host, --influxdb-database, and --influxdb-token command-line options. Command-line values take precedence over environment variables, which take precedence over YAML.
The bundled example starts InfluxDB 3 Core with authenticated, in-memory storage, seeds deterministic latency data, and runs Otava against it:
docker build -t apache/otava:latest . docker compose -f examples/influxdb/docker-compose.yaml run --rm otava \ analyze api_latency_sql --branch main --since 2025-01-01T00:00:00Z docker compose -f examples/influxdb/docker-compose.yaml down
Run api_latency_influxql instead to query the same data with InfluxQL.
The admin token committed under examples/influxdb/ is a fixed test credential, and the server discards its in-memory data when stopped. Both are for this local demonstration only. Use a securely generated token and durable object storage for production deployments.
tests: api_latency_sql: type: influxdb query_language: sql query: | SELECT time, branch, p95_ms, commit FROM api_latency WHERE branch = %{BRANCH} ORDER BY time time_column: time attributes: [branch, commit] metrics: p95: column: p95_ms direction: -1 scale: 1 legacy_api_latency: type: influxdb query_language: influxql query: SELECT time, branch, p95_ms FROM api_latency WHERE branch = %{BRANCH} attributes: [branch] metrics: [p95_ms]
Metric definitions use column, direction, and scale as with the other SQL-backed importers. %{BRANCH} is replaced with an escaped string literal when --branch is supplied.
Run the analysis with:
otava analyze api_latency_sql --branch main --since 2025-01-01T00:00:00Z --last 100
InfluxDB is import-only in this release; Otava does not write change points back to InfluxDB.