【zabbix】PostgreSQL表信息查询收集监控

        【zabbix】PostgreSQL表信息查询收集监控_第1张图片

        昨天开发那边给了一个需求,每隔一段时间查询一下数据库某表中的数据是否在最近更新,让我这边做一个监控信息收集

一、agent linux侧配置

        这边目前就直接在zabbix上实现,首先就是脚本,我用python2实现

脚本名:check_yuliang_data.py 脚本路径:/etc/zabbix/zabbix_agent2.d

#!/usr/bin/python
import os
import json
from datetime import datetime
import calendar

DB_NAME = "bscreen"
DB_USER = "postgres"

QUERY_STATUS = """
    SELECT
        CASE WHEN count(*) = 0 THEN 0 ELSE 1 END AS result_status
    FROM bscreen.bigscreen.reservoir_real t1
    WHERE t1.time > now() + '-12 hour';
"""
QUERY_LATEST_TIME = """
    SELECT max(time) as latest_data_time
    FROM bscreen.bigscreen.reservoir_real;
"""

data = {}

with os.popen('sudo -u "{}" psql -d "{}" -U "{}" -t -c "{}" 2>/dev/null'.format(DB_USER, DB_NAME, DB_USER, QUERY_STATUS)) as f:
    result_status = f.read().strip()

with os.popen('sudo -u "{}" psql -d "{}" -U "{}" -t -c "{}" 2>/dev/null'.format(DB_USER, DB_NAME, DB_USER, QUERY_LATEST_TIME)) as f:
    latest_data_time1 = f.read().strip()

latest_data_time2 = datetime.strptime(latest_data_time1, '%Y-%m-%d %H:%M:%S')
latest_data_time3 = latest_data_time2.replace(microsecond=0)
latest_data_time4 = calendar.timegm(latest_data_time3.utctimetuple())
latest_data_time = datetime.fromtimestamp(latest_data_time4).strftime('%Y-%m-%d %H:%M:%S')


data['{#RESULT_STATUS}'] = result_status
data['{#LATEST_DATA_TIME}'] = latest_data_time
jsonStr = json.dumps({'data': [data]}, sort_keys=True, indent=4)
print(jsonStr)

        脚本里面定义了两个键{#RESULT_STATUS}、{#LATEST_DATA_TIME},方便在zabbix上显示时能直观的观看

创建zabbix引入脚本的配置文件:ZHJX_Port_Status.conf  路径:/etc/zabbix/zabbix_agent2.d

UserParameter=query-yuliang-data[*],/usr/bin/python /etc/zabbix/zabbix_agent2.d/check_yuliang_data.py

        以上两个脚本布置完成后,需要开放psql命令免密
 

# 开启写权限
chmod u+w /etc/sudoers
# 编辑
vim /etc/sudoers
#加入psql免密信息
zabbix  ALL=(ALL)       NOPASSWD: /usr/bin/psql
# 关闭写权限
chmod u-w /etc/sudoers

然后

# 重启zabbix-agent2
systemctl restart zabbix-agent2

再然后

# 在服务端测试agent端刚刚配置的.conf文件中的键(query-yuliang-data)
[root@docker-zabbix ~]# zabbix_get -s '172.16.35.53' -p 10050 -k query-yuliang-data
# 这是成功后的结果
{
    "data": [
        {
            "{#LATEST_DATA_TIME}": "2023-05-04 09:00:00",
            "{#RESULT_STATUS}": "0"
        }
    ]
}

好了,linux这边的配置完成了!

二、server zabbix页面侧配置

创建模板

【zabbix】PostgreSQL表信息查询收集监控_第2张图片

 创建发现规则

【zabbix】PostgreSQL表信息查询收集监控_第3张图片

 注意键值别填错了,键值是ZHJX_Port_Status.conf 文件中的query-yuliang-data【zabbix】PostgreSQL表信息查询收集监控_第4张图片

 点击下面的测试按钮,数据成功显示出来了

【zabbix】PostgreSQL表信息查询收集监控_第5张图片

 创建监控项原型

【zabbix】PostgreSQL表信息查询收集监控_第6张图片

 这里的query-yuliang-data[{#RESULT_STATUS}]对应.conf文件中的query-yuliang-data[*]【zabbix】PostgreSQL表信息查询收集监控_第7张图片

 创建触发器类型

 【zabbix】PostgreSQL表信息查询收集监控_第8张图片

 连接模板,找到目标机器,把刚刚创建的模板链接上

【zabbix】PostgreSQL表信息查询收集监控_第9张图片

配置完成!

三、检查配置项是否生效

点击最新数据,查看有没有出现配置项

【zabbix】PostgreSQL表信息查询收集监控_第10张图片

 这里可以看见,配置项已经有了,这里三处数据都生效了

【zabbix】PostgreSQL表信息查询收集监控_第11张图片

 点进去看看数据,如果没有数据,就等一会,有个生效时间,这里三处数据都生效了

【zabbix】PostgreSQL表信息查询收集监控_第12张图片

 四、配置思路总结

1、总结配置文件就两个:

 监控脚本:check_yuliang_data.py

zabbix脚本引入文件:ZHJX_Port_Status.conf

2、页面配置也是两项最主要的

模板-自动发现规则:

1、监控项原型

2、触发器类型

你可能感兴趣的:(postgresql,zabbix,数据库,python)