Importing results from InfluxDB 3

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.

Installation

pip install 'apache-otava[influxdb]'

Connection

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.

Reproducible example

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.

Test configuration

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.