昨天开发那边给了一个需求,每隔一段时间查询一下数据库某表中的数据是否在最近更新,让我这边做一个监控信息收集
一、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页面侧配置
创建模板

创建发现规则

 注意键值别填错了,键值是ZHJX_Port_Status.conf 文件中的query-yuliang-data
点击下面的测试按钮,数据成功显示出来了

创建监控项原型

 这里的query-yuliang-data[{#RESULT_STATUS}]对应.conf文件中的query-yuliang-data[*]
创建触发器类型

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

配置完成!
三、检查配置项是否生效
点击最新数据,查看有没有出现配置项

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

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

四、配置思路总结
1、总结配置文件就两个:
监控脚本:check_yuliang_data.py
zabbix脚本引入文件:ZHJX_Port_Status.conf
2、页面配置也是两项最主要的
模板-自动发现规则:
1、监控项原型
2、触发器类型




















