-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
Description
Component(s)
receiver/postgresql
What happened?
Description
According to this exception something is wrong with the way postgresqlreceiver builds the explain query:
2025-06-12T09:16:52.056+0000 error [email protected]/client.go:112 failed to explain statement {"resource": {"service.instance.id": "8c35dd2c-232c-47a0-adcd-0e108dce70a9", "service.name": "otelcol-contrib", "service.version": "0.128.0"}, "otelcol.component.id": "postgresql",
"otelcol.component.kind": "receiver", "otelcol.signal": "logs", "error": "pq: syntax error at or near \"+\""}
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLClient).explainQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/client.go:112
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLScraper).collectTopQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/scraper.go:346
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLScraper).scrapeTopQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/scraper.go:211
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.createLogsReceiver.func3
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/factory.go:150
go.opentelemetry.io/collector/scraper.ScrapeLogsFunc.ScrapeLogs
go.opentelemetry.io/collector/[email protected]/logs.go:25
go.opentelemetry.io/collector/scraper/scraperhelper.wrapObsLogs.func1
go.opentelemetry.io/collector/scraper/[email protected]/obs_logs.go:49
go.opentelemetry.io/collector/scraper.ScrapeLogsFunc.ScrapeLogs
go.opentelemetry.io/collector/[email protected]/logs.go:25
go.opentelemetry.io/collector/scraper/scraperhelper.scrapeLogs
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:237
go.opentelemetry.io/collector/scraper/scraperhelper.NewLogsController.func1
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:204
go.opentelemetry.io/collector/scraper/scraperhelper.(*controller[...]).startScraping.func1
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:171
I can't 100% tell which query is producing the error, but I suspect it might be one or all of these:
SELECT
CASE WHEN length ( t.x ) :: int > ? AND substring ( t.x, ( length ( t.x ) :: int - ? ) + ? ) LIKE ?
THEN substring ( t.x, ( length ( t.x ) :: int - ? ) + ? )
ELSE ? END
FROM table t
WITH RECURSIVE query AS (
SELECT id, COALESCE ( t.col, ? ) path, ? lvl FROM table t
UNION ALL
SELECT id, path, COALESCE ( t.col, ? ) lvl + ? FROM query)
SEARCH DEPTH FIRST BY col SET sort CYCLE id set is_cycle USING ids
SELECT col FROM query WHERE NOT is_cycle AND somecol = ? ORDER BY sort
(More logging here would be appreciated)
When top_query_collection.max_explain_each_interval > 0
is set and explainQuery
function errors out, all other entries are unprocessed.
Steps to Reproduce
Having + characters in query seems to break the explain query.
Expected Result
- correct explain query gets generated by postgresqlreceiver
- skip failed queries, continue processing the others
Actual Result
OTEL collector fails, skips all entries from pg_stat_statements
table
Collector version
0.128.0
Environment information
Environment
OS: Windows 11
OpenTelemetry Collector configuration
receivers:
postgresql:
endpoint: psqlserver:5432
username: postgres
password: ${PW}
collection_interval: 1m
tls:
insecure: true
query_sample_collection:
enabled: true
top_query_collection:
enabled: true
max_explain_each_interval: 10
resource_attributes:
postgresql.database.name:
enabled: true
postgresql.index.name:
enabled: true
postgresql.schema.name:
enabled: true
postgresql.table.name:
enabled: true
exporters:
debug:
verbosity: detailed # basic - normal - detailed
service:
telemetry:
logs:
level: debug
pipelines:
logs:
receivers:
- postgresql
processors: []
exporters:
- debug
Log output
2025-06-12T09:16:52.056+0000 error [email protected]/client.go:112 failed to explain statement {"resource": {"service.instance.id": "8c35dd2c-232c-47a0-adcd-0e108dce70a9", "service.name": "otelcol-contrib", "service.version": "0.128.0"}, "otelcol.component.id": "postgresql",
"otelcol.component.kind": "receiver", "otelcol.signal": "logs", "error": "pq: syntax error at or near \"+\""}
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLClient).explainQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/client.go:112
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLScraper).collectTopQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/scraper.go:346
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.(*postgreSQLScraper).scrapeTopQuery
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/scraper.go:211
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver.createLogsReceiver.func3
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/[email protected]/factory.go:150
go.opentelemetry.io/collector/scraper.ScrapeLogsFunc.ScrapeLogs
go.opentelemetry.io/collector/[email protected]/logs.go:25
go.opentelemetry.io/collector/scraper/scraperhelper.wrapObsLogs.func1
go.opentelemetry.io/collector/scraper/[email protected]/obs_logs.go:49
go.opentelemetry.io/collector/scraper.ScrapeLogsFunc.ScrapeLogs
go.opentelemetry.io/collector/[email protected]/logs.go:25
go.opentelemetry.io/collector/scraper/scraperhelper.scrapeLogs
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:237
go.opentelemetry.io/collector/scraper/scraperhelper.NewLogsController.func1
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:204
go.opentelemetry.io/collector/scraper/scraperhelper.(*controller[...]).startScraping.func1
go.opentelemetry.io/collector/scraper/[email protected]/controller.go:171
Additional context
No response
cyrille-leclerc