天天看點

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 郵件報警、釘釘報警、微信報警