Send PgBouncer metrics to Axiom
The Prometheus receiver is part of the contrib distribution of the OpenTelemetry Collector (otelcol-contrib). It isn’t included in the core distribution.
Prerequisites#
- Create an Axiom account.
- Create a dataset in Axiom where you send your data.
- Create an API token in Axiom with permissions to ingest data to the dataset you have created.
When you create the dataset, select Metrics as the dataset type. Metrics require their own dedicated dataset. For more information, see Create dataset.
Expose PgBouncer stats with pgbouncer_exporter#
In pgbouncer.ini, allow a user to read stats and let the exporter connect:
stats_users = stats
ignore_startup_parameters = extra_float_digitsThen run the exporter, pointing it at PgBouncer’s special pgbouncer admin database:
docker run -d -p 9127:9127 prometheuscommunity/pgbouncer-exporter \
--pgBouncer.connectionString="postgres://stats:PASSWORD@pgbouncer:6432/pgbouncer?sslmode=disable"Replace the connection string with your PgBouncer host, port, and stats user. You can also set it with the PGBOUNCER_EXPORTER_CONNECTION_STRING environment variable. The exporter then serves metrics at http://localhost:9127/metrics.
Configure the OpenTelemetry Collector#
Add a Prometheus receiver that scrapes the exporter and an OTLP/HTTP exporter that sends data to Axiom:
receivers:
prometheus:
config:
scrape_configs:
- job_name: pgbouncer
scrape_interval: 15s
static_configs:
- targets: ["pgbouncer-exporter:9127"] # host:port of pgbouncer_exporter
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 80
spike_limit_percentage: 25
batch:
send_batch_max_size: 8192
exporters:
otlphttp:
compression: zstd
endpoint: https://AXIOM_DOMAIN
headers:
authorization: Bearer API_TOKEN
x-axiom-metrics-dataset: DATASET_NAME
service:
pipelines:
metrics:
receivers:
- prometheus
processors:
- memory_limiter
- batch
exporters:
- otlphttpReplace AXIOM_DOMAIN with the base domain of your edge deployment. For more information, see Edge deployments.
Replace API_TOKEN with the Axiom API token you have generated. For added security, store the API token in an environment variable.
Replace DATASET_NAME with the name of the Axiom dataset where you send your data.
For metrics, use the x-axiom-metrics-dataset header instead of x-axiom-dataset.
Query your metrics#
Once data is flowing, query your PgBouncer metrics like any other OTel metrics in Axiom. Pool metrics carry database and user tags. For example, to chart active client connections per database:
`DATASET_NAME`:`pgbouncer_pools_client_active_connections`
| align to $__interval using last
| group by `database` using sumFor more information, see Metrics.