zabbix深入自定义监控
zabbix多条件触发
监控内存可用的百分比
UserParameter=mem.available,free -m|awk 'NR==2{print $NF/$2*100}'
目前属于单条件触发器,因为内存低于30%就报警了,在生产中,我们应该是当内存低于30%并且占用了swap空间,然后再报警。
UserParameter=swap.available,free -m|awk '/^Swap/{print $NF/$2*100}'
[root@sb_wzj web]# zabbix_get -s 172.16.1.7 -k swap.available
and #并且
or #或者
last() #比对最新的值
avg() #平均值
diff() #比对上一次文件的内容
nodata() #收不不到数据进行报警nodata(5m)
(5m) #表示最近5分钟得到值
(#5) #表示最近5次得到的值
zabbix 5.x以上告警
故障告警
<head>
<style type="text/css">
table .guzhang {color: red;}
</style>
</head>
<body>
<img src="https://blog.driverzeng.com/zenglaoshi/sos.png" alt="">
<table border="3" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
<tr class="guzhang" bgcolor="#0C1B3D" ><th colspan=2>
{TRIGGER.STATUS} 故障!!!故障!!!
<div>😂 😂 😂</div>
</tr>
<tr >
<td bgcolor="#F9B602" width="20%">告警主机</td>
<td bgcolor="#F9B602">{HOSTNAME1}</td>
</tr>
<tr >
<td bgcolor="#F9B602">告警别名</td>
<td bgcolor="#F9B602">{HOST.NAME} </td>
<tr >
<tr >
<td bgcolor="#F9B602">告警地址</td>
<td bgcolor="#F9B602">{HOST.IP}</td>
</tr>
<tr>
<td bgcolor="#F9B602">告警时间</td>
<td bgcolor="#F9B602">{EVENT.DATE} {EVENT.TIME}</td>
</tr>
<tr>
<td bgcolor="#F9B602">告警等级</td>
<td bgcolor="#F9B602">{TRIGGER.SEVERITY}</td>
</tr>
<tr>
<td bgcolor="#F9B602">告警信息</td>
<td bgcolor="#F9B602">{TRIGGER.NAME}</td>
</tr>
<tr>
<td bgcolor="#F9B602">告警项目</td>
<td bgcolor="#F9B602">{TRIGGER.KEY1}</td>
</tr>
<tr >
<td class='guzhang2' bgcolor="#FF3333">问题详情</td>
<td class='guzhang3' bgcolor="#FF3333">{ITEM.NAME}: {ITEM.VALUE} 😈 😈 😈</td>
</tr>
<tr>
<td bgcolor="#F9B602">当前状态</td>
<td bgcolor="#F9B602">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
</tr>
<tr>
<td bgcolor="#F9B602">事件ID</td>
<td bgcolor="#F9B602">{EVENT.ID}</td>
</tr>
</table>
</body>
恢复告警
<head>
<style type="text/css">
table .guzhang {
color: red;
}
</style>
</head>
<body>
<img src="https://blog.driverzeng.com/zenglaoshi/huifu.png" alt="">
<table border="1" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
<tr bgcolor="#49c208"><th colspan=2>
{TRIGGER.STATUS} 哈哈哈哈哈哈,好了
<div>😀 😀 😀</div>
</tr>
<tr >
<td bgcolor="lightgreen" width="20%">恢复主机</td>
<td bgcolor="yellow">{HOSTNAME1}</td>
</tr>
<tr>
<td bgcolor="lightgreen">恢复别名</td>
<td bgcolor="yellow">{HOST.NAME} </td>
<tr >
<td bgcolor="lightgreen">恢复地址</td>
<td bgcolor="yellow">{HOST.IP}</td>
</tr>
<tr>
<td bgcolor="lightgreen">恢复时间</td>
<td bgcolor="yellow">{EVENT.DATE} {EVENT.RECOVERY.TIME}</td>
</tr>
<tr>
<td bgcolor="lightgreen">恢复等级</td>
<td bgcolor="yellow">{TRIGGER.SEVERITY}</td>
</tr>
<tr>
<td bgcolor="lightgreen">恢复信息</td>
<td bgcolor="yellow">{TRIGGER.NAME}</td>
</tr>
<tr>
<td bgcolor="lightgreen">恢复项目</td>
<td bgcolor="yellow">{TRIGGER.KEY1}</td>
</tr>
<tr >
<td bgcolor="#49c208">恢复详情</td>
<td bgcolor="#49c208">{ITEM.NAME}: {ITEM.VALUE} ⚡ ⚡ ⚡</td>
</tr>
<tr>
<td bgcolor="lightgreen">当前状态</td>
<td bgcolor="yellow">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
</tr>
<tr>
<td bgcolor="lightgreen">事件ID</td>
<td bgcolor="yellow">{EVENT.ID}</td>
</tr>
</table>
</body>
zabbix的自愈模式
有些时候,我们的服务宕机了,或者有些服务停掉了,那么我们可以先尝试让他启动,看是否能起的来,为了不影响用户的体验,先把服务起起来,然后再去排查,是什么原因故障的。
那么此时我们就需要用到zabbix的自愈模式,这个...叫起来很好听,说白了,就是在让zabbix-server通过远程执行命令的方式,在agent上执行命令,启动服务。
#修改配置文件
[root@web01 zabbix_agentd.d]# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
zabbix告警升级机制
计算方式:
1)开始于 ,这个是相对一但触发监控,则立即发送消息
2)1-2步骤是给运维组发送消息,每隔5分钟发送一次,总共2个步骤,所以发送2次
3)3-4步骤是给运维经理组发送消息,每隔5分钟发送一次,总共2个步骤,所以发送2次
4)4-5步骤是给运维总监组发送消息,每隔5分钟发送一次,总共2个步骤,所以发送2次
5)每次的开始时间是如何计算的呢,第一个立即开始:
1-2,3-4,4-5动作时间间隔是5分钟,所以在触发告警发送时间计算是5m+5m+5m=15m
聚合图形
zabbix微信报警
# 1.安装python的pip
[root@sb_wzj web]# yum install python-pip -y
# 2.安装python requests库
[root@sb_wzj ~]# pip2.7 install requests==2.27 -i https://pypi.douban.com/simple/
# 3.进入zabbix存放告警脚本目录
[root@sb_wzj ~]# cd /usr/lib/zabbix/alertscripts/
# 4.编写微信告警脚本
[root@sb_wzj alertscripts]# vim weixin.py
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b3f00bb1-3198-4491-9429-a9fbe5444e23" #这个是企业微信机器人生成的webhook地址,修改为你的即可。
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
# 5.添加执行权限
[root@sb_wzj alertscripts]# chmod +x weixin.py
微信群添加群机器人