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