您好我正在尝试使用Prometheus监控postgres SQL。为此,我使用此导出程序https://github.com/wrouesnel/postgres_exporter
我正在docker-compose.yml
中启动导出器,如下所示:
exporter-postgres:
image: wrouesnel/postgres_exporter
ports:
- 9113:9113
environment:
- DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/?sslmode=disable"
当导出器尝试访问数据库时,会抛出这样的错误:
Error running query on database: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=490
和
Error scanning runtime variable: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=464
我不确定这条消息的意思。此外,我不确定问题是否源自我的docker-compose文件或导出器。
在postgres-exporter.go
中抛出错误的行是:
// Use SHOW to get the value
row := db.QueryRow(fmt.Sprintf("SHOW %s;", columnName))
var val interface{}
err := row.Scan(&val)
if err != nil {
log.Errorln("Error scanning runtime variable:", columnName, err)
continue
}
和
query, er := queryOverrides[namespace]
if er == false {
query = fmt.Sprintf("SELECT * FROM %s;", namespace)
}
// Don't fail on a bad scrape of one metric
rows, err := db.Query(query)
if err != nil {
log.Println("Error running query on database: ", namespace, err)
e.error.Set(1)
return
}
https://github.com/wrouesnel/postgres_exporter/blob/master/postgres_exporter.go
我感谢任何帮助!
编辑:
以下是与数据库的连接:
db, err := sql.Open("postgres", e.dsn)
而e.dsn
生成如下:
dsn := os.Getenv("DATA_SOURCE_NAME")
连接不会抛出任何错误
答案 0 :(得分:7)
嘿,对于将来有类似问题的人来说:
问题在于docker-compose.yml
中的这一行 - DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/?sslmode=disable"
将其更改为
- DATA_SOURCE_NAME=postgresql://user:pass@localhost:5432/?sslmode=disable
(没有引号)使一切正常:)