专栏 | Zabbix 5.0 监控 PostgreSQL 数据库

举报
Zabbix中国 发表于 2021/04/28 10:29:53 2021/04/28
【摘要】 本文作者:张思德ZbxTable是由张思德先生自主开发的开源的Zabbix报表系统,支持分析和导出,还拓展了GraphTree的功能,对统计消息数据是强有力的补充。2017-2019 Zabbix 峰会演讲嘉宾,演讲部分建议被Zabbix新版本采用。2020Zabbix峰会演讲嘉宾,主题《Zabbix 5.0 & Timescale DB》、Workshop实践操作课讲师。 文章简介Zabb...

本文作者:张思德
  • 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 以上版本

su - postgres
psql
CREATE USER zbx_monitor WITH PASSWORD 'zbx_monitorpwd123' INHERIT;
GRANT pg_monitor TO zbx_monitor;

PostgreSQL 9.6 版本及以下

su - postgres
psql
CREATE USER zbx_monitor WITH PASSWORD 'zbx_monitorpwd123';
GRANT SELECT ON pg_stat_database TO zbx_monitor;
ALTER USER zbx_monitor WITH SUPERUSER;


2.配置访问策略

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

host all zbx_monitor 127.0.0.1/32 trust
host all zbx_monitor 0.0.0.0/0 md5
host all zbx_monitor ::0/0 md5

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

<REMOTE_HOST1>:5432:postgres:zbx_monitor:<PASSWORD>

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

 二.Zabbix 配置 

1.添加主机

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

图片

配置如以下主机宏

图片
图片


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


2.配置 Agent

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

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

bash
wget https://dl.cactifans.com/zabbix/postgresql.tar.gz
mkdir -p /var/lib/zabbix/
tar zxvf postgresql.tar.gz
cp -r postgresql/postgresql/ /var/lib/zabbix/

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

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


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

Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf


重启 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 null
1. 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 文件

vi /var/lib/zabbix/postgresql/pgsql.dbstat.sql


修改为如下内容

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,
                        deadlocks
        FROM pg_stat_database
        WHERE 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]

 三.最终效果 

基本信息

图片

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

图片
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。