Zabbix微信告警
企业微信注册地址:https://work.weixin.qq.com
登录进来的首页
设置总部门名称添加成员
创建应用
收集信息
- 部门ID
- AgentId和Secret ID
- 企业ID(corpid)
企业微信只要这些信息拿到手就可以了
我的zabbix_server配置如下
[root@133 ~]# cat /usr/local/etc/zabbix_server.conf|grep ^[^#]
LogFile=/usr/local/etc/logs/zabbix_server.log
PidFile=/tmp/zabbix_server.pid
DBHost=192.168.100.133
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix123!
DBSocket=/var/lib/mysql/mysql.sock
Timeout=4
AlertScriptsPath=/usr/local/etc/scripts
LogSlowQueries=3000
Include=/usr/local/etc/zabbix_server.conf.d/*.conf
StatsAllowedIP=127.0.0.1
# 脚本目录和日志目录没有要创建
[root@133 ~]# cd /usr/local/etc
[root@133 etc]# mkdir scripts/
[root@133 etc]# mkdir logs
[root@133 etc]# touch logs/zabbix_server.log
[root@133 etc]# chown -R zabbix.zabbix scripts/ logs/
[root@133 etc]# ll
drwxr-xr-x. 2 zabbix zabbix 31 6月 11 18:25 logs
drwxr-xr-x. 2 zabbix zabbix 23 6月 11 18:42 scripts
-rw-r--r--. 1 root root 13823 6月 9 22:49 zabbix_agentd.conf
drwxr-xr-x. 2 root root 6 6月 9 22:49 zabbix_agentd.conf.d
-rw-r--r--. 1 root root 19572 6月 11 18:24 zabbix_server.conf
drwxr-xr-x. 2 root root 6 6月 9 22:50 zabbix_server.conf.d
[root@133 etc]# pwd
/usr/local/etc
微信报警脚本
[root@133 ~]# cd /usr/local/etc/scripts/
[root@133 scripts]# vim weixin.sh
#!/bin/bash
CorpID="wwd5932acb806b41850c" # 你的企业id
Secret="BbUbI_g_4zwvgYjlRinxBu5V_xK8R1VRT-QiNLYW5O0" #你的SecretID
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
# echo $Token
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"
function body(){
local int agentid=1000002 # 你的agentdid
local UserID="@all" # 发送的用户ID
local PartyID=1 # 部门ID
local Msg=$(echo "$@" | cut -d" " -f3-) # 发送给所有人
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$agentid"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
[root@133 etc]# chmod +x scripts/weixin.sh
[root@133 etc]# chown -R zabbix:zabbix /usr/local/etc/scripts/
[root@133 etc]# kill -9 zabbix_server
[root@133 etc]# zabbix_server
测试:
[root@133 scripts]# ./weixin.sh test
{"errcode":0,"errmsg":"ok","invaliduser":""}
# 此时微信就会收到信息‘test’
设置zabbix报警配置
创建报警用户和组
报警媒介添加用户
收件人为部门id
设置动作
默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
设置恢复:
恢复:恢复主旨:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
到这里微信报警就设置好了,下面就来触发一下
可以使用自定义监控的方式,也可以是用模板的方式,这里就演示一下自定义的监控方式:
这里以httpd为例监控80端口
# 在客户端安装httpd
[root@agentd ~]# yum -y install httpd
[root@agentd ~]# systemctl start httpd
# 在客户端创建脚本存放目录
[root@agentd ~]# mkdir /scripts
# 写脚本
[root@agentd ~]# cat /scripts/check_process.sh
#!/bin/bash
process=$(ps -ef|grep -Ev "grep|$0"|grep -c $1)
if [ $process -gt 0 ];then
echo "0"
else
echo "1"
fi
# 给脚本执行权限
[root@agentd ~]# chmod a+x /scripts/check_process.sh
[root@agentd ~]# ll /scripts/check_process.sh
-rwxr-xr-x 1 zabbix zabbix 135 8月 24 15:26 /scripts/check_process.sh
# 改脚本存放目录的属主
[root@agentd ~]# chown -R zabbix.zabbix /scripts/
[root@agentd ~]# ll -d /scripts/
drwxr-xr-x 2 zabbix zabbix 30 8月 24 16:34 /scripts/
# 改客户端配置文件agentd.conf
[root@agentd ~]# echo "UnsafeUserParameters=1" >>/usr/local/etc/zabbix_agentd.conf
[root@agentd scripts]# echo 'UserParameter=check_process[*],/bin/bash /scripts/check_process.sh $1' >>/usr/local/etc/zabbix_agentd.conf
# 重启zabbix_agent
[root@agentd ~]# pkill zabbix_agentd
[root@agentd ~]# zabbix_agentd
# 在服务端手动测试
[root@133 etc]# zabbix_get -s 192.168.100.138 -k check_process[httpd]
0 # 0代表没有问题
# 停掉httpd服务再测试
[root@agentd ~]# systemctl stop httpd
[root@133 etc]# zabbix_get -s 192.168.100.138 -k check_process[httpd]
1 # 1代表服务没有进程运行
添加主机
创建应用集
添加监控项
添加触发器
查看监控到的最新数据
停止agentd端的httpd触发一下看微信能否收到信息
[root@138 scripts]# systemctl stop httpd
在微信这里收到了故障报警,现在恢复agentd端的httpd看能否收到恢复报警通知
[root@138 scripts]# systemctl start httpd