天天看点

Zabbix 邮件报警、钉钉报警、微信报警

文章目录

    • 一、部署server端和agent端
      • 1、实验准备
      • 2、部署zabbix-server【监控端】
        • (1)安装zabbix-server
        • (2)启动mariadb
        • (3)准备数据库及授权
        • (4)导入数据库文件
        • (5)修改zabbix配置文件
        • (6)启动zabbix-server
        • (7)修改Apache配置文件,修改时区
        • (8)启动Apache服务
      • 3、部署zabbix-agent【被监控端】
        • (1)安装zabbix-agent
        • (2)zabbix-agent配置
        • (3)启动zabbix-agent
        • (4)准备网站测试环境(redis)
      • 4、 实现对web服务器监控【监控端】
        • (1)定义监控项
        • (2)定义触发器
        • (3)定义动作(action)
    • 二、邮件报警
      • 1、配置需要的邮件信息
      • 2、zabbix监控端配置
      • 3、web网页配置(脚本)
        • (1)添加报警媒介
        • (2)添加用户
        • (3)创建动作
        • (4)测试
      • 3、另一种方式:web网页配置(电子邮件)
    • 二、钉钉报警
    • 三、微信报警
      • 1、python报警监控脚本
      • 2、zabbix 创建告警媒介
      • 3、zabbix 添加告警用户
            • 5.8 Zabbix 添加报警动作
            • 5.9 测试微信报警

一、部署server端和agent端

1、实验准备

centos7.4 系统服务器2台、 一台作为监控服务器, 一台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。

1)所有机器关闭防火墙和selinux

setenforing 0 (修改配置文件关闭)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
systemctl stop firewalld.service
           

2)根据架构图,实验基本设置如下:

机器名称 IP配置 服务角色 备注
server 192.168.246.228 zabbix-server 开启监控功能
node1 192.168.246.226 zabbix-agent-none1 开启

2、部署zabbix-server【监控端】

(1)安装zabbix-server

(2)启动mariadb

