转自:http://blog.sina.com.cn/s/blog_87113ac20102w7hp.html

Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。

1、 微信企业号注册与使用

企业号注册:https://qy.weixin.qq.com/

2、企业号使用教程

2.1、通讯录添加企业员工

登录新建的企业号,通过提前把企业成员信息添加到组织或者部门,需要填写手机号、微信号或邮箱,通过这样方式让别人扫码关注企业公众号,为了后面企业号推送消息给企业成员。

#新增账户,填写信息

3、 应用中心创建应用

#可见范围还可以添加不同管理组,接受同一个应用推送的消息,注:可见范围选择部门名称或者部门成员

4、给部门设置管理员

设置--->功能设置---->权限管理---->新建管理组

管理员需要事先关注企业号,并且设置好邮箱地址

#需要确定管理员有权限使用应用发送消息,需要管理员的CorpID和Sercrt。(重要)

#准备事项:

微信企业号

企业号已经被部门成员关注

企业号有一个可以发送消息的应用(test-msg),一个授权管理员(test-msg),可以使用应用给成员发送消息

#需要先添加管理员信息,然后使其关注企业号

#需要得到的信息

成员账号

组织部门ID

应用ID

CorpID和Secret

5、微信接口调用

调用微信接口需要一个调用接口的凭证:access_token

通过CorpID和Secret可以获得access_token

微信企业号接口调试地址: http://qydev.weixin.qq.com/debug

#

6、 脚本调用原理

#设置脚本执行路径,编辑zabbix_server.conf文件,添加一行

AlertScriptsPath=/opt/zabbix/share/zabbix/alertscripts

6.1、Shell脚本使用

#curl -s -G url 获取 AccessToken

# curl --data  url  传送凭证调用企业号接口

[root@zabbix alertscripts]# cat wechat.sh

#!/bin/bash

#########################################################################

# File Name: wechat.sh

# Author: shaonbean

# Email: shaonbean@qq.com

# Created Time: Sun 24 Jul 2016 05:48:14 AM CST

#########################################################################

# Functions: send messages to wechat app

# set variables

CropID='wx11ac451376ae0e98'

Secret='M3FMhnFh8nTI6SxLAEbbLLZaj-1BpZIyqkJRskeMMUXObGx4mfQsAg7Jw-nUMXe9'

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"

#get acccess_token

Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" '{print $4}')

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

#

function body() {

local int AppID=10                        #企业号中的应用id

local UserID="touser"                        #部门成员id,zabbix中定义的微信接收者

local PartyID=8                           #部门id,定义了范围,组内成员都可接收到消息

local Msg=$(echo "$@" | cut -d" " -f3-)   #过滤出zabbix传递的第三个参数

printf '{\n'

printf '\t"touser": "'"$UserID""",\n"

printf '\t"toparty": "'"$PartyID""",\n"

printf '\t"msgtype": "text",\n'

printf '\t"agentid": "'" $AppID """,\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 $! $2 $3)" $PURL

#http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

#测试:

bash wechat.sh test hello.world!

{"errcode":0,"errmsg":"ok","invaliduser":"all user invalid"}

6.2、python脚本

#安装simplejson

wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz

tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2

python setup.py build

python setup.py install

#下载wechat.py脚本

git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git

cp Zabbix-Alert-WeChat/wechat.py /opt/zabbix/share/zabbix/alertscripts/

chmod +x wechat.py && chown zabbix:zabbix wechat.py

#脚本修改

#!/usr/bin/python

#_*_coding:utf-8 _*_

import urllib,urllib2

import json

import sys

import simplejson

def gettoken(corpid,corpsecret):

gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret

print  gettoken_url

try:

token_file = urllib2.urlopen(gettoken_url)

except urllib2.HTTPError as e:

print e.code

print e.read().decode("utf8")

sys.exit()

token_data = token_file.read().decode('utf-8')

token_json = json.loads(token_data)

token_json.keys()

token = token_json['access_token']

return token

def senddata(access_token,user,subject,content):

send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token

send_values = {

"touser":"touser",      #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。

"toparty":"8",          #企业号中的部门id。

"msgtype":"text",       #消息类型。

"agentid":"10",         #企业号中的应用id。

"text":{

"content":subject + '\n' + content

},

"safe":"0"

}

