最簡單有效的 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。

安裝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個報警,發送完畢后,我們再把閾值調到正常,看下是否會收到恢復消息。還記得之前寫的那個腳本嗎,它會把報警內容輸出到日志文件中,現在我們檢查下日志文件
