暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

PG 与 PGA 的整合(Pormethes + Grafana + Altermanager )

原创 大表哥 2022-09-19
4286

Image.png

大家好, 今天和大家分享的是PG数据库与监控平台PGA (Pormetheus + Grafana + Altermanager ) 的整合。

本文不涉及到 Pormetheus + Grafana + Altermanager 基础平台的搭建, 如果需要可以自行网上寻找相关的视频和文章等等。

相信很多公司都在用 Pormetheus + Grafana + Altermanager 这套监控平台, DBA 作为运维中团队中重要的一员,自然也会把自己运维的数据库像是 oracle,mysql, mongo, postgres 等等
加入到公司的运维平台中。

无论是哪种数据库与监控平台的整合都是类似的步骤:
1)下载并部署相应的数据库的 exporter
2)网上找到相应的监控大盘 dashboard grafana 模板, 或者自定义开发设计一个Dashboard
3)altermanager 中 配置相应的监控指标,配置邮件或者dingding 方式发送报警信息。

下面我们就以PG为例,走一下这一整套配置流程:

我们先从 grafana 的网站上,选定 postgres SQL 的 exporter: https://grafana.com/grafana/dashboards/12485-postgresql-exporter/

Image.png

1)下载 postgres_exporter : https://github.com/prometheus-community/postgres_exporter/releases/tag/v0.11.1

Image.png

2)解压下载文件

tar -xvf postgres_exporter-0.11.1.linux-amd64.tar.gz

3)启动pg_exporter:

这个你需要配置指定数据库的高权限的账号,如果你不想用 superuser 账户,还可以安装readme 文档上的提示,创建一个普通的账户,并grant 一些必要的赋权。

Image.png

我们这里采用超级账号进行连接,

启动脚本如下: run_postgres_exporter_2002.sh

需要指定2个环境变量:
PG_EXPORTER_WEB_LISTEN_ADDRESS: 指标采集服务暴露的web端口
DATA_SOURCE_NAME: 数据库的连接信息

启动的时候有一个选项是 --extend.query-path 这个会额外收集一些数据库采集指标的信息

queries.yaml 里面有一些额外采集的SQL逻辑,可以从官网下载: https://github.com/prometheus-community/postgres_exporter/blob/master/queries.yaml

–extend.query-path 这个选项对于 exporter 来说不是必须的,但是一些grafana 的dashbord 里面有一些展示会依赖于额外采集的数据库指标。

被监控的PG实例本身话,需要安装一些必要监控的extension : pg_stat_statements, 否则PG_exporter 启动的日志里会报错

#!/bin/bash set -x export PG_EXPORTER_WEB_LISTEN_ADDRESS=":9102" export DATA_SOURCE_NAME="postgresql://postgres:*******@127.0.0.1:2002/postgres?sslmode=disable" /opt/monitor/new_pg_exporter/postgres_exporter --extend.query-path=/opt/monitor/queries.yaml >> exporter2002.log 2>&1 &

正常启动之后, 访问 web 地址 会看到各种采集的数据库的指标:http://10.67.38.50:9102/metrics

sh run_postgres_exporter_2002.sh

Image.png

PG exporter 启动成功后, 我们把 exporter 的相关信息,集成到 prometheus 中:

添加到 ${PROMETHEUS_HOME}/dashboard/PostgresDB/postgres.json

{ "targets": [ "10.67.38.50:9102" ], "labels": { "env": "UAT", "cluster_name": "9102", "cluster_type": "masterSlave", "domain_name": "wqdcsrv3352.cn.infra", "host_name": "wqdcsrv3352.cn.infra", "host_ip": "10.67.38.50", "instancename": "10.67.38.50:9102", "Instance": "10.67.38.50:9102", "application_support": "DBA", "application_notes": "pg_sync" } }

我们的premetheus 配置了热启动加载配置文件的选项: --web.enable-lifecycle , 无需重启,会自动发现我的新加的target:

Image.png

下一步,我们下载PG export 相关的Dashboard : https://grafana.com/grafana/dashboards/12485-postgresql-exporter/

Image.png

下载dashboard 模板成功后,我们 import 进入到 grafana 中:

Image.png

我们来展示一下导入成功的数据库监控大盘:

Image.png

Image.png

接下来,我们从网上找到PG的监控alerts 的模板,个人推荐这个网站: https://awesome-prometheus-alerts.grep.to/rules.html
这个网站上的模板十分齐全,各种数据库,中间件什么的都有。

Image.png

我们找到 postgres 对应的部分:

Image.png

一共有20个PG监控的rule:

2.2.1. Postgresql down 2.2.2. Postgresql restarted 2.2.3. Postgresql exporter error 2.2.4. Postgresql table not auto vacuumed 2.2.5. Postgresql table not auto analyzed 2.2.6. Postgresql too many connections 2.2.7. Postgresql not enough connections 2.2.8. Postgresql dead locks 2.2.9. Postgresql high rollback rate 2.2.10. Postgresql commit rate low 2.2.11. Postgresql low XID consumption 2.2.12. Postgresql high rate statement timeout 2.2.13. Postgresql high rate deadlock 2.2.14. Postgresql unused replication slot 2.2.15. Postgresql too many dead tuples 2.2.16. Postgresql configuration changed 2.2.17. Postgresql SSL compression active 2.2.18. Postgresql too many locks acquired 2.2.19. Postgresql bloat index high (> 80%) 2.2.20. Postgresql bloat table high (> 80%)

我们可以根据自己数据库的监控要求,选择性的把这些rule 配置到我们的 alter manager 中:

vi postgres_alerts.yml groups: - name: postgres_alerts rules: - alert: PostgresqlDown expr: pg_up == 0 for: 0m labels: severity: critical annotations: summary: Postgresql down (instance {{ $labels.instance }}) description: "Postgresql instance is down\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" ... ... ...

我们可以通过prometheus 的web 页面上查看我们配置的rule :

Image.png

我们关闭测试的 PG 实例,触发报警,测试一下:

INFRA [postgres@wqdcsrv3352 ~]# /opt/postgreSQL/pg12/bin/pg_ctl -D /data/postgreSQL/2002/data stop waiting for server to shut down.... done server stopped

测试可以收到邮件:

Image.png

Have a fun 🙂 !

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论