Skip to main content
# query-exporter - Export Prometheus metrics from SQL queries

[![Latest Version](https://img.shields.io/pypi/v/query-exporter.svg)](https://pypi.python.org/pypi/query-exporter)
[![Build Status](https://travis-ci.org/albertodonato/query-exporter.svg?branch=master)](https://travis-ci.org/albertodonato/query-exporter)
[![Coverage Status](https://codecov.io/gh/albertodonato/query-exporter/branch/master/graph/badge.svg)](https://codecov.io/gh/albertodonato/query-exporter)

`query-exporter` is a [Prometheus](https://prometheus.io/) exporter which
allows collecting metrics from database queries, at specified time intervals.

It uses [SQLAlchemy](https://www.sqlalchemy.org/) to connect to different
database engines, including PostgreSQL, MySQL, Oracle and Microsoft SQL Server.

Each query can be run on multiple databases, and update multiple metrics.

The application is called with a configuration file that looks like this:

```yaml
databases:
db1:
dsn: postgres:///sampledb1
db2:
dsn: mysql:///sampledb2

metrics:
metric1:
type: gauge
description: A sample gauge
metric2:
type: summary
description: A sample summary
metric3:
type: histogram
description: A sample histogram
buckets: [10, 20, 50, 100, 1000]

queries:
query1:
interval: 30
databases: [db1]
metrics: [metric1]
sql: SELECT random() * 100
query2:
interval: 1m
databases: [db1, db2]
metrics: [metric2, metric3]
sql: SELECT random() * 1000, random() * 10000
```

The `dsn` connection string has the following format:

```
dialect[+driver]://[username:password][@host:port]/database
```

(see
[SQLAlchemy documentation](http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls) for
details on the available options):

The `metrics` list in the query configuration must match values returned by the
query defined in `sql`.

The `interval` value is interpreted as seconds if no suffix is specified; valid
suffix are `s`, `m`, `h`, `d`. Only integer values can be specified.

Queries will usually return a single row, but multiple rows are supported, and
each row will cause an update of the related metrics. This is relevant for any
kind of metric except gauges, which will be effectively updated to the value
from the last row.

For the configuration above, exported metrics look like this:

```
# HELP metric1 A sample gauge
# TYPE metric1 gauge
metric1{database="db1"} 13.8291064184159
# HELP metric2 A sample summary
# TYPE metric2 summary
metric2_count{database="db1"} 1.0
metric2_sum{database="db1"} 889.48124460876
metric2_count{database="db2"} 1.0
metric2_sum{database="db2"} 665.63375480473
# HELP metric3 A sample histogram
# TYPE metric3 histogram
metric3_bucket{database="db1",le="10.0"} 0.0
metric3_bucket{database="db1",le="20.0"} 0.0
metric3_bucket{database="db1",le="50.0"} 0.0
metric3_bucket{database="db1",le="100.0"} 0.0
metric3_bucket{database="db1",le="1000.0"} 0.0
metric3_bucket{database="db1",le="+Inf"} 1.0
metric3_count{database="db1"} 1.0
metric3_sum{database="db1"} 9988.39943669736
metric3_bucket{database="db2",le="10.0"} 0.0
metric3_bucket{database="db2",le="20.0"} 0.0
metric3_bucket{database="db2",le="50.0"} 0.0
metric3_bucket{database="db2",le="100.0"} 0.0
metric3_bucket{database="db2",le="1000.0"} 0.0
metric3_bucket{database="db2",le="+Inf"} 1.0
metric3_count{database="db2"} 1.0
metric3_sum{database="db2"} 9923.82999043912
```

Metrics are automatically tagged with the `database` label so that indipendent
series are generated for each database.


## Database engines

SQLAlchemy doesn't depend on specific Python database modules at installation.
This means additional modules might need to be installed for engines in use
(e.g. `psycopg2` for PostgreSQL or `MySQL-python` for MySQL).

See
[supported databases](http://docs.sqlalchemy.org/en/latest/core/engines.html#supported-databases) for details.

Release files for query-exporter 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for query-exporter 1.2.0
File Size Uploaded
query-exporter-1.2.0.tar.gz 23.7 kB Details

Release files / query-exporter-1.2.0.tar.gz

Download URL query-exporter-1.2.0.tar.gz
Size 23.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7b71eedeaf656ced0a12a7ca6ca54f35bbb1ee2fbcd7b8f785b7b2a6e27da97a
BLAKE2b-256 checksum
How to use checksums
27cc5a4ef5ddfd270dd5b674a2c8daae77b22703f3fa5c535ab320bf8ed0b137
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

5.2.1

2 release files

5.2.0

2 release files

5.1.0

2 release files

5.0.2

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.11.1

2 release files

2.11.0

2 release files

2.10.0

2 release files

2.9.2

2 release files

2.9.1

2 release files

2.9.0

2 release files

2.8.3

1 release file

2.8.2

1 release file

2.8.1

1 release file

2.8.0

1 release file

2.7.1

1 release file

2.7.0

1 release file

2.6.2

1 release file

2.6.1

1 release file

2.6.0

1 release file

2.5.1

1 release file

2.5.0

1 release file

2.4.0

1 release file

2.3.0

1 release file

2.2.1

1 release file

2.2.0

1 release file

2.1.0

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.9.3

2 release files

1.9.2

1 release file

1.9.1

1 release file

1.9.0

1 release file

1.8.1

1 release file

1.8.0

1 release file

1.7.0

1 release file

1.6.0

1 release file

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

This release

1.2.0 This release

1 release file

1.1.0

1 release file

1.0.0

1 release file

0.1.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page