1、相关资源导航
https://blog.csdn.net/zyj81092211/article/details/122917786
2、环境介绍
zabbix版本:6.0
kubernetes版本:v1.23.4
rancher版本:v2.6.3
容器相关环境配置可参考如下
https://blog.csdn.net/zyj81092211/article/details/123068347
3、获取企业微信信息
注:调用逻辑是:根据CropID找企业,根据AgentId和Secret找到具体应用,根据Toparty找到要发送信息的具体部门
(1)登陆或注册企业微信
https://work.weixin.qq.com/

(2)获取企业ID(CropID)
我的企业-》企业信息-》企业ID

(3)自建应用获取应用信息(AgentId和Secret)
应用管理-》应用-》自建

信息会发送到企业微信客户端

(4)获取部门ID(Toparty)

4、设置微信插件


5、shell告警脚本
注:更换脚本中企业微信信息,url是用来传递服务器登记信息的,没有可以不写
#!/bin/bash
# -*- coding: utf-8 -*-
# zabbix notification confirmation script
#自建应用信息
Toparty=xxx #部门id
AgentID=xxx #应用id
Secret='xxx'
#修改为企业CropID
CropID='xxx'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#获取Token
#Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
Gtoken=$(/usr/bin/curl -s -G $GURL | sed 's/,/\n/g' | grep -i access_token | awk -F \" '{print $4}')
#发送消息接口
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#报警信息主题,zabbix传入
Title="$1"
#报警信息正文内容,zabbix传入
Message="$2"
#发送消息函数(构建json发送)
JSON_BODY(){
printf "%s\n" "{"
printf "\t%s\n" "\"toparty\":\"$Toparty\","
printf "\t%s\n" '"msgtype": "textcard",'
printf "\t%s\n" "\"agentid\":\"$AgentID\","
printf "\t%s\n" "\"textcard\": {"
printf "\t\t%s\n" "\"title\":\"$Title\","
printf "\t\t%s\n" "\"description\":\"$Message\","
printf "\t\t%s\n" "\"url\":\"$url\","
printf "\t%s\n" "}"
printf "%s\n" "}"
}
#函数中URL构建
IP=$(echo "$Message" | grep '告警地址' | awk -F : '{print $2}')
url="xxx"
#发送报警信息
curl -s -H "Content-Type: application/json" -X POST -d "$(JSON_BODY $1 $2)" $PURL
6、python脚本(可选)
#!/usr/bin/python
# -*- coding: utf-8 -*-
# zabbix notification confirmation script
# python2.7 or above
import requests
import json
import os
import sys
Toparty = "xxx" #部门id
AgentID = xxx #应用id
#修改为企业CropID和Secret
CropID = 'xxx'
Secret = 'xxx'
#获取Token
Gtoken ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+ CropID + "&corpsecret=" + Secret
headers = {'Content-Type': 'application/json'}
json_data = json.loads(requests.get(Gtoken).content.decode())
token = json_data["access_token"]
#消息发送接口
Purl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token
#消息发送函数
def msg(title,message,url):
weixin_msg = {
"toparty" : Toparty,
"msgtype" : "textcard",
"agentid" : AgentID,
"textcard" : {
"title" : title,
"description" : message,
"url" : url,
}
}
print requests.post(Purl,json.dumps(weixin_msg),headers=headers)
if __name__ == '__main__':
title = sys.argv[1] #获取第一个参数
message = sys.argv[2] #获取第二个参数
a1=message.find("告警地址:")+len("告警地址:")
a2=message.find("监控项目:")
url="url"+message[a1:a2]
#print(a1)
#print(a2)
#print message[a1:a2]
msg(title,message,url)
7、将脚本挂载到容器中
现将脚本上传到nfs存储中并加执行权限

挂载到容器中/usr/lib/zabbix/alertscripts目录

8、创建报警媒介

选择脚本并添加参数

{ALERT.SUBJECT}
{ALERT.MESSAGE}
内置参数说明
https://www.zabbix.com/documentation/6.0/en/manual/appendix/macros/supported_by_location
配置信息模板

主题
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

主题
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
9、创建报警动作



问题发生操作


主题
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
问题恢复操作


主题
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
10、为用户创建报警媒介




11、测试
执行下面命令,让多核CPU 使用率达到100%
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
问题报警



问题恢复


12、企业微信API查看(可选)


如何获取token

发送应用消息。里面有消失示例

