Closed
Description
Component(s)
receiver/sqlquery
What happened?
Description
#36752 is happening despite #37748. The sqlquery receiver opens one connection for every query, regardless of the max_open_conn
setting.
Steps to Reproduce
Use the configuration below with a recent collector and Postgres:
$ docker run --rm -it --net host --env POSTGRES_HOST_AUTH_METHOD=trust docker.io/library/postgres
$ docker run --rm -it --net host -v "$(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml:ro" \
ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.123.1
Use psql
to see the open connections at Postgres:
$ psql -h localhost -U postgres -c 'SELECT pid, backend_type, datname, usename, query, state FROM pg_stat_activity'
┌─────┬──────────────────────────────┬──────────┬──────────┬────────────────────────────────────────────────────────────────────────────────┬────────┐
│ pid │ backend_type │ datname │ usename │ query │ state │
├─────┼──────────────────────────────┼──────────┼──────────┼────────────────────────────────────────────────────────────────────────────────┼────────┤
│ 102 │ client backend │ postgres │ postgres │ SELECT 1 AS number │ idle │
│ 103 │ client backend │ postgres │ postgres │ SELECT 2 AS number │ idle │
│ 104 │ client backend │ postgres │ postgres │ SELECT 3 AS number │ idle │
│ 110 │ client backend │ postgres │ postgres │ SELECT pid, backend_type, datname, usename, query, state FROM pg_stat_activity │ active │
│ 65 │ autovacuum launcher │ ␀ │ ␀ │ │ ␀ │
│ 66 │ logical replication launcher │ ␀ │ postgres │ │ ␀ │
│ 61 │ checkpointer │ ␀ │ ␀ │ │ ␀ │
│ 62 │ background writer │ ␀ │ ␀ │ │ ␀ │
│ 64 │ walwriter │ ␀ │ ␀ │ │ ␀ │
└─────┴──────────────────────────────┴──────────┴──────────┴────────────────────────────────────────────────────────────────────────────────┴────────┘
(9 rows)
Expected Result
I expected one "client backend" connection because max_open_conn: 1
in the receiver config.
Actual Result
Three "client backend" connections, one for each query.
Collector version
v0.123.1
Environment information
Environment
OS: Debian 12 (bookworm)
OpenTelemetry Collector configuration
---
receivers:
sqlquery:
driver: postgres
datasource: host=localhost sslmode=disable user=postgres
max_open_conn: 1
collection_interval: 10s
queries:
- sql: 'SELECT 1 AS number'
metrics:
- metric_name: num_1
value_column: number
- sql: 'SELECT 2 AS number'
metrics:
- metric_name: num_2
value_column: number
- sql: 'SELECT 3 AS number'
metrics:
- metric_name: num_3
value_column: number
exporters:
debug: {}
service:
pipelines:
metrics:
receivers: [sqlquery]
processors: []
exporters: [debug]
Log output
2025-04-09T04:03:08.577Z info [email protected]/service.go:197 Setting up own telemetry...
2025-04-09T04:03:08.578Z info builders/builders.go:26 Development component. May change in the future.
2025-04-09T04:03:08.579Z info [email protected]/service.go:264 Starting otelcol-contrib... {"Version": "0.123.1", "NumCPU": 12}
2025-04-09T04:03:08.579Z info extensions/extensions.go:41 Starting extensions...
2025-04-09T04:03:08.579Z info [email protected]/service.go:287 Everything is ready. Begin running and processing data.
2025-04-09T04:03:09.600Z info Metrics {"resource metrics": 3, "metrics": 3, "data points": 3}
2025-04-09T04:03:19.583Z info Metrics {"resource metrics": 3, "metrics": 3, "data points": 3}
2025-04-09T04:03:29.583Z info Metrics {"resource metrics": 3, "metrics": 3, "data points": 3}
2025-04-09T04:03:39.583Z info Metrics {"resource metrics": 3, "metrics": 3, "data points": 3}
Additional context
This function is called during every Scraper's startup, creating multiple pools:
opentelemetry-collector-contrib/receiver/sqlqueryreceiver/receiver.go
Lines 47 to 48 in 19d98da