zabbix4.0 邮件报警和企业微信报警设置

添加邮件监控

主机环境:腾讯云
邮件服务:mailx
发送邮件服务器:126邮箱,465端口(25端口被封)


image.png

腾讯云默认限制云服务器的25端口,使用465端口
创建证书

echo -n | openssl s_client -connect smtp.126.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/lib/zabbix/alertscripts/certs/126.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /usr/lib/zabbix/alertscripts/certs/ -i /usr/lib/zabbix/alertscripts/certs/126.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /usr/lib/zabbix/alertscripts/certs/ -i /usr/lib/zabbix/alertscripts/certs/126.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i ./126.crt
certutil -L -d /usr/lib/zabbix/alertscripts/certs

配置mailx

1.如果安装有sendmail或者postfix,需要关闭
systemctl stop sendmail
systemctl disable sendmail
systemctl stop postfix
systemctl disable postfix
2.安装mailx
yum –y install mailx
3.配置mail.rc
vim /etc/mail.rc
## mail configure
set from=noreply_wpzabbix@126.com
set smtp=smtps://smtp.126.com:465    #smtp服务器
set smtp-auth-user=noreply_wpzabbix@126.com #邮箱
set smtp-auth-password=xxxxxx #授权密码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/usr/lib/zabbix/alertscripts/certs
测试mailx是否生效
echo "邮件正文" | mail -s "邮件主题" 157Xxx@qq.com
如果收到邮件,说明配置成功
4.mail脚本
cd /usr/lib/zabbix/alertscripts
[root@VM_0_3_centos alertscripts]# cat mail.sh 
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
测试脚本是否生效
./mail.sh 157xxx@qq.com "scrits" "test"
如果可以收到邮件,说明脚本配置正确

报错解决:

Error initializing NSS: Unknown error -8015.
. . . message not sent.
Error initializing NSS: Unknown error -8015.
. . . message not sent.

如果

echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
测试脚本是否生效
./mail.sh 157xxx@qq.com "scrits" "test"

两种方式都可以接收到邮件但是zabbix报警无法发送报警邮件,并且还报错Error initializing NSS: Unknown error -8015.
说明是证书权限问题


image.png

修改权限即可,注意telnet smpt.126.com 465 端口是通的,说明网络没有问题

zabbix web端配置

报警媒介配置


image.png

配置用户


image.png

配置动作
image.png

image.png

image.png

image.png

将主机的agent停掉,测试看能否收到邮件,有可能被发送到垃圾邮箱,需要设置一下。

.企业微信报警添加

配置企业微信报警
企业微信注册地址:企业微信注册

image.png

创建部门,添加运维人员
image.png

创建应用
image.png

记住这个AgentId和Secret,后面脚本会用到
image.png

我的企业-企业信息-查看企业ID,后面脚本会用到
image.png

查看部门ID

image.png

企业微信api调用:http://work.weixin.qq.com/api/devtools/devtool.php
image.png

zabbix脚本

[root@VM_0_3_centos ~]# cd /usr/lib/zabbix/alertscripts/
[root@VM_0_3_centos alertscripts]# cat wechat.sh 
#!/bin/bash
#填写我们的应用CropID
CropID='******************'
#应用的Secret,下面的GURL和PURL 地址无需变动
Secret='*******************************'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
 
function body() {
         local int AppID=1000002     #创建应用的ID
         local UserID=$1                    #接收消息用户,我们在部门里面添加的用户,如果有其他人,用逗号代替部门成员id,zabbix中定义的微信接收者
         local PartyID=2                     #接受消息的部门ID,定义了范围,组内成员都可接收到消息
         local Msg=$(echo "$@" | cut -d" " -f3-)
         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'
}
[root@VM_0_3_centos alertscripts]# chown zabbix.zabbix wechat.sh 
[root@VM_0_3_centos alertscripts]# chmod 744 wechat.sh 
测试(第一参数changhuanyan是部门中的用户,第二个参数是subject,第三个参数标题)
[root@VM_0_3_centos alertscripts]# sh wechat.sh changhuanyan test test
{"errcode":0,"errmsg":"ok","invaliduser":""}

手机可以看到你发的消息就是测试成功了。

image.png

zabbix web界面设置
image.png

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

创建用户


image.png

image.png

image.png

配置动作


image.png

image.png

注:默认的步骤是1-1,也即是从1开始到1结束。一旦故障发生,就是执行sendEmail.sh脚本发生报警邮件给Admin用户 和zabbix administrator组。
假如故障持续了1个小时,它也只发送一次。如果改成1-0,0是表示不限制.无限发送
间隔就是默认持续时间60秒。那么一个小时,就会发送60封邮件。
image.png

image.png

image.png
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
告警主机:{HOST.NAME}
告警地址:{HOSTNAME1}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
---------------
---------------
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
告警主机:{HOST.NAME}
告警地址:{HOSTNAME1}
监控项目:{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}
}
----------------------
----------------------
服务器:{HOST.NAME}: 报警确认
{
确认人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:{ACK.MESSAGE}
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}
}
image.png

