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

安装完成后查看端口

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维

[root@zabbix-agent01 ~]# vim /etc/nginx/conf.d/default.conf   #如果需要修改端口可以进入配置文件修改端口

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_02

Zabbix监控端设置

一、创建主机群组

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_03


zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_04


二、创建主机并加入主机组导入模板

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_05


zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_06

三、创建Nginx图形显示

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix_07

进入检测>最新数据查看Nginx状态

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix_08

四、将监控项的更新间隔修改为1s

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_09

配置完成后的简单测试

[root@zabbix-agent01 ~]# systemctl stop nginx #将Nginx服务器关闭

zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_10

可以看到有一个服务关闭后又再次启动的过程

zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_11

触发器的配置

打开触发器音效

利用原始模板提供的触发音效进行触发告警提醒

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_12

邮件告警

一、进入报警媒介类型配置

zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_13

二、配置Email报警模式

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix_14

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_15

三、定义收件人

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_16

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_17


点击添加之后选择更新

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_18

四、触发动作(什么事情触发邮件)

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_19


zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_20

zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_21

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_22

[root@zabbix-agent01 ~]# systemctl stop nginx   #触发邮件告警

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_23

[root@zabbix-agent01 ~]# systemctl start  nginx #打开nginx 再次触发邮件

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_24

微信告警

一、准备工作

  • 下载企业微信

二、PC端企业微信后台操作

1) 打开浏览器输入以下网址,登陆企业微信PC端后台:记录企业ID

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_25

  • 点击公司名:但行好事莫问前程
  • 将企业ID复制:wwf578a3*********

2)创建自己的应用(PC后台)(记录Agentld和secret)

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_26


zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_27


zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_28


最后点击创建应用

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_29


这里secret需要前往手机企业微信查看

3)添加管理组(PC后台)添加部门(PC后台)添加员工(PC后台)

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_30


4)测试企业微信接口调试工具(PC后台)

  • API文档>第三方应用开发>工具与资源>接口调试工具

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_31


三、配置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 告警 带图片 企业微信 zabbix实现微信告警_json_32

手机显示接受成功!

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_33


四、zabbix添加报警媒介类型与之对接

参考官方文档

zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_34

1)自定义媒介类型

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix_35


2)添加消息模板

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_36


3)测试

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_37

zabbix 告警 带图片 企业微信 zabbix实现微信告警_json_38

4)修改类型和收件人User settings>报警媒介

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_39

5)修改触发器

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_40


zabbix 告警 带图片 企业微信 zabbix实现微信告警_运维_41

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_42

6)测试

[root@zabbix-agent01 ~]# systemctl stop nginx

zabbix 告警 带图片 企业微信 zabbix实现微信告警_nginx_43

[root@zabbix-agent01 ~]# systemctl start  nginx

zabbix 告警 带图片 企业微信 zabbix实现微信告警_zabbix 告警 带图片 企业微信_44