zabbix的PostgreSQL监控模板中文环境采集问题处理
zabbix的PostgreSQL监控模板Template DB PostgreSQL采集适配的英文环境,在中文环境中存在适配问题,本文通过Status: Ping键值的采集修复,指导如何进行处理。
一、问题描述
在操作系统默认为中文的环境下,PostgreSQL监控模板Template DB PostgreSQL采集PostgreSQL数据库数据时,数据库的Ping状态值为0,显示PostgreSQL:服务关闭,但数据库实际上运行良好。
1、检查数据库运行状态
数据库运行在容器中,检查容器状态:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a3db5101e1d anolisos8-with-postgres-17.4-timescale-2.17.2:v1 "/sbin/init" 2 days ago Up 23 hours 0.0.0.0:5432->5432/tcp pgtsdb
容器运行良好
2、检查数据库端口
# telnet 127.0.0.1 5432
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
数据库端口正常。
3、核查监控项配置
检查Status.Ping监控项,键值为:
pgsql.ping["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.DB}"]
4、检查zabbix客户端对应键值检查项
# cat /etc/zabbix/zabbix_agentd.conf.d/template_db_postgresql.conf|grep pgsql.ping
UserParameter=pgsql.ping[*], pg_isready -h "$1" -p "$2" -U "$3" -d "$4"
可见就是执行pg_isready指令检查
5、执行pg_isready指令测试
# pg_isready -U zabbix -h 127.0.0.1 -d postgres
127.0.0.1:5432 - 接受连接
反馈结果为中文“接受连接”。
6、检查语言环境
# echo $LANG
zh_CN.UTF-8
7、切换为英文语言环境测试
# export LANG=en.UTF-8
# echo $LANG
en.UTF-8
# pg_isready -U zabbix -h 127.0.0.1 -d postgres
127.0.0.1:5432 - accepting connections
8、核对监控项预处理
可以看到, 正则表达式/accepting connections/
是匹配结果中的"accepting connections
",存在,search
方法就会返回 1;如果不存在,则返回 0。而中文环境下,就会出现匹配失败始终返回0的情况。
二、问题处理
修改预处理的正则表达式为
正则表达式"/accepting connections|接受连接/"
会同时匹配两个字符串中的任意一个,只要其中一个存在,search
方法就会返回大于 0 的索引值,最终返回 1;如果两个都不存在,则返回 0。
经过修改,问题得到修复,数据库测试恢复正常。