Zabbix后续,邮件+企业微信监控

本文是上一篇zabbix安装配置的后续,主要介绍配合通讯工具实时监控

使用公网邮箱发送邮件

邮件系统简要介绍:
电子邮件系统包括两个组件:MUA(Mail User Agent,邮件用户代理)和MTA(Mail Transport Agent,邮件传送代理 postfix)MUA是邮件系统为用户提供的可以读写邮件的界面;而MTA是运行在底层,能够处理邮件的收发工作的程序。

mail和mailx即为负责查看、编写邮件和向MTA发送邮件的MUA。mailx是mail的功能加强版。

1.注册163邮箱
2.登陆网页邮箱设置客户端授权密码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
server服务器端:

安装MUA软件:mailx

[root@zabbix-server ~]#  yum install mailx -y
[root@zabbix-server ~]# mailx -V 
12.5 7/5/10
注:使用新的方式--利用公网邮件服务器发送报警,需要关闭postfix服务
[root@zabbix-server ~]# systemctl stop postfix

配置公网邮箱信息:

[root@zabbix-server ~]# vim /etc/mail.rc  ---在最后添加如下:
 set [email protected](邮箱地址) 
 set smtp=smtp.163.com(smtp服务器) 
 set [email protected](用户名) 
 set smtp-auth-password=qf123456(这里是邮箱的授权密码) 
 set smtp-auth=login

使用mailx发邮件的方式:

方式1:echo "正文内容" | mailx -s "邮件标题" 收件箱Email
方式2:mailx -s "邮件标题" 收件箱Email,回车按CTRL+D发送
参数:
-v :显示发送的详细信息

手动发送邮件测试:

[root@zabbix-server ~]# mailx -v -s 'hello' '[email protected]'

手写邮件内容 (回车,然后ctrl+d正常结束)

[root@zabbix-server ~]# mailx -v -s 'hello' '[email protected]'
nihao
EOT
Resolving host smtp.163.com . . . done.
Connecting to 123.126.97.2:smtp . . . connected.
220 163.com Anti-spam GT for Coremail System (163com[20141201])
>>> EHLO zabbix-server
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN 
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFeF38eUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
>>> AUTH LOGIN
334 dXNlcm5hbWU6
>>> bHd4MTgzNjYwMTkzNTZAMTYzLmNvbQ==
334 UGFzc3dvcmQ6
>>> bHd4MTgzNjYwMTkzNTY=
235 Authentication successful
>>> MAIL FROM:<[email protected]>
250 Mail OK
>>> RCPT TO:<[email protected]>
250 Mail OK
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Mail OK queued as smtp2,GtxpCgDXkqTEFERdskSAAA--.825S2 1564742867
>>> QUIT
221 Bye

手动使用mailx发送邮件测试结果:

在这里插入图片描述
zabbix添加邮件报警功能:

配置 zabbix 的邮件报警功能需要以下三个角色的参与。

1、 示警媒体(Media)
2、 触发器(Triggers)
3、 动作(Action)
示警媒体:
    指的是 zabbix 采用何种方式进行报警,目前 Zabbix 支持的示警媒体包括邮件、Jabber、短信。jabber是linux下一种即时通讯工具。
触发器:
    指的是当监控对象达到某个条件或条件集合的时候,触发 Zabbix 产生事件。
动作:
    指的是 Zabbix 产生对应事件后,它通过示警媒体发送报警。

接下来,我们配置一个邮件报警功能的范例。效果是当redis端口挂掉则触发报警,管理员将会收到一封 Zabbix 发出的报警邮件。

示警媒体的配置:

 首先需要配置 Zabbix 的邮件功能。
 点击 管理->报警媒介类型->创建媒体类型

1.然后在页面中填入你的报警媒介类型信息,例如下图所示:

注:脚本名称任意,存放于/usr/lib/zabbix/alertscripts (生产上的测试服放这:/usr/local/zabbix/share/zabbix/alertscripts)
名称:sendmail                   //名称任意
类型:脚本
脚本名称:sendmail.sh      
脚本参数:                          //一定要写,否则可能发送不成功
    {ALERT.SENDTO}              //照填,收件人变量
    {ALERT.SUBJECT}             //照填,邮件主题变量,变量值来源于‘动作’中的‘默认接收人’
    {ALERT.MESSAGE}           //照填,邮件正文变量,变量值来源于‘动作’中的‘默认信息’

