Zabbix学习资源由浅入深 关于我们 联系我们 加入我们
5

Zabbix 5.0 监控 PostgreSQL 数据库


图片

张思德

------------------

Zabbix社区签约专家


  • ZbxTable是由张思德先生自主开发的开源的Zabbix报表系统,支持分析和导出,还拓展了GraphTree的功能,对统计消息数据是强有力的补充。

  • 2017-2019 Zabbix 峰会演讲嘉宾,演讲部分建议被Zabbix新版本采用。

  • 2020Zabbix峰会演讲嘉宾,主题《Zabbix 5.0 & Timescale DB》、Workshop实践操作课讲师。


 文章简介


Zabbix 支持 PostgreSQL 作为后台数据库,相比 Mysql,PostgreSQL 可加载 timescaledb 插件,提升 Zabbix 性能,同时还支持数据的压缩,因此对于 PostgreSQL 数据库的监控是非常需要的。使用 zabbix5.0 自带的数据库模版及脚本即可实现对 PostgreSQL 的监控。


 一.PostgreSQL 配置 


 1.创建用户


需要在 PostgreSQL 数据库建立监控专用的用户,由于 PostgreSQL 版本不同相关命令会有一定差别,创建一个 zbx_monitor 用户密码为 zbx_monitorpwd123


PostgreSQL 10 以上版本

image.png

PostgreSQL 9.6 版本及以下

dea8dac005cd5be6db23094f9bfae27.png

2.配置访问策略


编辑 pg_hba.conf 文件,并添加如下内容

df257cfb9083d0a679e3235be7ba301.png

如果 Zabbix agent 和 PostgreSQL 在不同机器,需要配置密码文件,需要创建.pgpass 文件,并存放在 zabbix 用户的家目录下,内容如下:

4bd763424041d22d8843fc56081d891.png

配置好之后记得重启 PostgreSQL 服务


 二.Zabbix 配置 

1.添加主机


添加主机之后,关联系统自带的 Template DB PostgreSQL 模版

图片

配置如以下主机宏

图片图片

更多宏的配置及说明请点击查看官网说明


2.配置 Agent


PostgreSQL 监控需要在 Zabbix Agent 端添加脚本文件。


点击下载监控脚本

下载到 Agent 所在机器,添加 Postgresql 监控 SQL 文件

0776237b3b4c65f864984d36ac61758.png

添加 UserParameter 文件到 Agent 的 zabbix_agentd.d 目录(根据实际情况修改)


cp -r postgresql/template_db_postgresql.conf/etc/zabbix/zabbix_agentd.d/

并修改 zabbix_agentd.conf 文件,确保 UserParameter 被加载

21ed04a6ce1254d0a1a66d0b1f25a43.png

重启 Zabbix Agent


3.脚本 Bug 修复


正常添加后,已经可以看到部分数据,观察 Zabbix Server 日志,会发现如下错误信息


29128:20200702:014602.152 item "Zabbix server:pgsql.dbstat.blks_read.rate["zabbix"]" became not supported: Preprocessing failed for: psql:/var/lib/zabbix/postgresql/pgsql.dbstat.sql:17: ERROR:field name must not be null1. Failed: cannot extract value from json by path "$['zabbix'].blks_read": cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'psql:/var/lib/zabbix/postgresql/pgsql.dbstat.sql:17: ERROR:field name must not be null'

观察 PostgreSQL 监控指标,确实有部分 item 显示为 unsupported 状态,查询资料后发现是由于 sql 脚本问题,修改 sql 文件

eecfa6756781200835e836aee168965.png


修改为如下内容


sql
SELECT json_object_agg(datname, row_to_json(T)) FROM (SELECT datname,numbackends,xact_commit,xact_rollback,blks_read,blks_hit,tup_returned,tup_fetched,tup_inserted,tup_updated,tup_deleted,conflicts,temp_files,temp_bytes,deadlocksFROM pg_stat_databaseWHERE datname is not NULL) T

等待一会就会发现如下日志


29128:20200702:104902.227 item "Zabbix server:pgsql.dbstat.tup_deleted.rate["zabbix"]" became supported
29128:20200702:104902.227 item "Zabbix server:pgsql.dbstat.tup_fetched.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.tup_inserted.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.tup_returned.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.tup_updated.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.xact_commit.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.xact_rollback.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.temp_bytes.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.blks_read.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.conflicts.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.blks_hit.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.temp_files.rate["zabbix"]" became supported 29128:20200702:104902.228 item "Zabbix server:pgsql.dbstat.deadlocks.rate["zabbix"]" became supported

采集正常,此 bug 已提交官方[ZBX-18099]


 三.最终效果 

基本信息


图片自动发现数据库,监控数据库信息
图片

点击加入社区成长计划


图片





2023-04-24