Zabbix系列之(四):Zabbix Server增加微信告警


title: Zabbix系列之(四):Zabbix Server增加微信告警
categories: Linux
tags:
- Zabbix
timezone: Asia/Shanghai
date: 2019-01-12


环境

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)

[root@localhost ~]# python -V
Python 2.7.5

[root@localhost ~]# zabbix_server -V
zabbix_server (Zabbix) 4.0.3
Revision 87993 20 December 2018, compilation time: Dec 20 2018 11:29:33

Copyright (C) 2018 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later .
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).

Compiled with OpenSSL 1.0.1e-fips 11 Feb 2013
Running with OpenSSL 1.0.1e-fips 11 Feb 2013

[root@localhost ~]# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 4.0.3
Revision 87993 20 December 2018, compilation time: Dec 20 2018 11:29:54

Copyright (C) 2018 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later .
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).

Compiled with OpenSSL 1.0.1e-fips 11 Feb 2013
Running with OpenSSL 1.0.1e-fips 11 Feb 2013

第一步:申请企业微信号

1.申请企业号并记录相关信息
https://qy.weixin.qq.com

后边需要用到的几个信息:
    1.登录网页 - 我的企业 - 企业ID:xxxxx
        或者:企业微信客户端:工作台 - 管理企业 - 企业信息 - 企业ID
2.创建应用
登录网页 - 应用与小程序 - 创建应用。创建完成后记录以下信息:
    AgentId:xxxxx
    Secret:SacUM-xxxxxxxxxx
3.添加通讯录(添加后才可接受告警消息)
登录网页 - 通讯录 - 添加成员

第二步:设置Python脚本

1.安装依赖
yum install -y python-requests
2.准备Python脚本
附录内有具体脚本内容,这里是使用Python脚本来实现的。
脚本内有3项内容是必须根据自己情况做修改的。详情请看脚本备注

# 1.查看Zabbix Server脚本目录设置
[root@localhost ~]# grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

# 2.编辑Python脚本
vim /usr/lib/zabbix/alertscripts/weixin.py
添加附录内脚本内容

# 3.给脚本执行权限
chmod 755 /usr/lib/zabbix/alertscripts/weixin.py

# 4.测试脚本
/usr/lib/zabbix/alertscripts/weixin.py name test 123456
    name:收件人账号(登录企业微信网站 - 通讯录 - 打开某个收件人 - 账号)
    test:标题?
    123456:具体需要发送的内容

如果没有错误的话,收件人将可以在手机APP企业微信上收到此消息。
3.手动建立日志文件并赋予写入权限
因为Python脚本设置了记录日志,但是脚本所在路径隶属于root组
而Zabbix Server是使用zabbix用户运行的,对此目录没有写入权限
所以这里先手动建立一个空的log文件,并赋予所有用户写入权限

touch /usr/lib/zabbix/alertscripts/weixin.log
chmod 766 /usr/lib/zabbix/alertscripts/weixin.log

第三步:设置Zabbix Server开启微信告警

1.添加告警媒介
管理 - 报警媒介类型 - 创建媒体类型
    名称:微信
    类型:脚本
    脚本名称:weixin.py
    脚本参数:
        {ALERT.SENDTO}
        {ALERT.SUBJECT}
        {ALERT.MESSAGE}
2.为用户添加报警媒介
管理 - 用户 - 报警媒介 - 添加
    类型:微信
    收件人:收件人账号(登录企业微信网站 - 通讯录 - 打开某个收件人 - 账号)
    当启用时:1-7,00:00-24:00
    如果存在严重性则使用:根据自己需要选择发送告警类型
    已启用:必须勾选
3.打开触发器动作
1.管理 - 动作:这里默认是停用状态,需要手动开启

2.管理 - 动作 - Report problems to Zabbix administrators
    操作 - 编辑:查看【仅送到】选项是否是所有或者微信。
    
    关于这里的操作细节:
    步骤:1-1(假如故障持续了1个小时,它也只发送一次。)
             (如果改成1-0,0是表示不限制.无限发送)
              (发送间隔是下边的【步骤持续时间】)

第四步:模拟测试

将新某台被监控主机关机,查看是否能收到微信告警。

附录:使用普通微信接受消息

成员无需下载企业微信客户端,直接用微信扫码关注微工作台,即可在微信中接收企业通知和使用企业应用。

方法:登录企业微信管理页面 - 我的企业 - 微工作台 - 邀请关注的二维码
    关注后即可。

附录:Python脚本内容

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: [email protected]
#date: 2019-01-13
#comment: zabbix接入微信报警脚本

import requests
import sys
import os
import json
import logging

# 设置记录日志
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/usr/lib/zabbix/alertscripts','weixin.log'),
                filemode = 'a')

# 必须修改1:企业ID
corpid='wwxxxxxx'

# 必须修改2:Secret
appsecret='xxxxxxxxxxxxxxxxxxxxxxxxxx'

# 必须修改3:AgentId
agentid=xxxxxxxxx
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']

#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[3]

params={
        "touser": touser,
#       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
}

req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

你可能感兴趣的:(Zabbix系列之(四):Zabbix Server增加微信告警)