zabbix5.0监控postgresql13.6

发布时间 2023-12-22 15:40:47作者: xuege

环境描述

  • zabbix版本:5.0.12
  • PG版本:13.6

监控需求

  • 监控postgresql运行情况(非核心业务,主要监控挂没挂)
  • 监控流复制运行情况

如有异常,则告警

具体步骤

  1. 在postgresql上创建监控用户, 授权, 并配置pg_hba.conf 文件允许通过该用户去访问
  2. 到zabbix的网站上下载监控脚本
  3. 将脚本部署在postgresql数据库服务器中,并根据实际情况调整zabbix agent脚本
  4. zabbix server中导入模板(步骤2中里的文件有)
  5. 将模板关联到被监控的主机(postgresql数据库服务器)
  6. 重启zabbix agent

实际操作

(1)数据库中创建监控用户, 并配置`pg_hba.conf`

postgres=# CREATE USER zbx_monitor WITH PASSWORD 'zbx_8643' INHERIT;
CREATE ROLE
postgres=# GRANT pg_monitor TO zbx_monitor;
GRANT ROLE
$ vim pg_hba.conf 
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust

(2)到https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/postgresql?at=refs%2Ftags%2F5.0.12 下载软件下来(只要templates/db/postgresql)

# ls -alrt
total 184
-rw-r--r--  1 root root 142049 May 24  2021 template_db_postgresql.xml			# 模板文件,用于导入zabbix server
-rw-r--r--  1 root root   3109 May 24  2021 template_db_postgresql.conf			# zabbix agent配置文件
-rw-r--r--  1 root root  33964 May 24  2021 README.md                           # 本文所参考的文档
drwxr-xr-x  2 root root   4096 May 24  2021 postgresql							# zabbix agent主要的执行脚本

(3)我这里的zabbix_agent是通过yum安装的,配置文件路径在/etc/zabbix

# tree -L 2 /etc/zabbix/
.
├── postgresql			# 这个是上面的postgresql文件夹, 我放在了这里,后面的conf需要对应修改
│   ├── pgsql.bgwriter.sql
│   ├── pgsql.cache.hit.sql
│   ├── pgsql.config.hash.sql
│   ├── pgsql.connections.prepared.sql
│   ├── pgsql.connections.sql
│   ├── pgsql.connections.sum.sql
│   ├── pgsql.dbstat.sql
│   ├── pgsql.dbstat.sum.sql
│   ├── pgsql.discovery.db.sql
│   ├── pgsql.frozenxid.sql
│   ├── pgsql.locks.sql
│   ├── pgsql.ping.time.sql
│   ├── pgsql.query.time.sql
│   ├── pgsql.replication.lag.sql
│   ├── pgsql.replication.recovery_role.sql
│   ├── pgsql.replication.status.sql
│   ├── pgsql.scans.sql
│   ├── pgsql.transactions.sql
│   ├── pgsql.uptime.sql
│   └── pgsql.wal.stat.sql
├── server_info
├── zabbix_agentd.conf
├── zabbix_agentd.d
│   ├── server_info.conf
│   └── template_db_postgresql.conf		# conf放在了这里
└── zabbix_agentd.log
将template_db_postgresql.conf 放在zabbix_agentd.d 下, 
# cat template_db_postgresql.conf  | more 
UserParameter=pgsql.bgwriter[*], psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"

UserParameter=pgsql.connections.sum[*], psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"
这里可以看到调用的脚本目录是/var/lib/zabbix/postgresql, 我这里想要把步骤2的postgresql放在/etc/zabbix/下,因此需要修改一下这个配置文件。
# cd /etc/zabbix/zabbix_agentd.d/
# sed -i 's#/var/lib/zabbix#/etc/zabbix#g' template_db_postgresql.conf
另外,template_db_postgresql.conf里是通过psql去执行的, 我这里是源码安装的postgresql ,并且zabbix user 是nologin, 我不想改zabbix的环境变量,因此这里需要改成绝对路径,否则将会报错“psql command not found”
改完后的文件大体如下:
# cat template_db_postgresql.conf  | more 
UserParameter=pgsql.bgwriter[*], /postgresql/pg13/bin/psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/etc/zabbix/postgresql/pgsql.bgwriter.sql"
# chown -R zabbix.zabbix /etc/zabbix

(4)将template_db_postgresql.xml 导入zabbix server中。略

(5)将模板关联到被监控主机。模板名称为`Template DB PostgreSQL`。略
可以看到已经正常工作,如果报错的话,到item那里看具体报什么错。
image

(6)重启zabbix-agent

# systemctl restart zabbix-agent.service 

观察监控是否正常。步骤3如果不配置好路径,可能会报找不到psql,如下图所示:
image

也可以修改模板,去掉一些自己觉得不需要的监控指标。