1,客户端安裝配置postgres_exporter代理
1.1 下載客户端
cd /usr/local
cd postgresql_package/
ll
sudo su
sudo -
sudo
sudo useradd -M -r -s /sbin/nologin postgres_exporter
#筆者是一個arm架構的Linux操作系統,因此下載的是arm64版本的postgres_exporter.這裏可以根據自己的環境下載對應的版本
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.18.1/postgres_exporter-0.18.1.linux-arm64.tar.gz
tar xf postgres_exporter*.tar.gz
ll
sudo wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.18.1/postgres_exporter-0.18.1.linux-arm64.tar.gz
sudo tar xf postgres_exporter*.tar.gz
ll
sudo mv postgres_exporter-0.18.1.linux-arm64 postgres_exporter
ll
cd postgres_exporter/
ll
sudo chown -R postgres_exporter /usr/local/postgresql_package/postgres_exporter
其實postgres_exporter代理的客户端非常簡單,只有一個postgres_exporter文件,(pg_stat_statements.yaml後面會提到,這裏不涉及這個文件)
1.2 編輯配置文件
編輯postgres_exorpter的配置文件
root@******:/usr/local/postgresql_package/postgres_exporter# cat .env
# Format
# DATA_SOURCE_NAME=postgresql://username:password@localhost:5432/postgres?sslmode=disable
# Monitor all databases via postgres_exporter
DATA_SOURCE_NAME="postgresql://postgres:******@localhost:5432/?sslmode=disable"
# PG_EXPORTER_EXTEND_QUERY_PATH="/usr/local/postgresql_package/postgres_exporter/pg_stat_statements.yaml"
# Monitor specific databases on the PostgreSQL server
# DATA_SOURCE_NAME="postgresql://username:password@localhost:5432/database-name?sslmode=disable"
授權當前目錄給postgres_exporter
sudo chown -R postgres_exporter: ./postgres_exporter
1.3 編輯systemctl服務文件
配置postgres_exporter的systemctl服務,並啓動服務
sudo tee /etc/systemd/system/postgres_exporter.service<<EOF
[Unit]
Description=Prometheus exporter for Postgresql
Wants=network-online.target
After=network-online.target
[Service]
User=postgres_exporter
Group=postgres_exporter
WorkingDirectory=/usr/local/postgresql_package/postgres_exporter
EnvironmentFile=/usr/local/postgresql_package/postgres_exporter/.env
ExecStart=/usr/local/postgresql_package/postgres_exporter --web.listen-address=:9187 --web.telemetry-path=/metrics
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start postgres_exporter
sudo systemctl enable postgres_exporter
1.4 驗證代理的http接口
http://192.168.*:*:9187,如果可以正常訪問,至此postgres_exporter已經配置完成。
2,Prometheus服務端 添加 postgres_exporter
2.1 prometheus配置文件增加postgres_exporter的客户端代理
# PostgreSQL Monitoring with postgres_exporter
- job_name: 'postgres_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.*.*:9187']
2.2 重啓prometheus服務端
systemctl restart prometheus
2.3 prometheus管理控制枱查看postgres_exporter
實際上是上面http://192.168.*:*:9187這個代理客户端註冊到服務端中
2.4 grafna導入postgresql監控的官方模板9628
官方的監控模板效果如下
可以在grafana官方參考已有的模板
https://grafana.com/grafana/dashboards/
3,增加自定義監控指標
3.1 創建自定義指標的yaml配置文件
參考上面第一個截圖,上面提到pg_stat_statements.yaml這個文件,這裏基於pg_stats_statements做一個統計,計算結果相當於數據庫的QPS指標
pg_stat_statements:
query: " SELECT datname, sum(calls) as calls FROM pg_stat_statements JOIN pg_database ON pg_stat_statements.dbid = pg_database.oid group by datname"
metrics:
- datname:
usage: "LABEL"
description: "Database name"
- calls:
usage: "COUNTER"
description: "Number of times executed"
3.2,編輯postgres_exorpter的配置文件,加載自定義配置
如下,在postgresql的配置文件.env中增加一行配置
PG_EXPORTER_EXTEND_QUERY_PATH="/usr/local/postgresql_package/postgres_exporter/pg_stat_statements.yaml"
root@******:/usr/local/postgresql_package/postgres_exporter# cat .env
# Format
# DATA_SOURCE_NAME=postgresql://username:password@localhost:5432/postgres?sslmode=disable
# Monitor all databases via postgres_exporter
DATA_SOURCE_NAME="postgresql://postgres:******@localhost:5432/?sslmode=disable"
PG_EXPORTER_EXTEND_QUERY_PATH="/usr/local/postgresql_package/postgres_exporter/pg_stat_statements.yaml"
# Monitor specific databases on the PostgreSQL server
# DATA_SOURCE_NAME="postgresql://username:password@localhost:5432/database-name?sslmode=disable"
授權當前目錄給postgres_exporter
sudo chown -R postgres_exporter: ./postgres_exporter
3.3,重啓prometheus服務端
systemctl restart prometheus
3.4,檢查自定義數據的收集
3.5,在grafana面板上增加自定義指標的監控圖
在官方模板9628的基礎上,點擊新增報表,選擇自定義數據源的數據pg_stat_statements_call 這個指標,來計算數據庫的QPS指標
其效果如下
參考鏈接:
https://www.rockdata.net/zh-cn/tutorial/monitor-with-prometheus-and-grafana/
https://www.rockdata.net/zh-cn/tutorial/prometheus-custom-metrics/
https://www.linux.org.ru/forum/general/15376989