zabbix實現郵件,短信,微信報警

1、描述常見監控系統及SNMP協議
2、搭建企業級zabbix,實現自動以郵件和短信報警

1、描述常見監控系統及SNMP協議

監控系統即用於監控生產環境所使用的硬件、軟件或者是業務的運行情況的報警系統。其能夠對生產環境所產生的異常作出報警,使得管理員能夠及時獲知報警信息,保證業務的正常運行。常見的監控項有 :
服務器CPU,內存,磁盤,進程,連接數 Web,Mail,FTP,數據庫,中間件 網絡接口流量,轉發速率,丟包率 網絡設備性能,配置文件,路由數 安全設備性能,連接數,攻擊數 設備運行狀態
目前比較流行的開源監控系統有:zabbix、cacti、nagios、ganglia等等。

SNMP協議

SNMP協議在1988年被制定,並被Internet體系結構委員會(IAB)採納作爲一個短期的網絡管理解決方案;由於SNMP的簡單性,在Internet時代得到了蓬勃的發展,1992年發佈了SNMPv2版本,以增強SNMPv1的安全性和功能。現在,已經有了SNMPv3版本。

一套完整的SNMP系統主要包括管理信息庫(MIB)、管理信息結構(SMI)及SNMP報文協議。
在snmp中一般來說由三種組件組成:

  • 網絡設備:指在網絡中需要管理和監控的設備,例如提供服務的服務器、路由器等,這些設備必須支持snmp協議;
  • 管理組件:一般來說指的是運行網絡管理系統的計算機(也可以指在這個計算機上運行的監控軟件),這個計算機可能與被管理的網絡設備在地理上隔絕的,但是可以遠程監控和管理網絡設備,例如網吧的網管的電腦就可以看做一個管理組件,可以用來監控每個電腦的運行,以及管理你上網的時間並提出預警;
  • 代理Agent:這是指運行在被管理設備上的一個軟件模塊,用來維護被管理設備的管理信息數據並可在需要時把管理數據發送給管理組件;

代理保有MIB(Management Information Base)對象變量,可以從管理信息庫MIB收集信息並回傳給管理組件;
MIB庫是一個保存網絡管理信息的虛擬數據存儲空間,由多組被管理對象組成。在網絡設備的MIB庫中有由多個MIB模塊定義的多組各自相關聯的對象,其實說白了裏面存儲的是網絡設備的屬性,比如什麼CPU信息、IO讀寫率等等;

2、搭建企業級zabbix,實現自動以郵件和短信報警

爲什麼我們需要編譯安裝zabbix,編譯安裝好後可以創建一個軟鏈接,如果想要升級了將軟連接指向新編譯安裝的軟件目錄即可。

1.安裝Zabbix server

安裝依賴包:

yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel –y

準備數據庫:

mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'192.168.31.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

編譯安裝:

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-snmp --with-libcurl --with-libxml2 --enable-java
如果提示缺少libevent安裝上即可

拷貝啓動腳本

cp misc/init.d/fedora/core/zabbix_* /etc/init.d/

導入數據庫

mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/schema.sql
如果是agent只需要導入上面一個,如果是server則還需要導入下面兩個
mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/images.sql
mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/data.sql

更改啓動腳本

vim /etc/init.d/zabbix_server
vim /etc/init.d/zabbix_agent
21 # Zabbix-Directory
22 BASEDIR=/usr/local/zabbix

編輯zabbix_server.con配置文件

useradd zabbix -s /sbin/nologin
mkdir /var/log/zabbix && chown zabbix.zabbix /var/log/zabbix –R
vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix.log
DBHost=192.168.31.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
Timeout=30

配置web界面