#    send_data = json.dumps(send_values, ensure_ascii=False)

send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')

send_request = urllib2.Request(send_url, send_data)

response = json.loads(urllib2.urlopen(send_request).read())

print str(response)

if __name__ == '__main__':

user = str(sys.argv[1])     #zabbix传过来的第一个参数

subject = str(sys.argv[2])  #zabbix传过来的第二个参数

content = str(sys.argv[3])  #zabbix传过来的第三个参数

corpid =  'wx11ac451376ae0e98'   #CorpID是企业号的标识

corpsecret = 'M3FMhnFh8nTI6SxLAEbbLLZaj-1BpZIyqkJRskeMMUXObGx4mfQsAg7Jw-nUMXe9'  #corpsecretSecret是管理组凭证密钥

accesstoken = gettoken(corpid,corpsecret)

senddata(accesstoken,user,subject,content)

#28,29,31行分别改为用户账号,部门ID,和应用ID

#48,49 改为CropID和Secret

#文中使用的用户为,test-msg,部门iD为8,应用ID为10.

#脚本测试

[root@zabbix alertscripts]# ./wechat.py test-msg test hello

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx11ac451376ae0e98&corpsecret=M3FMhnFh8nTI6SxLAEbbLLZaj-1BpZIyqkJRskeMMUXObGx4mfQsAg7Jw-nUMXe9

{u'invaliduser': u'all user invalid', u'errcode': 0, u'errmsg': u'ok'}

#可以显示成功

7、脚本路径设置

#将脚本放到zabbix默认执行的路径下

mv wechat.php wechat.sh /opt/zabbix/share/zabbix/alertscripts/

chown zabbix:zabbix /opt/zabbix/share/zabbix/alertscripts/wechat.php

chmod +x /opt/zabbix/share/zabbix/alertscripts/wechat.php

chown zabbix:zabbix /opt/zabbix/share/zabbix/alertscripts/wechat.sh

chmod +x /opt/zabbix/share/zabbix/alertscripts/wechat.sh

#设置脚本的启动用户为zabbix,并给脚本可执行权限

#修改zabbix_server.conf文件,添加脚本执行目录

AlertScriptsPath=/opt/zabbix/share/zabbix/alertscripts

#修改完成重启zabbix_server

/etc/init.d/zabbix_server restart

8、Zabbix-web前端设置

8.1、设置通知媒介

8.2、创建用户

8.3、创建触发动作及发送内容

告警主题:

Default subject:{TRIGGER.STATUS}: {TRIGGER.NAME}

Trigger host:{HOSTNAME}

Trigger ip:{HOST.IP}

Trigger time:{EVENT.DATE}:{EVENT.TIME}

Trigger: {TRIGGER.NAME}

Trigger status: {TRIGGER.STATUS}

Trigger severity: {TRIGGER.SEVERITY}

Trigger URL: {TRIGGER.URL}

Item values:

1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}

2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}

Original event ID: {EVENT.ID}

恢复主题:

Default subject:{TRIGGER.STATUS}: {TRIGGER.NAME}

Trigger host:{HOSTNAME}

Trigger ip:{HOST.IP}

Trigger time:{EVENT.DATE}:{EVENT.TIME}

Trigger: {TRIGGER.NAME}

Trigger status: {TRIGGER.STATUS}

Trigger severity: {TRIGGER.SEVERITY}

Trigger URL: {TRIGGER.URL}

Item values:

1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}

2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}

Original event ID: {EVENT.ID}

#

#设置完成记得新增或更新(add&update)

9、测试微信告警发送

#主动触发相关trigger告警,查看微信发送状态

#

#到此Zabbix-3.0.3结合微信告警完成。

10、         注意事项及报错处理

#Zabbix-web页面新增用户权限处理,发送对象选择(应用ID)

#应用当中可见范围选择注意(选这要发送的对象(部门,及部门成员))

