Zabbix邮件微信告警
- 环境准备
- Zabbix监控端设置
- 配置完成后的简单测试
- 触发器的配置
- 邮件告警
- 微信告警
背景:公司有一台Nginx服务器,需要进行监控,如果nginx服务器down,需要通过邮件搞紧以及微信告警
环境准备
一、被监控端安装Nginx服务器
[root@zabbix-agent01 ~]# rpm -ivh nginx-1.18.0-2.el7.ngx.x86_64.rpm
[root@zabbix-agent01 ~]# systemctl enable nginx --now
安装完成后查看端口
[root@zabbix-agent01 ~]# vim /etc/nginx/conf.d/default.conf #如果需要修改端口可以进入配置文件修改端口
Zabbix监控端设置
一、创建主机群组
二、创建主机并加入主机组导入模板
三、创建Nginx图形显示
进入检测>最新数据查看Nginx状态
四、将监控项的更新间隔修改为1s
配置完成后的简单测试
[root@zabbix-agent01 ~]# systemctl stop nginx #将Nginx服务器关闭
可以看到有一个服务关闭后又再次启动的过程
触发器的配置
打开触发器音效
利用原始模板提供的触发音效进行触发告警提醒
邮件告警
一、进入报警媒介类型配置
二、配置Email报警模式
三、定义收件人
点击添加之后选择更新
四、触发动作(什么事情触发邮件)
[root@zabbix-agent01 ~]# systemctl stop nginx #触发邮件告警
[root@zabbix-agent01 ~]# systemctl start nginx #打开nginx 再次触发邮件
微信告警
一、准备工作
- 下载企业微信
二、PC端企业微信后台操作
1) 打开浏览器输入以下网址,登陆企业微信PC端后台:记录企业ID
- https://work.weixin.qq.com/wework_admin
- 创建企业,然后通过PC浏览器打开企业微信,通过手机端扫一扫就可以登录记录企业信息中的corplD
- 点击公司名:但行好事莫问前程
- 将企业ID复制:wwf578a3*********
2)创建自己的应用(PC后台)(记录Agentld和secret)
最后点击创建应用
这里secret需要前往手机企业微信查看
3)添加管理组(PC后台)添加部门(PC后台)添加员工(PC后台)
4)测试企业微信接口调试工具(PC后台)
- API文档>第三方应用开发>工具与资源>接口调试工具
三、配置Python报警监控脚本
1)创建脚本文件
[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/wechat.py
#alertscripts:其他脚本
着手完整代码基于Python3.6
#!/usr/bin/python3.6
#_*_coding:utf-8 _*_
import requests,sys,json
import urllib3
urllib3.disable_warnings()
def GetTokenFromServer(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
print(r.json())
if r.json()['errcode'] != 0:
return False
else:
Token = r.json()['access_token']
file = open('/tmp/zabbix_wechat_config.json', 'w')
file.write(r.text)
file.close()
return Token
def SendMessage(User,Agentid,Subject,Content):
try:
file = open('/tmp/zabbix_wechat_config.json', 'r')
Token = json.load(file)['access_token']
file.close()
except:
Token = GetTokenFromServer(Corpid, Secret)
n = 0
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
"touser": "HeYiHao", # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"msgtype": "text", # 消息类型。
"agentid": 1000002, # 企业号中的应用id。
"text": {
"content": Subject + '\n' + Content
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
while r.json()['errcode'] != 0 and n < 4:
n+=1
Token = GetTokenFromServer(Corpid, Secret)
if Token:
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
print(r.json())
return r.json()
if __name__ == '__main__':
User = sys.argv[1] # zabbix传过来的第一个参数
Subject = str(sys.argv[2]) # zabbix传过来的第二个参数
Content = str(sys.argv[3]) # zabbix传过来的第三个参数
Corpid = "wwf578a38030da828f" # CorpID是企业号的标识
Secret = "tOqSaaQfdlH-ytkWmvADK_oonyPT6wRkfypioSbujyE" # Secret是管理组凭证密钥
Agentid = "1000002" # 应用ID
Status = SendMessage(User,Agentid,Subject,Content)
print(Status)
[root@zabbix-server alertscripts]# yum -y install python36 #安装python3.6
2)为wechat.py文件提权
[root@zabbix-server alertscripts]# chmod +x wechat.py
3)传参测试
[root@zabbix-server alertscripts]# ./wechat.py HeYiHao test test
手机显示接受成功!
四、zabbix添加报警媒介类型与之对接
1)自定义媒介类型
2)添加消息模板
3)测试
4)修改类型和收件人User settings>报警媒介
5)修改触发器
6)测试
[root@zabbix-agent01 ~]# systemctl stop nginx
[root@zabbix-agent01 ~]# systemctl start nginx