Skip to main content
pg_stat_ch can export query telemetry as OpenTelemetry logs instead of inserting directly into ClickHouse. This lets you route data through your existing observability pipeline (Grafana, Datadog, Honeycomb, etc.) without running a separate ClickHouse instance.

Enable OpenTelemetry mode

Set these parameters in postgresql.conf and restart PostgreSQL:
When use_otel is enabled, the ClickHouse connection parameters are ignored. The background worker sends events to the OTel collector via gRPC.

How it works

The OTel exporter maps pg_stat_ch events to OpenTelemetry semantic conventions:
  • Logs: Each query execution becomes an OTel log record with attributes following the database semantic conventions (db.name, db.user, db.operation.name, db.query.text).
The exporter builds OTLP log requests directly in the bgworker. pg_stat_ch’s shared-memory queue already buffers events, and the exporter chunks those events into bounded gRPC requests.

Configuration

All OTel-specific parameters require a PostgreSQL restart. See the configuration reference for details on each parameter.

Example: OTel Collector to ClickHouse

You can use the OpenTelemetry Collector as a middle layer between pg_stat_ch and ClickHouse. This is useful when you want to fan out data to multiple backends or apply transformations.

Example: Grafana with Tempo/Loki

Route pg_stat_ch logs to Loki for Grafana dashboards:

Verify data is flowing

Check export health the same way as with ClickHouse:
If send_failures is increasing, check:
  1. The OTel collector is running and reachable at the configured endpoint
  2. The collector’s gRPC receiver is listening on port 4317
  3. PostgreSQL logs for connection error details