帶你 30 分鐘 入門 Zabbix 監控系統

帶你 30 分鐘 入門 Zabbix 監控系統

在公司搭建系統級別的監控,由於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。

帶你 30 分鐘 入門 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頁面上添加這個機器

帶你 30 分鐘 入門 Zabbix 監控系統

按下圖填寫即可

帶你 30 分鐘 入門 Zabbix 監控系統

接著綁定模板

帶你 30 分鐘 入門 Zabbix 監控系統

最後點擊Update,你就可以在Host目錄中看到所有被監控的機器列表

帶你 30 分鐘 入門 Zabbix 監控系統

注意:如果zabbix-agent需要被其他機器調用,例如通過zabbix_get獲得監控信息,需要在防火牆設置“放開10050端口”

監控網絡流量

假設我們要監控機器192.168.8.5網卡em1上的出入口流量,我們可以先在zabbix服務器上用zabbix_get命令來測試一下,下面代碼測試的是輸入流量,注意這裡的輸出是一個累積的流量

帶你 30 分鐘 入門 Zabbix 監控系統

監控網絡流量的流程為:

1、創建模板

帶你 30 分鐘 入門 Zabbix 監控系統

2、創建監控項

創建應用:Configuration->Templates->Create application

帶你 30 分鐘 入門 Zabbix 監控系統

帶你 30 分鐘 入門 Zabbix 監控系統

創建監控項:Configuration->Templates->network traffic on em1->Items->Create Item

帶你 30 分鐘 入門 Zabbix 監控系統

上圖是入口流量的監控項設置,出口流量監控項network traffic out em1可以一樣設置,成功後你看到的是

帶你 30 分鐘 入門 Zabbix 監控系統

3、創建Triggers

Triggers是觸發報警的設置,同樣我們點擊Configuration->Templates->network traffic on em1->Triggers->Create trigger來創建Triggers

帶你 30 分鐘 入門 Zabbix 監控系統

注意在設置Expression時,我們可以利用zabbix提供給我們的模板

帶你 30 分鐘 入門 Zabbix 監控系統

帶你 30 分鐘 入門 Zabbix 監控系統

帶你 30 分鐘 入門 Zabbix 監控系統

於是,入口流量的觸發值就設置好了,每秒流量超過1048576時就會觸發報警,同理我們可以設置出口流量的觸發值,成功後,我們看到的是

帶你 30 分鐘 入門 Zabbix 監控系統

4、創建Graphs

接著,我們再來創建Graphs,Graphs可以以圖形化的方式展示流量信息,點擊Configuration->Templates->network traffic on em1->Graphs->Create graph,創建Graphs的最大好處是我們可以把這些Graphs組合起來形成Screens監控面板,例如下面這樣

帶你 30 分鐘 入門 Zabbix 監控系統

下面是創建Graphs的表單

帶你 30 分鐘 入門 Zabbix 監控系統

5、綁定Template

至此,我們模板就創建完畢了,最後一步需要把主機和模板關聯起來,點擊Configuration->Hosts->Templates->Select創建關聯,然後點擊Add

帶你 30 分鐘 入門 Zabbix 監控系統

此時,通過Monitoring->Latest data可以看到網卡上的最新數據,同時可以通過Monitoring->Graphs來查看圖形化的數據

帶你 30 分鐘 入門 Zabbix 監控系統

帶你 30 分鐘 入門 Zabbix 監控系統

自定義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個參數分別是事件的接收人、事件的主題、事件的內容

帶你 30 分鐘 入門 Zabbix 監控系統

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中,事件發生時和事件恢復時都可以觸發事件,下面我們來創建一個事件,

帶你 30 分鐘 入門 Zabbix 監控系統

可以看到,這裡的事件主題和事件消息都是系統默認生成的,其中包括時間產生時的必要信息,同時我把允許事件恢復時通知(Recovery message)打了勾,Conditions標籤頁的內容保持不變,然後我們再來修改Operations標籤裡的內容

帶你 30 分鐘 入門 Zabbix 監控系統

這裡的意思是:事件的持續時間是1個小時(3600s),每隔2分鐘(120s)產生一個事件,一共產生10個事件,產生事件時,發送給Zabbix administrators用戶組中的Admin用戶,最後事件會使用我們剛剛創建的dingding這種Media type

User Meida

事件和Media type創建好後,下面還需要把它們和指定用戶關聯起來,點擊Administration->Users->Media->Add,修改後,點擊Update

帶你 30 分鐘 入門 Zabbix 監控系統

通過以上步驟,我們已經把zabbix的監控和報警建立起來了,並實操創建了網卡的流量監控,現在我們把網絡流量的閾值調到小,故意製造一個超出流量的事故,看一下報警是否生效,我們預期是發送10個報警,發送完畢後,我們再把閾值調到正常,看下是否會收到恢復消息。還記得之前寫的那個腳本嗎,它會把報警內容輸出到日誌文件中,現在我們檢查下日誌文件

帶你 30 分鐘 入門 Zabbix 監控系統

很顯然,結果符合我們的預期。

以上便是入門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

帶你 30 分鐘 入門 Zabbix 監控系統


分享到:


相關文章: