Appearance
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 下的認證欄位(password、passwordFile、passwordSecret、pgpassfile)四者只能擇一使用,混用會導致設定衝突或錯誤。
pg_stat_statements 問題
Postgres Exporter 預設嘗試查詢 pg_stat_statements view 以取得查詢效能統計,但此 Extension 在 PostgreSQL 上不是預設啟用的,缺少時會導致 Exporter 報錯。解決方式:
- 安裝 Extension:
CREATE EXTENSION pg_stat_statements; - 將其加入預載函式庫:
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements'; - 重啟 PostgreSQL 使設定生效
多資料庫監控
需要監控多個 PostgreSQL 時,分別安裝多個 Release(如 postgres-exporter、postgres-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
實際應用
部署後在 Prometheus 的 extraScrapeConfigs 中已設定兩個 Postgres Exporter 端點(postgres-exporter 和 postgres-exporter2),對應兩個不同的 PostgreSQL 資料庫實例。搭配 Grafana 可使用官方 Dashboard 範本(如 PostgreSQL Database Dashboard #9628)進行視覺化。
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
環境參數
| 項目 | 值 |
|---|---|
| Release 名稱 | postgres-exporter |
| Namespace | monitoring |
| Host | wiwynn-bot.postgres.database.azure.com |
| User | wbotadmin@wiwynn-bot |
| Password | Bed200@2020 |
| Port | 5432 |
| Database | postgres |
| 叢集內 Service DNS | postgres-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-exportervalues.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相關概念
- Prometheus on Kubernetes 部署 — 收集 Postgres Exporter 指標的 Prometheus 設定(含 scrape timeout 設定範例)
- Prometheus Exporter 部署模式 — Exporter 的通用 K8s 部署模式
- PgBouncer 連線池(Kubernetes 部署) — PostgreSQL 連線池,可搭配 pgbouncer_exporter 監控
- Node Exporter(VM 系統層監控) — 層一:VM 系統層指標,與本文(層二)互補