参考http://www.wqblogs.com/%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2zabbix4-0%EF%BC%8C%E9%85%8D%E7%BD%AE%E5%BE%AE%E4%BF%A1%E6%8A%A5%E8%AD%A6/

问题:

使用了一段时间发现配置web报警时,因为监控项中有双引号以及空格,会被截断,发出的报警如下

监控项:
    Response time for step "zabbix front" of scenario "zabbix frontend".
企业报警信息:
server发生: zabbix_frontend web down alert故障! {
 告警主机:zabbix server
 告警地址:118.25.101.253
 监控项目:

所以更改脚本中的截取

15 local Msg=$(echo "$@" | cut -d" " -f3-$#)
27 /usr/bin/curl --data-ascii "$(body $1 $2 ${@:3})" $PURL
${@:3}代表将后面的数据都作为$3的数据,MSg截取也更改为截取$3以及后面的所有参数
在本地shell脚本中执行可以生效,但是发送报警信息还是被截取

所以果断更改shell脚本为python脚本,如下:

#!/usr/local/python3/bin/python3
# -*- coding:utf-8 -*-
import requests
import json
import sys


# 企业号及应用相关信息
corp_id = 'ww1921xxxx91df71'
corp_secret = 'iJJq9ykT4boDDqEOaxxxxxxxR4sjy9C7k'
agent_id = 1000002
# 存放access_token文件路径
file_path = '/tmp/access_token.log'


def get_access_token_from_file():
    try:
        f = open(file_path,'r+')
        this_access_token = f.read()
        print('get success %s' % this_access_token)
        f.close()
        return this_access_token
    except Exception as e:
        print(e)

# 获取token函数,文本里记录的token失效时调用
def get_access_token():
    get_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (corp_id, corp_secret)
    print(get_token_url)
    r = requests.get(get_token_url)
    request_json = r.json()
    this_access_token = request_json['access_token']
    print(this_access_token)
    r.close()
    # 把获取到的access_token写入文本
    try:
        f = open(file_path,'w+')
        f.write(this_access_token)
        f.close()
    except Exception as e:
        print(e)

    # 返回获取到的access_token值
    return this_access_token


# snedMessage
# 死循环,直到消息成功发送
flag = True
while(flag):
    # 从文本获取access_token
    access_token = get_access_token_from_file()
    try:
        # to_user = '@all'      ## 注意这样的话会发给所有人
        to_user = sys.argv[1]    ##这样zabbix中的参数才会有效
        title = sys.argv[2]
        message = sys.argv[3]
        send_message_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token
        print(send_message_url)
        message_params = {
                            "touser":to_user,
                            "msgtype":"text",
                            "agentid":agent_id,
                            "text":{
                                "content" : title + '\n' + message
                            },
                            "safe": 0
                        }
        r = requests.post(send_message_url, data=json.dumps(message_params))
        print('post success %s ' % r.text)
        # 判断是否发送成功,如不成功则跑出异常,让其执行异常处理里的函数
        request_json = r.json()
        errmsg = request_json['errmsg']
        if errmsg != 'ok': raise
        # 消息成功发送,停止死循环
        flag = False
    except Exception as e:
        print(e)
        access_token = get_access_token()

将此脚本放入到/usr/lib/zabbix/alertscripts中,并一定要注意wetchat.py和/tmp/access_token.log的权限属主为zabbix,否则无法发送报警。

[root@VM_0_3_centos alertscripts]# ll
total 16
-rwxr--r-- 1 zabbix zabbix  165 Apr  9 18:10 mail.sh
-rwxr--r-- 1 zabbix zabbix 2413 Apr 26 11:39 wechat.py
-rwxr--r-- 1 zabbix zabbix 1312 Apr 26 14:18 wechat.sh
-rwxr--r-- 1 zabbix zabbix 1331 Apr 24 22:19 wechat.sh.bak
[root@VM_0_3_centos alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@VM_0_3_centos alertscripts]# ls -al /tmp/access_token.log 
-rw-r--r-- 1 zabbix zabbix 214 Apr 26 12:17 /tmp/access_token.log

更改web中的脚本名称即可,


image.png

参考:

http://www.ttlsa.com/zabbix/use-wechat-send-zabbix-msg/

注意1:

运行一段时间上述python脚本,发现zabbix分组报警不生效,即使将用户停用了居然还可以发出报警,查看脚本发现

    try:
        to_user = '@all'      ## 注意这样的话会发给所有人
        title = sys.argv[2]
        message = sys.argv[3]
        send_message_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token

脚本中是发送给企业微信中所有人的,所以zabbix上的更改才会不生效,只需要将

to_user = '@all'      ## 注意这样的话会发给所有人

更改为

to_user =  sys.argv[1]   ## zabbix传递过来的参数

特此记录

注意2:

如果发现wechat.py脚本无法发出报警,在网络没有问题的情况下请注意权限,手动执行./usr/lib/zabbix/alertscripts/wechat.py changhuanyan test test 可以正常发送,但是zabbix端无法发送时,要注意脚本中/tmp/access_token.log的权限!!!

[root@VM_20_3_centos alertscripts]# ls -al /tmp/access_token.log
-rw-r--r-- 1 zabbix zabbix 214 Aug 26 19:13 /tmp/access_token.log

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容