[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# systemctl enable mariadb
           

(3)准备数据库及授权

[[email protected] ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to [email protected] identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> \q
Bye
           

(4)导入数据库文件

[[email protected] ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix
           

(5)修改zabbix配置文件

[[email protected] ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
注意删除前面的空格
           

(6)启动zabbix-server

[[email protected] ~]# systemctl restart zabbix-server zabbix-agent  //重启zabbix服务和agent
[[email protected] ~]# systemctl enable zabbix-server zabbix-agent  //设置为开机自启动
           

(7)修改Apache配置文件,修改时区

[[email protected] ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
           

(8)启动Apache服务

[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# systemctl enable httpd
           

3、部署zabbix-agent【被监控端】

(1)安装zabbix-agent

[[email protected]  ~]# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm     
[[email protected]  ~]# yum -y install zabbix-agent   
           

(2)zabbix-agent配置

[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=47.75.81.162 //zabbix-server IP 即监控端的IP
ServerActive=47.75.81.162 //zabbix-server IP 即监控端的IP
UnsafeUserParameters=1 是否限制用户自定义 keys 使用特殊字符 1是可以启用特殊字符 0是不可以启用特殊字符
EnableRemoteCommands=0 是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.
           

(3)启动zabbix-agent

[[email protected] ~]# systemctl start zabbix-agent
[[email protected]  ~]# systemctl enable zabbix-agent
           

(4)准备网站测试环境(redis)

如果已经在前安装redis,则不需要操作

首先,我们在agent端使用yum安装一下

redis

[[email protected] ~]# yum -y install epel-release
[[email protected] ~]# yum install -y redis
           

修改一下配置文件:

[[email protected] ~]# vim /etc/redis.conf 
bind 0.0.0.0        #不做任何认证操作
           

修改完成以后,我们启动服务,并检查端口:

[[email protected] ~]# systemctl start redis
[[email protected] ~]# netstat -lntp | grep redis 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1353/redis-server 0
           

4、 实现对web服务器监控【监控端】

接着,我们就可以去网站上来定义相关的操作了

(1)定义监控项

进入 配置 —> 主机 —> node1 —> 监控项(items)—> 创建监控项

Zabbix 邮件报警、钉钉报警、微信报警

填写完毕以后,我们点击下方的添加。

Zabbix 邮件报警、钉钉报警、微信报警

该监控项已成功添加。

  我们可以去查看一下他的值:

  检测中 —> 最新数据

Zabbix 邮件报警、钉钉报警、微信报警

(2)定义触发器

定义好了监控项以后,我们亦可来定义一个触发器,当服务有问题的时候,我们才能及时知道:

  进入 配置 —> 主机 —> none1 —> 触发器(trigger)—> 创建触发器

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

 填写完毕以后,我们点击下方的添加。

Zabbix 邮件报警、钉钉报警、微信报警

该触发器已成功添加。

  我们去查看一下:

  监测中 —> 最新数据

Zabbix 邮件报警、钉钉报警、微信报警

我们来手动关闭redis服务来检测一下:

进入 监测中 —> 问题

Zabbix 邮件报警、钉钉报警、微信报警

可以看到,现在已经显示的是问题了。并且有持续的时间,当我们的服务被打开,会转为已解决状态:

Zabbix 邮件报警、钉钉报警、微信报警

(3)定义动作(action)

现在我们就可以去定义action了。

进入 配置 —> 动作 —> 创建动作(注意选择事件源为触发器)

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

我们可以进行操作添加:

Zabbix 邮件报警、钉钉报警、微信报警

我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:

[[email protected] ~]# visudo          #相当于“vim /etc/sudoers”
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)   ALL
    zabbix    ALL=(ALL)   NOPASSWD:ALL     #添加的一行,表示不需要输入密码

[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf
    EnableRemoteCommands=1          #允许接收远程命令
    LogRemoteCommands=1             #把接收的远程命令记入日志

[[email protected] ~]# systemctl restart zabbix-agent.service
           

我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:

Zabbix 邮件报警、钉钉报警、微信报警

添加完成以后,我们可以看一下:

Zabbix 邮件报警、钉钉报警、微信报警

操作添加完了,如果服务自动恢复了,我们可以发送消息来提示:

Zabbix 邮件报警、钉钉报警、微信报警

至此,我们的动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:

Zabbix 邮件报警、钉钉报警、微信报警

现在我们可以手动停止服务来进行测试:

然后我们来到问题页面来查看,发现确实有问题,并且已经解决: 等一会

Zabbix 邮件报警、钉钉报警、微信报警

也可以去agent端查看端口是否开启:

[[email protected] ~]# systemctl stop redis 
[[email protected] ~]# netstat -lntp | grep redis 
[[email protected] ~]# netstat -lntp | grep redis 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      1957/redis-server 0

查看邮箱是否成功
[[email protected] ~]# yum -y install mailx
[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 unread
>U  1 [email protected]  Thu Oct 10 00:51  21/865   "Resolved: redis service down"

邮箱也已经成功
           

可以看出端口正常开启,我们的动作触发已经完成。

补充:我们也可以使用脚本来发送警报,我们的脚本存放路径在配置文件中可以找到,定义为:

AlterScriptsPath=/usr/lib/zabbix/alertscripts

然后我们将这个动作关闭掉为后期的邮件报警做准备。

Zabbix 邮件报警、钉钉报警、微信报警

二、邮件报警

1、配置需要的邮件信息

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

2、zabbix监控端配置

yum -y install mailx

vim /etc/mail.rc
'//末尾添加'
set from=邮箱
set smtp=smtp.qq.com
set smtp-auth-user=邮箱
set smtp-auth-password=邮箱授权码
set smtp-auth=login
           

测试下邮件是否可以发送

echo "hello tomorrow" | mail -s "test" 邮箱
           
Zabbix 邮件报警、钉钉报警、微信报警

编写邮件脚本

cd /usr/lib/zabbix/alertscripts
vim mailx.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
           

创建日志文件并修改权限并测试

touch /tmp/mailx.log
chown -R zabbix.zabbix  /tmp/mailx.log 
chmod +x mailx.sh 
chown -R zabbix.zabbix /usr/lib/zabbix/
sh mailx.sh 邮箱 zabbix "this is test"
           
Zabbix 邮件报警、钉钉报警、微信报警

3、web网页配置(脚本)

(1)添加报警媒介

管理 > 报警媒介类型 > 创建媒体类型
Zabbix 邮件报警、钉钉报警、微信报警

名称自定义,后面会用到 类型选择脚本 脚本名称是之前编辑的脚本名称 脚本的三个参数:

{ALERT.SENDTO}

{ ALERT.SUBJECT}

{ALERT.MESSAGE}

Zabbix 邮件报警、钉钉报警、微信报警

(2)添加用户

管理 > 用户 > 点击Admin > 报警媒介 > 添加

类型选择之前自定义的名称

收件人填自己邮箱

点击添加

点击更新

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

(3)创建动作

配置 > 动作 >创建动作 > 删除默认 > 创建动作
Zabbix 邮件报警、钉钉报警、微信报警

添加执行操作

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

注:也可以自定义消息内容

默认标题   {TRIGGER.STATUS}:{TRIGGER.NAME}
消息内容   告警主机:{HOST.NAME}
          告警IP:{HOST.IP}
          告警时间:{EVENT.DATE}-{EVENT.TIME}
          告警等级:{TRIGGER.SEVERITY}
          告警信息:{TRIGGER.NAME}-{ITEM.VALUE}
          事件ID:{EVENT.ID}
           

添加恢复操作

除了消息内容的模板,其他和上一步基本一致
Zabbix 邮件报警、钉钉报警、微信报警
默认标题   {TRIGGER.STATUS}:{TRIGGER.NAME}

消息内容   恢复主机:{HOST.NAME}
          恢复IP:{HOST.IP}
          恢复时间:{EVENT.DATE}-{EVENT.TIME}
          恢复等级:{TRIGGER.SEVERITY}
          恢复信息:{TRIGGER.NAME}-{ITEM.VALUE}
          事件ID:{EVENT.ID}
           

最后再确认一下操作是不是都添加完成了,如果没完成是不会发送邮件的!!

(4)测试

被监控端停止sshd服务

systemctl stop redis
           

可以看到邮件已经发送过来了,并且仪表板的问题界面开始闪烁

重新开启服务后同样会有邮件发来

Zabbix 邮件报警、钉钉报警、微信报警

3、另一种方式:web网页配置(电子邮件)

Zabbix 邮件报警、钉钉报警、微信报警

二、钉钉报警

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

点击机器人的设置,把

webhook

的地址记录下来(很重要)

Zabbix 邮件报警、钉钉报警、微信报警

创建脚本,赋予执行权限

[[email protected] ~]# cd /usr/lib/zabbix/alertscripts
[[email protected] alertscripts]# vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: sxdswc999 
import requests
import json
import sys
import os
 
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = ""  #机器人的Webhook地址
 
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                ""    #手机号
            ],
            "isAtAll": False
        }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
     
if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)
[[email protected] alertscripts]# chmod +x dingding.py
           

安装python-pip和requests库

[[email protected] alertscripts]# yum -y install epel-release
[[email protected] alertscripts]# yum -y install python-pip
[[email protected] alertscripts]# pip install requests
           
Zabbix 邮件报警、钉钉报警、微信报警

测试脚本是否可行

[[email protected] alertscripts]# ./dingding.py 监控报警
{"errcode":0,"errmsg":"ok"}
           
Zabbix 邮件报警、钉钉报警、微信报警

pc端接收成功:

Zabbix 邮件报警、钉钉报警、微信报警

移动端App接收成功:

Zabbix 邮件报警、钉钉报警、微信报警

在监控页面创建媒介:

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

将Admin用户关联到此媒介:

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

收件人填钉钉的

webhook

Zabbix 邮件报警、钉钉报警、微信报警

配置完成

三、微信报警

  • 部门ID
    Zabbix 邮件报警、钉钉报警、微信报警
  • AgentID和Secret
    Zabbix 邮件报警、钉钉报警、微信报警
    Zabbix 邮件报警、钉钉报警、微信报警
  • 企业ID
    Zabbix 邮件报警、钉钉报警、微信报警

1、python报警监控脚本

需要修改脚本中的四个信息:
self.__corpid = 'wwd5348195e1cdd809' //公司的corpid
self.__secret = '2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4Tkgr6xQ' //应用的secret
'toparty':1, //部门id
'agentid':"1000002", //应用id
           
[[email protected] ~]# vim /usr/lib/zabbix/alertscripts/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 = 'wwd2385f23ad80ecef'
				self.__secret = '3gsEC6Mv3vQmdG5MOJBF65U0KzTl-1v2GKQhr479uso'
		# 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':1,
                    	'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]

           

监控脚本测试:

注:Youngfit为上图的企业微信名 test为标题 yufei为内容,标题和内容均可自定义

[[email protected] ~]# /usr/lib/zabbix/alertscripts/wechat.py Youngfit test yufei
{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}
           

2、zabbix 创建告警媒介

注:(以哪种方式发送报警信息,短信,脚本等等)

Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

3、zabbix 添加告警用户

创建用户组:web-group,包含yangge、alice...等用户
创建用户:yangge、alice...等用户,并关联到微信告警
希望的结果是:发微信到组web-group,组中的用户yangge、alice都能收到
           
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

5.8 Zabbix 添加报警动作

如果希望中文显示:
告警主机: {HOST.NAME}
告警地址: {HOST.IP}
监控项目: {ITEM.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
           
Zabbix 邮件报警、钉钉报警、微信报警
Zabbix 邮件报警、钉钉报警、微信报警

5.9 测试微信报警

被监控端操作

[[email protected] ~]# systemctl stop httpd
           
Zabbix 邮件报警、钉钉报警、微信报警