Zabbix-3.0.3实现微信(WeChat)报警的更多相关文章

  1. Zabbix 3.0 配置企业微信报警(注册---测试)

    一.申请企业微信 1.登录企业微信官网,点击企业注册 二.配置企业微信 1.邀请管理员使用企业微信,如果有多个人直接添加新成员 2.管理员收到邀请,下载手机版企业微信,使用微信号登陆即可 3.创建应用 ...

  2. Zabbix 3.0 配置企业微信报警(配置zabbix-web)

    一.添加报警媒体类型 Name:自定义 Type:选择script Scripts name:填写脚本名称 Script parameters:脚本参数 --corpid=XXX --corpsecr ...

  3. 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)

    一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...

  4. Zabbix-3.0.3实现微信(WeChat)告警

    导读 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告 ...

  5. zabbix 定义触发器,并使用邮件,微信消息报警。

    触发器可根据监控项获取到的值来进行一些操作,如监控项获取到的values为0,触发器可判断为正常,如果获取到了1,就触发报警. 定义报警方式比较简单,但是用shell脚本实现起来,总是有格式问题,所以 ...

  6. 运维监控-Zabbix Server 使用微信 WeChat 告警

    运维监控-Zabbix Server 使用微信 WeChat 告警 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 微信公众号告警每个一天只支持1000次告警,如果超出这个次数了就不 ...

  7. zabbix实现企业微信监控报警

    一.zabbix基本说明 简介:zabbix基于Web界面的分布式系统监控的企业级开源软件.可以监控各种系统与设备,网络参数,保证服务器设备安全运营:提供灵活的通知机制.如果检测到的指标不达标,就实现 ...

  8. centos7安装ZABBIX 3.0+ 邮件报警【OK】

    设置主机名: vi /etc/hosts 10.0.0.252 zabbix-server hostnamectl set-hostname   关闭防火墙: systemctl stop firew ...

  9. Zabbix 3.0 从入门到精通(zabbix使用详解)

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

随机推荐

  1. 同步nginx日志到s3 bulket

    1.此处用的是增量同步 #!/bin/bash rm -rf /var/log/nginx/access.log.*.* local_host="`hostname --i`" a ...

  2. python装饰器的参数传递

    被装饰器装饰的函数名即使没有被调用(因为有@xxx,会触发运行装饰器),(装饰器工厂函数)定义装饰器的代码已经运行了(最内部的那个函数并没有运行)(把被装饰的原函数引用赋值给了装饰器内部的那个函数名) ...

  3. vscode template中设置不换行

    { "workbench.colorTheme": "Dark-Dracula", "workbench.iconTheme": " ...

  4. 03-string字符串和while循环

    目录 03-string字符串和while循环 1. string介绍 2. 字符串的运算 3. 下标及分片 4. 格式化输出 5. f-string格式化输出用法 6. 字符串方法 7. 布尔值,空 ...

  5. 图论模型--dijstra算法和floyd算法

    matlab代码实现:https://blog.csdn.net/weixin_40108753/article/details/81237585 python代码实现:

  6. 利用tensorflow编写自己的机器学习模型主要步骤

    利用tensorlow编写自己的机器学习模型主要分为两个阶段: 第一阶段:建立模型或者建立网络结构 1.定义输入和输出所需要的占位符 2.定义权重 3.定义具体的模型接口 4.定义损失函数 5.定义优 ...

  7. 获取文件MD5值(JS、JAVA)

    文章HTML代码翻译于地址:https://www.cnblogs.com/linyihai/p/7040786.html           文件MD5有啥用?                  文 ...

  8. 【转】 java类的加载和执行顺序

    1.先执行Test类的静态代码块后执行Test类的main方法,说明要执行类的方法需要先加载这个类. 2.在创建ClassB的对象时,先去加载了父类ClassA.说明加载子类时如果没有加载父类,会先加 ...

  9. CSS公共样式模版

    CSS文件命名为global.css,一般此CSS文件是用于装全站主要框架CSS样式代码和初始化的CSS样式. 通常会放初始化CSS代码如下: body, div, ul, ol, dl, dt, d ...

  10. E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)

    题:https://codeforces.com/contest/1262/problem/E 分析:预处理出阵列中的矩阵,然后二分答案还原题目的烧火过程,判断是否满足要求 #include<b ...