在公司搭建系統(tǒng)級(jí)別的監(jiān)控劲蜻,由于ELK對(duì)流量監(jiān)控存在局限——現(xiàn)有的工具只記錄了累計(jì)的流量,而無(wú)法計(jì)算每時(shí)每刻的流量考余。所以決定最后用zabbix來(lái)對(duì)網(wǎng)絡(luò)做監(jiān)控和報(bào)警先嬉,下面會(huì)從零開始記錄zabbix搭建過(guò)程中的所有步驟,希望可以給你帶來(lái)幫助楚堤。
安裝前準(zhǔn)備工作
安裝必要的軟件疫蔓,禁用SELINUX
,安裝必備軟件
$ sudo setenforce 0
$ sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
$ sudo yum install epel-release.noarch wget vim gcc gcc-c++ lsof chrony tree nmap unzip rsync -y
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
LAMP環(huán)境搭建
安裝
$ sudo yum install -y httpd mariadb mariadb-server mariadb-client php php-mysql
啟動(dòng)mysql
身冬,設(shè)置開機(jī)啟動(dòng)衅胀,修改mysql
密碼,注意下面的yourpassword
要替換為你自己的密碼
$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service #設(shè)置開機(jī)啟動(dòng)
$ sudo mysqladmin -u root -p password yourpassword
安裝zabbix服務(wù)
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
$ sudo yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-get zabbix-agent
創(chuàng)建zabbix數(shù)據(jù)庫(kù)
$ mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [(none)]> quit
導(dǎo)入數(shù)據(jù)
$ cd /usr/share/doc/zabbix-server-mysql-3.0.11/
$ zcat create.sql.gz | mysql -uroot -p zabbix
修改zabbix配置
注意:下面的yourpasswd
請(qǐng)?zhí)鎿Q為你自己的數(shù)據(jù)庫(kù)密碼
$ sudo vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=root
DBPassword=yourpasswd
修改時(shí)區(qū)
sudo vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Chongqing
修改zabbix登錄密碼(可選)
-bash-4.2$ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 326
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)]> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [zabbix]> select userid, alias, name, passwd from users;
+--------+-------+--------+----------------------------------+
| userid | alias | name | passwd |
+--------+-------+--------+----------------------------------+
| 1 | Admin | Zabbix | 5fce1b3e34b520afeffb37ce08c7cd66 |
| 2 | guest | | d41d8cd98f00b204e9800998ecf8427e |
+--------+-------+--------+----------------------------------+
2 rows in set (0.00 sec)
MariaDB [zabbix]> update users set passwd=md5('newpassword') where userid='1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
啟動(dòng)
$ sudo systemctl start httpd
$ sudo systemctl start zabbix-server
$ sudo systemctl start zabbix-agent
設(shè)置開機(jī)啟動(dòng)
$ sudo systemctl enable httpd
$ sudo systemctl enable zabbix-server
$ sudo systemctl enable zabbix-agent
通過(guò)http://hostname/zabbix
訪問(wèn)zabbix的安裝頁(yè)面酥筝,填寫安裝信息滚躯,完成安裝。完成安裝后嘿歌,初始登錄賬戶密碼為Admin/zabbix
掸掏。
安裝zabbix-agent
zabbix-server
安裝好了,下面需要“接入”其他機(jī)器搅幅,將它們納入到zabbix-server
的管理阅束,下面是安裝步驟
$ sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
$ sudo yum install -y zabbix-agent
配置zabbix-agent
$ grep -Ev "^$|#" /etc/zabbix/zabbix_agentd.conf
# zabbix-server
Server=192.168.8.4
# 這里選擇主動(dòng)連接zabbix-server的方式
ServerActive=192.168.8.4
# 本機(jī)的hostname
Hostname=192.168.8.5
啟動(dòng)zabbix-agent
$ sudo systemctl start zabbix-agent.service
$ sudo systemctl enable zabbix-agent.service
下面在zabbix-server
頁(yè)面上添加這個(gè)機(jī)器
按下圖填寫即可
注意:中間的Agent interfaces是提供給Zabbix Server調(diào)用的接口,需確保該ip和port可以訪問(wèn)
接著綁定模板
最后點(diǎn)擊Update
茄唐,你就可以在Host
目錄中看到所有被監(jiān)控的機(jī)器列表
注意:如果zabbix-agent需要被其他機(jī)器調(diào)用息裸,例如通過(guò)zabbix_get
獲得監(jiān)控信息,需要在防火墻設(shè)置“放開10050端口”
監(jiān)控網(wǎng)絡(luò)流量
假設(shè)我們要監(jiān)控機(jī)器192.168.8.5
網(wǎng)卡em1
上的出入口流量沪编,我們可以先在zabbix服務(wù)器上用zabbix_get
命令來(lái)測(cè)試一下呼盆,下面代碼測(cè)試的是輸入流量,注意這里的輸出是一個(gè)累積的流量
$ zabbix_get -s 192.168.8.5 -k net.if.in[em1,bytes]
468127618
監(jiān)控網(wǎng)絡(luò)流量的流程為:
-
創(chuàng)建模板
-
創(chuàng)建監(jiān)控項(xiàng)
創(chuàng)建應(yīng)用:Configuration->Templates->Create application
創(chuàng)建監(jiān)控項(xiàng):Configuration->Templates->network traffic on em1->Items->Create Item
上圖是入口流量的監(jiān)控項(xiàng)設(shè)置蚁廓,出口流量監(jiān)控項(xiàng)network traffic out em1
可以一樣設(shè)置访圃,成功后你看到的是
-
創(chuàng)建Triggers
Triggers
是觸發(fā)報(bào)警的設(shè)置,同樣我們點(diǎn)擊Configuration->Templates->network traffic on em1->Triggers->Create trigger
來(lái)創(chuàng)建Triggers
注意在設(shè)置Expression
時(shí)相嵌,我們可以利用zabbix
提供給我們的模板
于是腿时,入口流量的觸發(fā)值就設(shè)置好了况脆,每秒流量超過(guò)1048576時(shí)就會(huì)觸發(fā)報(bào)警,同理我們可以設(shè)置出口流量的觸發(fā)值批糟,成功后格了,我們看到的是
-
創(chuàng)建Graphs
接著,我們?cè)賮?lái)創(chuàng)建Graphs
徽鼎,Graphs
可以以圖形化的方式展示流量信息盛末,點(diǎn)擊Configuration->Templates->network traffic on em1->Graphs->Create graph
,創(chuàng)建Graphs
的最大好處是我們可以把這些Graphs
組合起來(lái)形成Screens
監(jiān)控面板否淤,例如下面這樣
下面是創(chuàng)建Graphs
的表單
-
綁定Template
至此悄但,我們模板就創(chuàng)建完畢了,最后一步需要把主機(jī)和模板關(guān)聯(lián)起來(lái)石抡,點(diǎn)擊Configuration->Hosts->Templates->Select
創(chuàng)建關(guān)聯(lián)檐嚣,然后點(diǎn)擊Add
此時(shí),通過(guò)Monitoring->Latest data
可以看到網(wǎng)卡上的最新數(shù)據(jù)汁雷,同時(shí)可以通過(guò)Monitoring->Graphs
來(lái)查看圖形化的數(shù)據(jù)
自定義script報(bào)警
當(dāng)系統(tǒng)出現(xiàn)異常時(shí)净嘀,我們需要立即發(fā)現(xiàn),并通過(guò)郵件或App的方式通知給維護(hù)的同學(xué)侠讯,這樣整個(gè)系統(tǒng)才會(huì)掌控在我們手中,Zabbix要做到這一點(diǎn)暑刃,需要配置以下3個(gè)選項(xiàng)(zabbix雖然很強(qiáng)大厢漩,但配置和UI有點(diǎn)繁瑣,這是我不喜歡它的地方):
- Media types
- Events
- User Media
Media types
Media types
是當(dāng)產(chǎn)生事件時(shí)岩臣,以什么方式進(jìn)行通知溜嗜,這里采用的是Script
方式,這種方式的靈活性最大架谎,通過(guò)這種方式炸宵,我們可以把報(bào)警發(fā)送到任何支持Webhook
的App上,例如釘釘
Script
這種方式的原理是:我們把可執(zhí)行的腳本放在zabbix
的指定目錄下谷扣,當(dāng)事件發(fā)生時(shí)土全,zabbix
會(huì)自動(dòng)調(diào)用該腳本,可以在/etc/zabbix/zabbix_server.conf
中找到指定目錄的路徑
AlertScriptsPath=/usr/lib/zabbix/alertscripts
Media types
設(shè)置如下会涎,意思是在/usr/lib/zabbix/alertscripts
下存在一個(gè)腳本dingding.py
裹匙,當(dāng)事件發(fā)生時(shí),zabbix
會(huì)調(diào)用該腳本末秃,同時(shí)會(huì)傳入該腳本3個(gè)參數(shù)概页,這3個(gè)參數(shù)分別是事件的接收人、事件的主題练慕、事件的內(nèi)容
dingding.py
這個(gè)腳本如下惰匙,我們先實(shí)現(xiàn)一個(gè)簡(jiǎn)單的版本技掏,也就是把這3個(gè)參數(shù)輸出到日志中
#!/usr/bin/python
import logging, sys
if __name__ == "__main__":
logger = logging.getLogger()
handler = logging.FileHandler("/var/log/zabbix/dingding_alert.log")
formatter = logging.Formatter('%(asctime)s %(name)-s %(levelname)-s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
if len(sys.argv) == 4:
send_to = sys.argv[1]
subject = sys.argv[2]
content = sys.argv[3]
logger.debug("send_to: %s" % send_to)
logger.debug("subject: %s" % subject)
logger.debug("content: %s" % content)
else:
logger.error("usage: ./dingding.py $send_to $subject $content")
設(shè)置腳本的權(quán)限
$ sudo chown zabbix.zabbix dingding.py
$ sudo chmod +x dingding.py
Events
事件是當(dāng)某個(gè)條件發(fā)生時(shí),zabbix
所創(chuàng)建的報(bào)警對(duì)象项鬼。在zabbix
中哑梳,事件發(fā)生時(shí)和事件恢復(fù)時(shí)都可以觸發(fā)事件,下面我們來(lái)創(chuàng)建一個(gè)事件秃臣,
可以看到涧衙,這里的事件主題和事件消息都是系統(tǒng)默認(rèn)生成的,其中包括時(shí)間產(chǎn)生時(shí)的必要信息奥此,同時(shí)我把允許事件恢復(fù)時(shí)通知(Recovery message)打了勾弧哎,
Conditions
標(biāo)簽頁(yè)的內(nèi)容保持不變,然后我們?cè)賮?lái)修改Operations
標(biāo)簽里的內(nèi)容這里的意思是:事件的持續(xù)時(shí)間是1個(gè)小時(shí)(3600s)稚虎,每隔2分鐘(120s)產(chǎn)生一個(gè)事件撤嫩,一共產(chǎn)生10個(gè)事件,產(chǎn)生事件時(shí)蠢终,發(fā)送給
Zabbix administrators
用戶組中的Admin
用戶序攘,最后事件會(huì)使用我們剛剛創(chuàng)建的dingding
這種Media type
User Media
事件和Media type
創(chuàng)建好后,下面還需要把它們和指定用戶關(guān)聯(lián)起來(lái)寻拂,點(diǎn)擊Administration->Users->Media->Add
程奠,修改后,點(diǎn)擊Update
通過(guò)以上步驟祭钉,我們已經(jīng)把
zabbix
的監(jiān)控和報(bào)警建立起來(lái)了瞄沙,并實(shí)操創(chuàng)建了網(wǎng)卡的流量監(jiān)控,現(xiàn)在我們把網(wǎng)絡(luò)流量的閾值調(diào)到小慌核,故意制造一個(gè)超出流量的事故距境,看一下報(bào)警是否生效,我們預(yù)期是發(fā)送10個(gè)報(bào)警垮卓,發(fā)送完畢后垫桂,我們?cè)侔验撝嫡{(diào)到正常,看下是否會(huì)收到恢復(fù)消息粟按。還記得之前寫的那個(gè)腳本嗎诬滩,它會(huì)把報(bào)警內(nèi)容輸出到日志文件中,現(xiàn)在我們檢查下日志文件
$ grep subject /var/log/zabbix/dingding_alert.log
2017-10-12 19:01:09,262 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:03:09,373 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:05:09,484 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:07:09,583 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:09:09,696 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:11:09,814 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:13:09,929 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:15:10,040 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:17:10,164 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:19:10,263 root DEBUG subject: PROBLEM: network traffic incoming on em1 > 1M on 192.168.8.5
2017-10-12 19:30:10,477 root DEBUG subject: OK: network traffic incoming on em1 > 1M on 192.168.8.5
很顯然钾怔,結(jié)果符合我們的預(yù)期碱呼。
以上便是入門zabbix
的全部?jī)?nèi)容,后面的文章我們會(huì)具體實(shí)現(xiàn)dingding.py
報(bào)警腳本宗侦,讓你真正的可以在手機(jī)上收到報(bào)警信息愚臀。
參考
- https://enginx.cn/2016/10/18/%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AEzabbix-agent-%E6%B7%BB%E5%8A%A0%E7%9B%91%E6%8E%A7%E7%82%B9.html
- http://732233048.blog.51cto.com/9323668/1639752
- http://www.reibang.com/p/9daaf8251068
- http://jaminzhang.github.io/monitoring/Zabbix-Custom-Alert-Script/
- http://www.reibang.com/p/4d98ff87db5f