在公司搭建系統級別的監控,由於ELK對流量監控存在侷限——現有的工具只記錄了累計的流量,而無法計算每時每刻的流量。所以決定最後用zabbix來對網絡做監控和報警,下面會從零開始記錄zabbix搭建過程中的所有步驟,希望可以給你帶來幫助。
安裝前準備工作
安裝必要的軟件,禁用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環境搭建
安裝
$ sudo yum install -y httpd mariadb mariadb-server mariadb-client php php-mysql
啟動mysql,設置開機啟動,修改mysql密碼,注意下面的yourpassword要替換為你自己的密碼
$ sudo systemctl start mariadb.service $ sudo systemctl enable mariadb.service #設置開機啟動 $ sudo mysqladmin -u root -p password yourpassword
安裝zabbix服務
$ 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
創建zabbix數據庫
$ mysql -uroot -p MariaDB [(none)]> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; MariaDB [(none)]> quit
導入數據
$ cd /usr/share/doc/zabbix-server-mysql-3.0.11/ $ zcat create.sql.gz | mysql -uroot -p zabbix
修改zabbix配置
注意:下面的yourpasswd請替換為你自己的數據庫密碼
$ sudo vim /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=root DBPassword=yourpasswd
修改時區
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
啟動
$ sudo systemctl start httpd $ sudo systemctl start zabbix-server $ sudo systemctl start zabbix-agent
設置開機啟動
$ sudo systemctl enable httpd $ sudo systemctl enable zabbix-server $ sudo systemctl enable zabbix-agent
通過http://hostname/zabbix訪問zabbix的安裝頁面,填寫安裝信息,完成安裝。完成安裝後,初始登錄賬戶密碼為Admin/zabbix。
安裝zabbix-agent
zabbix-server安裝好了,下面需要“接入”其他機器,將它們納入到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 # 這裡選擇主動連接zabbix-server的方式 ServerActive=192.168.8.4 # 本機的hostname Hostname=192.168.8.5
啟動zabbix-agent
$ sudo systemctl start zabbix-agent.service $ sudo systemctl enable zabbix-agent.service
下面在zabbix-server頁面上添加這個機器
按下圖填寫即可
接著綁定模板
最後點擊Update,你就可以在Host目錄中看到所有被監控的機器列表
注意:如果zabbix-agent需要被其他機器調用,例如通過zabbix_get獲得監控信息,需要在防火牆設置“放開10050端口”
監控網絡流量
假設我們要監控機器192.168.8.5網卡em1上的出入口流量,我們可以先在zabbix服務器上用zabbix_get命令來測試一下,下面代碼測試的是輸入流量,注意這裡的輸出是一個累積的流量
監控網絡流量的流程為:
1、創建模板
2、創建監控項
創建應用:Configuration->Templates->Create application
創建監控項:Configuration->Templates->network traffic on em1->Items->Create Item
上圖是入口流量的監控項設置,出口流量監控項network traffic out em1可以一樣設置,成功後你看到的是
3、創建Triggers
Triggers是觸發報警的設置,同樣我們點擊Configuration->Templates->network traffic on em1->Triggers->Create trigger來創建Triggers
注意在設置Expression時,我們可以利用zabbix提供給我們的模板
於是,入口流量的觸發值就設置好了,每秒流量超過1048576時就會觸發報警,同理我們可以設置出口流量的觸發值,成功後,我們看到的是
4、創建Graphs
接著,我們再來創建Graphs,Graphs可以以圖形化的方式展示流量信息,點擊Configuration->Templates->network traffic on em1->Graphs->Create graph,創建Graphs的最大好處是我們可以把這些Graphs組合起來形成Screens監控面板,例如下面這樣
下面是創建Graphs的表單
5、綁定Template
至此,我們模板就創建完畢了,最後一步需要把主機和模板關聯起來,點擊Configuration->Hosts->Templates->Select創建關聯,然後點擊Add
此時,通過Monitoring->Latest data可以看到網卡上的最新數據,同時可以通過Monitoring->Graphs來查看圖形化的數據
自定義script報警
當系統出現異常時,我們需要立即發現,並通過郵件或App的方式通知給維護的同學,這樣整個系統才會掌控在我們手中,Zabbix要做到這一點,需要配置以下3個選項(zabbix雖然很強大,但配置和UI有點繁瑣,這是我不喜歡它的地方):
1、Media types
2、Events
3、User Media
Media types
Media types是當產生事件時,以什麼方式進行通知,這裡採用的是Script方式,這種方式的靈活性最大,通過這種方式,我們可以把報警發送到任何支持Webhook的App上,例如釘釘
Script這種方式的原理是:我們把可執行的腳本放在zabbix的指定目錄下,當事件發生時,zabbix會自動調用該腳本,可以在
/etc/zabbix/zabbix_server.conf中找到指定目錄的路徑
AlertScriptsPath=/usr/lib/zabbix/alertscripts
Media types設置如下,意思是在
/usr/lib/zabbix/alertscripts下存在一個腳本dingding.py,當事件發生時,zabbix會調用該腳本,同時會傳入該腳本3個參數,這3個參數分別是事件的接收人、事件的主題、事件的內容
dingding.py這個腳本如下,我們先實現一個簡單的版本,也就是把這3個參數輸出到日誌中
#!/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")
設置腳本的權限
$ sudo chown zabbix.zabbix dingding.py $ sudo chmod +x dingding.py
Events
事件是當某個條件發生時,zabbix所創建的報警對象。在zabbix中,事件發生時和事件恢復時都可以觸發事件,下面我們來創建一個事件,
可以看到,這裡的事件主題和事件消息都是系統默認生成的,其中包括時間產生時的必要信息,同時我把允許事件恢復時通知(Recovery message)打了勾,Conditions標籤頁的內容保持不變,然後我們再來修改Operations標籤裡的內容
這裡的意思是:事件的持續時間是1個小時(3600s),每隔2分鐘(120s)產生一個事件,一共產生10個事件,產生事件時,發送給Zabbix administrators用戶組中的Admin用戶,最後事件會使用我們剛剛創建的dingding這種Media type
User Meida
事件和Media type創建好後,下面還需要把它們和指定用戶關聯起來,點擊Administration->Users->Media->Add,修改後,點擊Update
通過以上步驟,我們已經把zabbix的監控和報警建立起來了,並實操創建了網卡的流量監控,現在我們把網絡流量的閾值調到小,故意製造一個超出流量的事故,看一下報警是否生效,我們預期是發送10個報警,發送完畢後,我們再把閾值調到正常,看下是否會收到恢復消息。還記得之前寫的那個腳本嗎,它會把報警內容輸出到日誌文件中,現在我們檢查下日誌文件
很顯然,結果符合我們的預期。
以上便是入門zabbix的全部內容,後面的文章我們會具體實現dingding.py報警腳本,讓你真正的可以在手機上收到報警信息。
參考
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.jianshu.com/p/9daaf8251068
http://jaminzhang.github.io/monitoring/Zabbix-Custom
作者:馮雅傑
來源:
www.jianshu.com/p/4d3af373e682