Prometheus 和 Grafana 监控 PostgreSQL
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
浙公网安备 33010602011771号