配置完成后,不要忘记点击存档,保存你的配置。       

在这里插入图片描述
2.修改zabbix服务端配置文件&编写脚本:指定脚本的存储路径:

[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf

在这里插入图片描述

 AlertScriptsPath=/usr/lib/zabbix/alertscripts

编写邮件脚本:

[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# vim sendmail.sh   
#!/bin/sh 
#export.UTF-8
echo "$3" | sed s/'\r'//g | mailx -s "$2" $1
$1:接受者的邮箱地址:sendto
$2:邮件的主题:subject
$3:邮件内容:message

修改权限:

[root@zabbix-server alertscripts]# chmod u+x sendmail.sh && chown zabbix.zabbix sendmail.sh

修改admin用户的报警媒介:

在这里插入图片描述
用户默认是没有设置报警媒介的,设置后就可以接收报警消息了。

接下来,设置接受报警用户的电子邮件

点击:管理->报警媒介类型->Admin->报警媒介->添加

在这里插入图片描述

在这里插入图片描述
触发器的配置:

 接下来,点击配置->主机->none1->触发器->创建触发器
我们给 none1 这台主机增加一个触发器。点击 none1 这一行中的“触发器”,然后再点击创建触发器。       

如下:

名称:填入触发器的名字
表达式:用于配置触发器的触发条件,点击添加按钮有条件选项。  ----键值

在这里插入图片描述

在这里插入图片描述
再点击项目右侧的选择,选择我们之前配置过的监控项“redis status”,并设置触发的阀值
Zabbix 会自动生成表达式。接下来根据情况选择事件的严重性。配置完毕后,点击存档保存。

在这里插入图片描述
动作的配置:
点击:配置->动作->事件源下拉菜单中选择触发器->创建动作

名称:
redis-port

默认信息:邮件的主题
主机: {HOST.NAME1}
时间: {EVENT.DATE} {EVENT.TIME}
级别: {TRIGGER.SEVERITY}
触发: {TRIGGER.NAME}
详情: {ITEM.NAME1}:{ITEM.KEY1}:{ITEM.VALUE1}
状态: {TRIGGER.STATUS}
项目:{TRIGGER.KEY1} 
事件ID:{EVENT.ID}

恢复邮件:

恢复主题:
 服务器:【{HOSTNAME1}】故障已恢复。故障原因:{TRIGGER.NAME} 
 恢复信息:恢复邮件的正文。当故障恢复正常后也发邮件通知一下

在这里插入图片描述

在这里插入图片描述
点击:操作->编辑:

在这里插入图片描述
发送间隔:60秒,步骤:发送10次发送到:admin用户,仅使用:邮件报警方式发送

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

需要特别解释一下的是“步骤”部分的配置。所谓步骤是指报警可以有多个步骤,做不同的报警。例如,自从 1 到 3,就是指报警的步骤有三个。步骤持续时间就是一定时间后如果监控人员仍未响应报警就进入下一个报警步骤。
例如,发邮件给你报警,如果60 秒后你没响应,那就发 jabber 信息提醒你。如果 60 秒后还没响应,那就发短信给你。要是还没响应,就没有然后了。你可以形象的把它理解为 Zabbix 的一哭二闹三上吊。
到此,一个邮件报警功能就配置完毕了。如果你想立即看到结果,可以修改触发器的条件,将redis的服务停止掉。你马上就会收到 Zabbix 发来的报警邮件了

在这里插入图片描述


微信报警

配置监控页面,在none1的机器上面安装nginx服务,通过监控80端口获得微信报警:

[root@zabbix-agent-none1 ~]# yum install -y nginx 
[root@zabbix-agent-none1 ~]# systemctl start nginx

开始配置zabibx页面:

配置监控项用于监控web服务

回到监控端的web界面配置监控项

点击配置–>主机–>none1–>监控项–>创建监控项

在这里插入图片描述

在这里插入图片描述
接下来我们要把键值中的host改成被监控端主机IP,path改成我们要监控的网站index.html,port改成端口号80,

修改成服务器的具体信息

在这里插入图片描述

在这里插入图片描述
创建触发器,配置–>主机—>none1—>触发器—>创建触发器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
修改N的值,使他产生报警,这个地方需要等待一段时间

在这里插入图片描述

在这里插入图片描述
开始部署微信

企业微信 
1.下载企业微信 
2.创建企业
3.创建企业应用

登录电脑版企业微信

注册企业微信:

在这里插入图片描述
点击进入管理后台

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将上面的4个值复制下来一会要用到
部门ID:1
企业ID:ww71d562e7070abb71
AgentID:1000002
Secret:2LirWuqIEyqpEBS7cZpwXZLMRZAJB4E1CK9rWYgyeuM

上面好了之后可以配置监控脚本了

python监控脚本:

有4个地方需要修改,找到他们修改成之前获取的信息

self.__corpid = '公司的corpid'
self.__secret = '应用的secret' 
'toparty':2, //部门id 
'agentid':"1000002", //应用id
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/ 
[root@zabbix-server alertscripts]# vim wechat.py 
[root@zabbix-server alertscripts]# cat wechat.py           
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )


class WeChat(object):
        __token_id = ''
        # init attribute
        def __init__(self,url):
                self.__url = url.rstrip('/')
                self.__corpid = 'ww71d562e7070abb71'   ------需要修改成你自己的
                self.__secret = '2LirWuqIEyqpEBS7cZpwXZLMRZAJB4E1CK9rWYgyeuM'   -----需要修改成你自己的


        # Get TokenID
        def authID(self):
                params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
                data = urllib.urlencode(params)


                content = self.getToken(data)


                try:
                        self.__token_id = content['access_token']
                        # print content['access_token']
                except KeyError:
                        raise KeyError


        # Establish a connection
        def getToken(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'gettoken?'
                try:
                        response = urllib2.Request(url + data)
                except KeyError:
                        raise KeyError
                result = urllib2.urlopen(response)
                content = json.loads(result.read())
                return content


        # Get sendmessage url
        def postData(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
                request = urllib2.Request(url,data)
                try:
                        result = urllib2.urlopen(request)
                except urllib2.HTTPError as e:
                        if hasattr(e,'reason'):
                                print 'reason',e.reason
                        elif hasattr(e,'code'):
                                print 'code',e.code
                        return 0
                else:
                        content = json.loads(result.read())
                        result.close()
                return content

        # send message
        def sendMessage(self,touser,message):
                self.authID()
                data = json.dumps({
                        'touser':touser,
                        'toparty':2,    --------需要修改成你自己的
                        'msgtype':"text",
                        'agentid':"1000002",   -------需要修改成你自己的
                        'text':{
                                'content':message
                        },
                        'safe':"0"
                },ensure_ascii=False)


                response = self.postData(data)
                print response

if __name__ == '__main__':
        a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
        a.sendMessage(sys.argv[1],sys.argv[3]) 
        
        
[root@zabbix-server alertscripts]# chown zabbix.zabbix wechat.py
[root@zabbix-server alertscripts]# chmod 777 wechat.py
测试:如果正常会收到如下信息:                        添加的用户  标题 内容
[root@zabbix-server alertscripts]# ./wechat.py wangxiaoxuan test test {u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}
{u'invalidparty': u'2', u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}

在zabbix-server的Dashboard(仪表盘)里进行一系列的操作

创建报警媒介,在媒介里选择脚本,参数{ALERT.SENDTO}{ALERT.SUBJECT}{ALERT.MESSAGE}

点击管理—>报警媒介类型–>创建报警媒介类型

在这里插入图片描述
点击管理—>用户—>admin—报警媒介

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
点击配置–>动作—>事件源选择触发器–>创建动作

在这里插入图片描述

报警信息
主机: {HOST.NAME1}
时间: {EVENT.DATE} {EVENT.TIME}
级别: {TRIGGER.SEVERITY}
触发: {TRIGGER.NAME}
详情: {ITEM.NAME1}:{ITEM.KEY1}:{ITEM.VALUE1}
状态: {TRIGGER.STATUS}
项目:{TRIGGER.KEY1} 
事件ID:{EVENT.ID}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
以上部署完毕后,修改我们触发器的N值,让他产生报警,是我们的企业微信收到报警,收到的报警如图:

在这里插入图片描述
登录zabbix页面查看:

在这里插入图片描述
微信报警完成

发布了8 篇原创文章 · 获赞 4 · 访问量 3647

猜你喜欢

转载自blog.csdn.net/qq_25147521/article/details/104539719