安裝httpd:
yum install httpd -y
mkdir /var/www/html/zabbix
cp -a /root/packages/zabbix-4.0.3/frontends/php/* /var/www/html/zabbix
systemctl restart httpd
systemctl enable httpd
chkconfig zabbix_server on

13920922-d1abc55a2587978c.png
image.png

上面報錯是因爲缺少一些軟件包,執行下面的命令
yum install php-gettext php-session php-ctype php-xmlreader php-xmlwriter php-xml php-net-socket php-gd php-mysql
再更改php的配置
vim /etc/php.ini:
post_max_size = 8M 改爲 post_max_size = 16M
max_execution_time = 30 改爲 max_execution_time = 300 max_input_time = 60 改爲 max_input_time = 300
date.timezone = 改爲 date.timezone = Asia/Shanghai


13920922-2c7912befc0b28d3.png
image.png

成功登陸上去了

字體亂碼得解決辦法

支持中文顯示:
下載字體文件simkai.rr
複製字體文件上傳到服務器:/var/www/html/zabbix/fonts/
編輯文件使用新字體
vim /var/www/html/zabbix/include/defines.inc.php
修改define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
至此zabbix已經安裝好了,接下來我們配置各種報警方式

郵件報警

yum install mailx -y

vi /etc/mail.rc //注意需要開啓客戶端授權碼進行第三方登錄,而不是使用密碼

set [email protected]
set smtp=smtp.163.com
set [email protected]
set smtp-auth-password=abc123
set smtp-auth=login

echo "tttt" | mail -s "testmail" [email protected] //測試發信正常

13920922-ddda16d88e7f530a.png
image.png

編寫發郵件腳本

mkdir /usr/lib/zabbix/alertscripts -pv
vim /usr/lib/zabbix/alertscripts/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

[root@node1 ~]# touch /tmp/mailx.log
[root@node1 ~]# chown -R zabbix.zabbix /tmp/mailx.log
[root@node1 ~]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
[root@node1 ~]# chown -R zabbix.zabbix /usr/lib/zabbix/
[root@node1 alertscripts]# ./mailx.sh [email protected] "主題" "內容" //測試發郵件腳本是否可以正常工 作

13920922-06f5eada603d39db.png
image.png

接下來我們配置zabbix的web界面
13920922-c01ae45afac4a7e5.png
image.png

13920922-d9f6c4e77b878c98.png
image.png
13920922-8259a5ffa2cdcf65.png
image.png

13920922-02631d3c06a82c55.png
image.png
13920922-ea2d7c473db34c1c.png
image.png

修改zabbix_server執行腳本的路徑

vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

然後我們測試一下,systemctl stop zabbix_zgentd


13920922-2e462aab31b3540e.png
image.png

systemctl start zabbix_zgentd


13920922-a34aa6dfb5aee4d0.png
image.png

短信報警

短信報警藉助於第三方平臺,與郵件報警指定第三方的郵件服務器類似,我們需要指定短信發送服務器,這裏我們以中國網建SMS短信通爲例,其官網地址如下:
http://sms.webchinese.com.cn/api.shtml
告警的腳本文件

#!/bin/bash                                                                                                         

# 腳本的日誌文件
LOGFILE="/tmp/SMS.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1

MOBILE_NUMBER=$1    # 手機號碼
MESSAGE_UTF8=$3     # 短信內容
XXD="/usr/bin/xxd"
CURL="/usr/bin/curl"
TIMEOUT=5

# 短信內容要經過URL編碼處理
MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n')

# Uid和Key的值需要自行修改,http://www.smschinese.cn/api.shtml
# Uid 網站用戶名
# Key 接口祕鑰
Uid="###"    
Key="###"   #接口祕鑰可以在網站中查詢到
# SMS API
URL="http://utf8.api.smschinese.cn/?Uid=${Uid}&Key=${Key}&smsMob=${MOBILE_NUMBER}&smsText=${MESSAGE_ENCODE}"

# Send it
set -x
${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"

測試一下
./send_msg.sh 17757008469 "尊敬的客戶,您的訂單已出庫發貨,正在配送中,請您耐心等待。"
web界面配置同上

QQ消息告警

首選需要註冊一個企業微信https://work.weixin.qq.com
添加子部門

13920922-883609202dd0a00c.png

添加成員
13920922-8da22f4c1469e587.png
image.png

創建應用
13920922-712689c54e8f1931.png
image.png

13920922-1897c0cb075d966f.png
image.png

準備事項

企業號已經被部門成員關注
企業號有一個可以發送消息的應用,一個授權管理員,可以使用應用給成員發送消息

安裝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

配置監控腳本

#!/usr/bin/python
#_*_coding:utf-8 _*_

import urllib,urllib2
import json
import sys
import simplejson

reload(sys)
sys.setdefaultencoding('utf-8')

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":"8813418",    #企業號中的用戶帳號,在zabbix用戶Media中配置,如果配置不正常,將按部門發送。
        "toparty":"2",    #企業號中的部門id。
        "msgtype":"text", #消息類型。
        "agentid":"1000002",    #企業號中的應用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 =  'ww76d7749ca2a9801b'   #CorpID是企業號的標識
    corpsecret = 'k53_6pJ7cDFlKpbAUba88jagtZkSdchROUIy1Fytg3M'  #corpsecretSecret是管理組憑證密鑰
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

測試一下
./wechat.py user 報警測試 error

13920922-faa227eebf1188ae.png

zabbix web界面配置

13920922-26a751acb98febd3.png
image.png

創建報警用戶


13920922-563d04d623edc31f.png
image.png

配置用戶報警媒介(選擇剛纔創建的)


13920922-19cebdce82e5131e.png
image.png

創建動作
13920922-1d7a7292ea01e207.png
image.png

13920922-5bfa02da185b15b9.png
image.png

13920922-cd46f98d2dc48bb6.png
image.png

最後我們測試systemctl stop zabbix_agentd


13920922-1172b961353257c6.png
image.png
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章