zabbix5.0监控postgresql13.6
环境描述
- zabbix版本:5.0.12
- PG版本:13.6
监控需求
- 监控postgresql运行情况(非核心业务,主要监控挂没挂)
- 监控流复制运行情况
如有异常,则告警
具体步骤
- 在postgresql上创建监控用户, 授权, 并配置
pg_hba.conf
文件允许通过该用户去访问 - 到zabbix的网站上下载监控脚本
- 将脚本部署在postgresql数据库服务器中,并根据实际情况调整zabbix agent脚本
- zabbix server中导入模板(步骤2中里的文件有)
- 将模板关联到被监控的主机(postgresql数据库服务器)
- 重启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那里看具体报什么错。
(6)重启zabbix-agent
# systemctl restart zabbix-agent.service
观察监控是否正常。步骤3如果不配置好路径,可能会报找不到psql,如下图所示:
也可以修改模板,去掉一些自己觉得不需要的监控指标。