数据库是优先级很高的特殊应用服务,prometheus+grafana的搭配是目前生产环境的标准答案,因此本文搭建pg数据库的监控告警框架(监控和告警要分开,监控就是面板看,告警是要通过某种通讯方式通知到维护人员)
目录
监控的目的是通过展示面板方式来实现对目标的状态或性能观察,由于其要用到历史数据,所以需要历史+实时数据来实现,也就是时序数据库来满足要求,prometheus内置TSDB时序库,并且能够根据exporter拉取监控指标;

有两种方式进行下载,一种是在本地下载tar包后上传到linux服务器,另一种是直接在linux服务器上通过wget命令下载;
- https://github.com/prometheus/prometheus/releases/tag/v2.37.1
- wget https://github.com/prometheus/prometheus/releases/download/v2.22.0-rc.0/prometheus-2.22.0-rc.0.linux-386.tar.gz
- ---解压
- tar -zxvf prometheus-2.37.1.linux-amd64.tar.gz
- cd prometheus-2.37.1.linux-amd64
- ---直接启动
- ./prometheus --config.file prometheus.yml
默认是9090端口,这里不启动,因为后续的grafana和exporter以及postgres还没有准备就绪;
这里安装的是postgresql 9.6版本,下载对应的依赖rpm包后:
- rpm -ivh postgresql96*.rpm
- ---------初始化
- cd /usr/pgsql-9.6/bin/
- ./postgresql96-setup initdb
- -------- 自启动和启动
- systemctl enable postgresql-9.6.service
- systemctl start postgresql-9.6
-
- -----------修改 pba 访问控制(生产不能这样搞,为了后面的exporter)
- vi /var/lib/pgsql/9.6/data/pg_hba.conf
- host all all 127.0.0.1/32 trust
根据grafana的官网指导,直接下载rpm包后安装就是service服务:
- wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.1.3-1.x86_64.rpm
- sudo yum install grafana-enterprise-9.1.3-1.x86_64.rpm
rpm安装后,启动服务 3000 端口
systemctl start grafana-server
原则上来讲,主机的exporter和实例的exporter都要用,这里以pg实例的exporter为例,下载二进制文件后,做成linux的服务,首先将exporter 放到 /opt 目录下,创建 postgres_exporter.env 文件,如下:
- # postgres_exporter.env
- DATA_SOURCE_NAME="postgresql://postgres:postgres@127.0.0.1:5432/?sslmode=disable"
做成postgres_exporter服务:sudo vim /etc/systemd/system/postgres_exporter.service:
- [Unit]
- Description=Prometheus exporter for Postgresql
- Wants=network-online.target
- After=network-online.target
-
- [Service]
- User=postgres
- Group=postgres
- WorkingDirectory=/opt/yzg
- EnvironmentFile=/opt/yzg/postgres_exporter.env
- ExecStart=/opt/yzg/postgres_exporter
- Restart=always
-
- [Install]
- WantedBy=multi-user.target
启动postgres_exporter服务
- systemctl start postgres_exporter.service
-
-
- ● postgres_exporter.service - Prometheus exporter for Postgresql
- Loaded: loaded (/etc/systemd/system/postgres_exporter.service; disabled; vendor preset: disabled)
- Active: active (running) since Tue 2022-09-13 14:05:01 CST; 7s ago
- Main PID: 47572 (postgres_export)
- Tasks: 5
- Memory: 6.5M
- CGroup: /system.slice/postgres_exporter.service
- └─47572 /opt/yzg/postgres_exporter
-
- Sep 13 14:05:01 localhost.localdomain systemd[1]: Started Prometheus exporter for Postgresql.
- Sep 13 14:05:01 localhost.localdomain postgres_exporter[47572]: time="2022-09-13T14:05:01+08:00" level=info msg="Starting Server: :9187" source="postgres_exporter.go:1850"
查看端口状态:
netstat -lntp|grep 9187
直接在grafana的官网检索找排名最高的监控模板:grafana的dashboards

启动Prometheus和grafana后,在grafana中增加数据源,选中启动的Prometheus,如下:

在grafana中import下载postgres_exporter的模板,也就是个json文件,在import中会指定数据源是上一步骤中Prometheus的数据源;

手动插入psql部分数据后,观察面板:
provisioning配置 监控模块作为通用模块,在真实的生产环境中监控面板是跟随生产系统组件部署而提前预置进去,完成Prometheus和grafana后,把已经存在的数据源和面板json配置好,通过固定的URL就能够访问监控面板,在大部分场景监控告警一般要内嵌到生产系统,具体来讲监控页面以iframe形式内嵌到系统的页面中,告警的表在系统中也需要落库。
grafana的provisoning预配置的默认路径是/etc/grafana/provisioning/,其下有datasources和dashboards两个子目录,分别存放grafana数据源和监控面板配置。
告警使用alertmanager组件,或直接使用grafana的alertmanager插件,建议使用alertmanager对监控信息进行分类分组去重完成数据的清洗后通过webhook发送到定制化开发的监控信息存储接口,完成监控信息的存储与持久化;
promtail+loki+grafana的组合与经典的日志搜集存储展示组合ELK很类似,promtail跟logstash一样在主机上对日志进行搜集,loki类比ES对数据进行日志数据的存储和标签化,grafana做数据的展示,promtail和loki配置简单这里不赘述,loki结合grafana可以完成日志的展示;