Skip to content

Postgres Exporter 部署

使用 prometheus-community Helm Chart 部署 Postgres Exporter,將 PostgreSQL 資料庫指標匯出至 Prometheus。

概述

Postgres Exporter(prometheuscommunity/postgres-exporter)連線至 PostgreSQL 資料庫,採集連線數、查詢效能、資料庫大小、Replication 狀態等指標。透過 prometheus-community 的 prometheus-postgres-exporter Helm Chart 部署,部署至 monitoring namespace,預設在叢集內部以 Service DNS 暴露。

每個 Exporter 實例只能監控一個資料庫連線(datasource),若需監控多個 PostgreSQL 資料庫,需為每個資料庫分別部署獨立的 Exporter 實例,並在 Prometheus scrape config 中分別列出。

核心內容

datasource 設定限制

config.datasource 下的認證欄位(passwordpasswordFilepasswordSecretpgpassfile四者只能擇一使用,混用會導致設定衝突或錯誤。

pg_stat_statements 問題

Postgres Exporter 預設嘗試查詢 pg_stat_statements view 以取得查詢效能統計,但此 Extension 在 PostgreSQL 上不是預設啟用的,缺少時會導致 Exporter 報錯。解決方式:

  1. 安裝 Extension:CREATE EXTENSION pg_stat_statements;
  2. 將其加入預載函式庫:ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';
  3. 重啟 PostgreSQL 使設定生效

多資料庫監控

需要監控多個 PostgreSQL 時,分別安裝多個 Release(如 postgres-exporterpostgres-exporter2),每個指向不同的 datasource,然後在 Prometheus 的 scrape config 中分別加入各個 Service 端點。

關鍵要點

  • 每個 Exporter 實例對應一個 PostgreSQL 連線,多資料庫需多個實例
  • datasource 的認證方式只能選一種(password/passwordFile/passwordSecret/pgpassfile)
  • 預設啟用 pg_stat_statements 查詢,PostgreSQL 端需提前安裝此 Extension
  • 安裝後叢集內 Service DNS:postgres-exporter-prometheus-postgres-exporter.monitoring.svc.cluster.local:80

實際應用

部署後在 PrometheusextraScrapeConfigs 中已設定兩個 Postgres Exporter 端點(postgres-exporterpostgres-exporter2),對應兩個不同的 PostgreSQL 資料庫實例。搭配 Grafana 可使用官方 Dashboard 範本(如 PostgreSQL Database Dashboard #9628)進行視覺化。

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
Release 名稱postgres-exporter
Namespacemonitoring
Hostwiwynn-bot.postgres.database.azure.com
Userwbotadmin@wiwynn-bot
PasswordBed200@2020
Port5432
Databasepostgres
叢集內 Service DNSpostgres-exporter-prometheus-postgres-exporter.monitoring.svc.cluster.local:80

安裝指令

bash
helm install postgres-exporter \
  -f values.yaml \
  --insecure-skip-tls-verify \
  --namespace monitoring \
  prometheus-community/prometheus-postgres-exporter

values.yaml

yaml
config:
  datasource:
    host: "wiwynn-bot.postgres.database.azure.com"
    user: "wbotadmin@wiwynn-bot"
    password: "Bed200@2020"
    port: "5432"
    database: "postgres"

pg_stat_statements 問題修復

sql
-- 1. 建立 Extension
CREATE EXTENSION pg_stat_statements;

-- 2. 加入預載函式庫
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';

-- 3. 驗證設定(重啟後)
SELECT * FROM pg_file_settings WHERE name = 'shared_preload_libraries';
bash
# 重啟 PostgreSQL(本地部署)
sudo systemctl restart postgresql

相關概念

來源