文章目錄
-
- 一、部署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)—> 建立監控項

填寫完畢以後,我們點選下方的添加。
該監控項已成功添加。
我們可以去檢視一下他的值:
檢測中 —> 最新資料
(2)定義觸發器
定義好了監控項以後,我們亦可來定義一個觸發器,當服務有問題的時候,我們才能及時知道:
進入 配置 —> 主機 —> none1 —> 觸發器(trigger)—> 建立觸發器
填寫完畢以後,我們點選下方的添加。
該觸發器已成功添加。
我們去檢視一下:
監測中 —> 最新資料
我們來手動關閉redis服務來檢測一下:
進入 監測中 —> 問題
可以看到,現在已經顯示的是問題了。并且有持續的時間,當我們的服務被打開,會轉為已解決狀态:
(3)定義動作(action)
現在我們就可以去定義action了。
進入 配置 —> 動作 —> 建立動作(注意選擇事件源為觸發器)
我們可以進行操作添加:
我們可以看出,還需要在虛拟機上進行兩項操作,一是修改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
我們添加了第一步需要做的事情,也就是重新開機服務,如果重新開機不成功怎麼辦呢?我們就需要來添加第二步:
添加完成以後,我們可以看一下:
操作添加完了,如果服務自動恢複了,我們可以發送消息來提示:
至此,我們的動作設定完畢,可以點選添加了,添加完成會自動跳轉至如下頁面:
現在我們可以手動停止服務來進行測試:
然後我們來到問題頁面來檢視,發現确實有問題,并且已經解決: 等一會
也可以去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
然後我們将這個動作關閉掉為後期的郵件報警做準備。
二、郵件報警
1、配置需要的郵件資訊
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" 郵箱
編寫郵件腳本
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"
3、web網頁配置(腳本)
(1)添加報警媒介
管理 > 報警媒介類型 > 建立媒體類型![]()
Zabbix 郵件報警、釘釘報警、微信報警
名稱自定義,後面會用到 類型選擇腳本 腳本名稱是之前編輯的腳本名稱 腳本的三個參數:
{ALERT.SENDTO}
{ ALERT.SUBJECT}
{ALERT.MESSAGE}
![]()
Zabbix 郵件報警、釘釘報警、微信報警
(2)添加使用者
管理 > 使用者 > 點選Admin > 報警媒介 > 添加
類型選擇之前自定義的名稱
收件人填自己郵箱
點選添加
點選更新
![]()
Zabbix 郵件報警、釘釘報警、微信報警
(3)建立動作
配置 > 動作 >建立動作 > 删除預設 > 建立動作
添加執行操作
注:也可以自定義消息内容
預設标題 {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
可以看到郵件已經發送過來了,并且儀表闆的問題界面開始閃爍
重新開啟服務後同樣會有郵件發來
3、另一種方式:web網頁配置(電子郵件)
二、釘釘報警
點選機器人的設定,把
webhook
的位址記錄下來(很重要)
建立腳本,賦予執行權限
[[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
測試腳本是否可行
[[email protected] alertscripts]# ./dingding.py 監控報警
{"errcode":0,"errmsg":"ok"}
pc端接收成功:
移動端App接收成功:
在監控頁面建立媒介:
将Admin使用者關聯到此媒介:
收件人填釘釘的
webhook
配置完成
三、微信報警
- 部門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 建立告警媒介
注:(以哪種方式發送報警資訊,短信,腳本等等)
3、zabbix 添加告警使用者
建立使用者組:web-group,包含yangge、alice...等使用者
建立使用者:yangge、alice...等使用者,并關聯到微信告警
希望的結果是:發微信到組web-group,組中的使用者yangge、alice都能收到
5.8 Zabbix 添加報警動作
如果希望中文顯示:
告警主機: {HOST.NAME}
告警位址: {HOST.IP}
監控項目: {ITEM.NAME}
告警等級: {TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警時間: {EVENT.DATE} {EVENT.TIME}
5.9 測試微信報警
被監控端操作
[[email protected] ~]# systemctl stop httpd