Postgres错误在数据库上运行查询:无法检测默认用户名

Jak*_*ter 2 postgresql go docker docker-compose

嗨,我试图用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" 
Run Code Online (Sandbox Code Playgroud)

当导出程序尝试访问数据库时,会抛出以下错误:

Error running query on database: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=490
Run Code Online (Sandbox Code Playgroud)

Error scanning runtime variable: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=464
Run Code Online (Sandbox Code Playgroud)

我不太确定这个消息可能意味着什么.此外,我不确定问题是否源自我的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
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/wrouesnel/postgres_exporter/blob/master/postgres_exporter.go

我感谢任何帮助!

编辑:

这是与数据库的连接:

db, err := sql.Open("postgres", e.dsn)
Run Code Online (Sandbox Code Playgroud)

e.dsn生成如下:

dsn := os.Getenv("DATA_SOURCE_NAME")
Run Code Online (Sandbox Code Playgroud)

连接不会引发任何错误

Jak*_*ter 7

嘿,对于将来有类似问题的人:

问题是docker-compose.yml中的这一行

 - DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/?sslmode=disable" 
Run Code Online (Sandbox Code Playgroud)

把它改成

 - DATA_SOURCE_NAME=postgresql://user:pass@localhost:5432/?sslmode=disable
Run Code Online (Sandbox Code Playgroud)

(没有引号)使一切工作:)