1. 程式人生 > >ZABBIX3.4實戰演練

ZABBIX3.4實戰演練

 

 

 

 

 

 

 

 

 

 

目錄

 

專案實戰——企業級Zabbix監控實戰

 

實驗一:Zabbix監控的搭建

1、實驗準備

  centos系統伺服器3臺、 一臺作為監控伺服器, 兩臺臺作為被監控節點, 配置好yum源、 防火牆關閉、 各節點時鐘服務同步、 各節點之間可以通過主機名互相通訊。
1)所有機器關閉防火牆和selinux

    iptables -F && setenforing 

2)根據架構圖,實驗基本設定如下:

2、Zabbix的安裝

1)更新我們的yum倉庫

  我們去官網下載一個包zabbix-release-3.4-2.el7.noarch.rpm,本地安裝至我們的虛擬機器,這樣,我們本地就有了新的yum源,可以直接安裝zabbix服務:

wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

  下載到本地以後,我們直接安裝:

rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

  而後更新我們的yum倉庫:

[[email protected] ~]# yum repolist 
Loaded plugins: fastestmirror, langpacks  
Loading mirror speeds from cached hostfile
zabbix-non-supported                                                      4/4
repo id                     repo name                                   status
base                        base                                         9,363
epel                        epel                                        11,349
zabbix/x86_64               Zabbix Official Repository - x86_64             80
zabbix-non-supported/x86_64 Zabbix Official Repository non-supported -       4
repolist: 20,796

  由於我配置的epel源中,也有zabbix的包,但是版本很舊了,為了不衝突,我們在配置檔案中把epel源註釋掉,然後再來檢視我們的yum倉庫:

[[email protected] ~]# vim /etc/yum.repos.d/base.repo
    [base]
    name=base
    baseurl=file:///misc/cd
    gpgcheck=0

    #[epel]
    #name=epel
    #baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
    #gpgcheck=0
[[email protected] ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                     repo name                                    status
base                        base                                         9,363
zabbix/x86_64               Zabbix Official Repository - x86_64             80
zabbix-non-supported/x86_64 Zabbix Official Repository non-supported - x     4
repolist: 9,447

  現在,我們去安裝包就可以了:

[[email protected] ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql

  安裝完成,本步驟完成。

2)設定資料庫:

  首先,我們修改一下配置檔案——/etc/my.cnf.d/server.cnf

[[email protected] ~]# vim /etc/my.cnf.d/server.cnf
    [mysqld]
    skip_name_resolve = ON          #跳過主機名解析
    innodb_file_per_table = ON      #
    innodb_buffer_pool_size = 256M  #快取池大小
    max_connections = 2000          #最大連線數

    log-bin = master-log            #開啟二進位制日誌

  重啟我們的資料庫服務:

[[email protected] ~]# systemctl restart mariadb

  建立資料庫並授權賬號

MariaDB [(none)]> create database zabbix character set 'utf8';
MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.37.%' identified by 'keer';
MariaDB [(none)]> flush privileges;             #重新整理授權

  匯入表
  首先,我們來檢視一下,zabbix-server-mysql這個包提供了什麼:

[[email protected] ~]# rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-3.2.6
/usr/share/doc/zabbix-server-mysql-3.2.6/AUTHORS
/usr/share/doc/zabbix-server-mysql-3.2.6/COPYING
/usr/share/doc/zabbix-server-mysql-3.2.6/ChangeLog
/usr/share/doc/zabbix-server-mysql-3.2.6/NEWS
/usr/share/doc/zabbix-server-mysql-3.2.6/README
/usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz      #生成表的各種指令碼
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix

  我們來使用這個檔案生成我們所需要的表:

[[email protected] ~]# gzip -d create.sql.gz
[[email protected] ~]# head  create.sql           #檢視一下表頭
CREATE TABLE `users` (
    `userid`                 bigint unsigned                           NOT NULL,
    `alias`                  varchar(100)    DEFAULT ''                NOT NULL,
    `name`                   varchar(100)    DEFAULT ''                NOT NULL,
    `surname`                varchar(100)    DEFAULT ''                NOT NULL,
    `passwd`                 char(32)        DEFAULT ''                NOT NULL,
    `url`                    varchar(255)    DEFAULT ''                NOT NULL,
    `autologin`              integer         DEFAULT '0'               NOT NULL,
    `autologout`             integer         DEFAULT '900'             NOT NULL,
    `lang`                   varchar(5)      DEFAULT 'en_GB'           NOT NULL,

  我們查看錶頭髮現沒有建立資料庫的命令,這也正是我們剛剛手動建立資料庫的原因。
  然後,我們直接把這個表匯入至我們的資料庫即可:

[[email protected] ~]# mysql -uzbxuser -h192.168.37.111 -p zabbix < create.sql 
Enter password:

  匯入以後,我們進去資料庫檢視一下:

[[email protected] ~]# mysql -uzbxuser -h192.168.37.111 -p
Enter password:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| zabbix             |
+--------------------+
MariaDB [(none)]> use zabbix;
Database changed
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
……
| usrgrp                     |
| valuemaps                  |
+----------------------------+
127 rows in set (0.00 sec)

  可以看出來,我們的資料已經匯入成功了。
  

3、配置 server 端

  我們的資料庫準備好了以後,我們要去修改server端的配置檔案。

[[email protected] ~]# cd /etc/zabbix/
[[email protected] zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
#為了方便我們以後恢復,我們把配置檔案備份一下
[[email protected] zabbix]# cp zabbix_server.conf{,.bak}
[[email protected] zabbix]# vim zabbix_server.conf
ListenPort=10051            #預設監聽埠
SourceIP=192.168.37.111     #發取樣資料請求的IP

  為什麼要設定SourceIP,由於我們的客戶端可能一個主機多個IP,我們又不能允許任意的IP都能從我們這裡讀取資料,就會有一個驗證方式,而該方式是基於識別SourceIP來實現的。

  日誌,預設用檔案記錄,也可以傳送給我們的rsyslog日誌記錄系統,如果我們選擇預設,則日誌存放在LogFile=/var/log/zabbix/zabbix_server.log中,也可以自己設定。

  日誌的滾動。預設值為1,表示滾動。我們設為0則表示不滾動。當資料特別多的時候,我們也可以設定成為1,然後在Maximum size of log file in MB設定當資料檔案最大到多少時會自動滾動。

  日誌的級別。一共有6個級別。我們可以根據自己的需要來設定級別。其中0表示輸出最少的資訊,5表示輸出最詳細的資訊,預設值為3,設定為3的話就表示,0、1、2、3四個級別都顯示。考慮到生產系統中的壓力時,這裡的資訊,如果沒有必要的話,越簡單越好,只要在出錯的時候,我們可以依據其進行排錯即可。

    DBHost=192.168.37.111       #資料庫對外的主機
    DBName=zabbix               #資料庫名稱
    DBUser=zbxuser              #資料庫使用者
    DBPassword=keer             #資料庫密碼
    DBPort=3306                 #資料庫啟動埠

  資料庫相關的設定。

補充:我們可以使用grep -i "^####" zabbix_server.conf來檢視配置檔案中有哪些大段,也可以使用grep -i "^###" zabbix_server.conf來檢視配置檔案中每一段中的配置項有哪些

  以上,我們的基本配置已經完成,可以開啟服務了:

[[email protected] zabbix]# systemctl start zabbix-server.service

  開啟服務以後,我們一定要去確認一下我們的埠有沒有開啟:

[[email protected] zabbix]# ss -nutl |grep 10051
tcp    LISTEN     0      128       *:10051                 *:*                  
tcp    LISTEN     0      128      :::10051                :::*    

  如果查到的埠沒有開啟,我們就要去檢查一下配置檔案有沒有出問題了。
  至此,我們server端的程序啟動已經ok了,接下來就可以使用web GUI來開啟介面進行設定了
  

4、配置 web GUI

  我們先來檢視一下,我們web GUI的配置檔案在哪裡:

[[email protected] ~]# rpm -ql zabbix-web | less
/etc/httpd/conf.d/zabbix.conf
/etc/zabbix/web
/etc/zabbix/web/maintenance.inc.php
/etc/zabbix/web/zabbix.conf.php
/usr/share/doc/zabbix-web-3.2.6
/usr/share/doc/zabbix-web-3.2.6/AUTHORS
/usr/share/doc/zabbix-web-3.2.6/COPYING
/usr/share/doc/zabbix-web-3.2.6/ChangeLog
/usr/share/doc/zabbix-web-3.2.6/NEWS
/usr/share/doc/zabbix-web-3.2.6/README
……

  可以看出,有一個/etc/httpd/conf.d/zabbix.conf檔案,這個配置檔案就是幫我們做對映的檔案,我們可以去看一看這個檔案:

Alias /zabbix /usr/share/zabbix     #我們訪問的時候要在主機後加上/zabbix來訪問我們這個服務


  時區是一定要設定的,這裡被註釋掉是因為,我們也可以在php的配置檔案中設定時區,如果我們在php配置檔案中設定時區,則對所有的php服務均有效,如果我們在zabbix.conf中設定時區,則僅對zabbix服務有效。所以,我們去php配置檔案中設定我們的時區:

vim /etc/php.ini
    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    date.timezone = Asia/Shanghai

  接下來,我們就可以啟動我們的httpd服務了:

  我們的服務已經開啟,接著我們就可以用瀏覽器來訪問了。

5、瀏覽器訪問並進行初始化設定

  我們使用瀏覽器訪問192.168.37.111/zabbix,第一次訪問時需要進行一些初始化的設定,我們按照提示操作即可:






  點選Finish以後,我們就會跳轉到登入頁面,使用我們的賬號密碼登入即可:

  預設使用者名稱為:admin ,密碼為:zabbix 。
  登陸進來就可以看到我們的儀表盤了:

6、配置 agent 端

  當我們把監控端配置啟動以後,我們需要來設定一下我們的監控端,我們在被監控的主機安裝好agent,設定好他的server,並把他新增到server端,就能將其納入我們的監控系統中去了。

1)安裝zabbix

  同樣的,我們先來安裝zabbix。下載包,註釋epel源,安裝所需的包。具體步驟如下:

[[email protected] ~]# wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[[email protected] ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm 
[[email protected] ~]# vim /etc/yum.repos.d/centos7.repo 
[base]
name=base
baseurl=http://172.17.0.1/centos/7/
gpgcheck=0

#[epel]
#name=epel
#baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
#gpgcheck=0
[[email protected] ~]# yum install zabbix-agent zabbix-sender -y

  安裝完成以後,我們去修改配置檔案。

2)修改配置檔案

  一樣的,我們先查一下包內有什麼:

[[email protected] zabbix]# rpm -ql zabbix-agent 
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-3.4.4
/usr/share/doc/zabbix-agent-3.4.4/AUTHORS
/usr/share/doc/zabbix-agent-3.4.4/COPYING
/usr/share/doc/zabbix-agent-3.4.4/ChangeLog
/usr/share/doc/zabbix-agent-3.4.4/NEWS
/usr/share/doc/zabbix-agent-3.4.4/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix

  對配置檔案做一個備份,然後去修改配置檔案:

[[email protected] ~]# cd /etc/zabbix/
[[email protected] ~]# cd /etc/zabbix/
[[email protected] zabbix]# ls
zabbix_agentd.conf  zabbix_agentd.d
[[email protected] zabbix]# cp zabbix_agentd.conf{,.bak}
[[email protected] zabbix]# vim zabbix_agentd.conf




  重點需要修改的仍然是GENERAL PARAMETERS段:

  是否允許別人執行遠端操作命令,預設是禁用的,開啟的話會有安全風險。

Server=192.168.37.111       #指明伺服器是誰的
ListenPort=10050            #自己監聽的埠
ListenIP=0.0.0.0            #自己監聽的地址,0.0.0.0表示本機所有地址
StartAgents=3               #優化時使用的

ServerActive=192.168.37.111 #主動監控時的伺服器
Hostname=node1.keer.com     #自己能被server端識別的名稱

  修改完成之後,我們儲存退出。然後就可以啟動服務了:

[[email protected] zabbix]# systemctl start zabbix-agent.service

  照例檢視埠是否已開啟

[[email protected] zabbix]# ss -ntul |grep 10050
tcp    LISTEN     0      128       *:10050                 *:*  

  已經開啟成功。接著,我們就可以去server端添加了。
  node2也進行同樣的操作,唯一不同的就是配置檔案中的Hostname要設為node2.keer.com
  

7、監控過程詳解

1)修改密碼及中文版

  作為一隻英語不好的程式媛,小編在這裡悄悄改成了中文版0.0如果大家英語好的話看英文版即可,英語不好就像小編一樣改了吧,畢竟中文版比較適合初學者更快的學習~

  按如上操作即可,選擇中文以後,點選下面的update即可更新成功,更新過後是這樣嬸兒的~

  同樣的,為了安全起見,我們把密碼改掉:


  修改完成後同樣點選更新即可。

2)建立主機及主機群組

  我們先來定義一個主機群組:


  然後我們就可以去新增主機了:


  當然,上面有很多選擇卡,有一個加密:

  設定完成後,點選新增。我們就可以看到,我們新增的這個主機已經出現在列表中了:

  同樣的,我們把node2節點也新增進來:

3)監控項(items)

① 介紹

  我們點選上圖中node1的監控項,即可建立我們的監控項,首先,我們建立三個應用集:

  然後我們來定義監控項:

  任何一個被監控項,如果想要能夠被監控,一定要在zabbix-server端定義了能夠連線至zabbix-agent端,並且能夠獲取命令。或者在agent端定義了能夠讓server端獲取命令。一般都是內建的命令,都對應的有其名字,被我們稱之為key

  關於key值,我們可以直接在網頁上設定(伺服器自動執行),也可以使用命令列命令(手動執行)來獲取:

[[email protected] ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "system.cpu.intr"
  在我們的agent端,也可以使用命令來檢視intr的速率變化:

  我們繼續來看我們的監控項:

  說了這麼多,我們來簡單定義一個:

② 定義一個不帶引數的監控項



  設定完以後,點選更新,即可加入,並會自動跳轉至下圖頁面:

  定義完成,我們回到所有主機,等待5秒,我們可以看到,我們node1節點後面的選項已經有變成綠色的了:

  我們也可以回到我們的儀表盤,可以看到,我們的監控項有一個處於啟用狀態:

  那麼,我們的資料在哪裡呢?可以點選最新資料,把我們的node1節點新增至主機,應用一下,就可以看到下面的狀態了:

  可以看到,我們還有一個圖形頁面,點進去則可以看圖形的分佈:

  事實上,我們關注的指標有很多種,我們一一新增進來即可。
  剛剛我們定義的監控項是很簡單的,指定一個key即可,但是有些監控項是帶有引數的,這樣一來,我們的監控項就有更多的靈活性。接下來,我們來簡單說明一個需要帶引數的監控項:

③ 定義一個帶引數的監控項


  圖中的[]就是需要引數的意思,裡面的值即為引數,帶<>為不可省略的。我們就以這個例子來說明:
  if表示是介面名;<mode>表示是那種模式,包括但不限於:packets(包)、bytes(位元組)、errors(錯誤)、dropped(丟包)、overuns等等(上述內容通過ifconfig檢視)
  我們來設定一下這個監控值:


  同樣的,我們也可以通過命令列來檢視:

[[email protected] ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "net.if.in[ens33,packets]"

  我們來看看網頁的顯示情況:檢測中 ---> 最新資料 ---> Network Interface Stats(圖形)

④ 快速定義類似指標

  如果我們想要定義一個類似的指標,我們可以直接選擇克隆,然後簡單的修改一點點引數即可。
  就以我們剛剛定義的net.if.in[ens33,packets]為例,如果我們想要在定義一個out的進行如下操作即可:


  如果我們要以位元組為單位也要定義的話,進行同樣的操作:


  如果有需要的話也可以把byte再克隆成out。就不一一演示了~
  可以看一下,我們現在已經定義的指標:

  我們來到 檢測中 ---> 最新資料,可以看到,我們定義的監控項都已經有值了:

⑤ 刪除監控項

  如果有一個監控項,我們用不上了,就可以刪除掉。但是如果你直接刪除的話,預設資料是會留下的,所以我們要先清除資料,然後再刪除,具體操作步驟如下:

⑥ 監控項儲存的值

  對於監控項儲存的值,老一點的版本只有以下三種方式:

  • As is:不對資料做任何處理(儲存的為原始值)
  • Delta:(simple change)(變化),本次取樣減去前一次取樣的值的結果
  • Delta:(speed per second)(速率),本次取樣減去前一次取樣的值,再除以經過的時長;
      而在3.4版本以後有了更多的表現形式:

4)觸發器(trigger)

① 簡介

  當我們的採集的值定義完了以後,就可以來定義觸發器了。
  我們觸發器的定義是:界定某特定的item採集到的資料的非合理區間非合理狀態。通常為邏輯表示式。
  邏輯表示式(閾值):通常用於定義資料的不合理區間,其結果如下:
  OK(不符合條件):正常狀態 --> 較老的zabbix版本,其為FALSE;
  PROBLEM(符合條件):非正常狀態 --> 較老的zabbix版本,其為TRUE;
  一般,我們評定取樣數值是否為合理區間的比較穩妥的方法是——根據最後N次的平均值來判定結果;這個最後N次通常有兩種定義方式:

  1. 最近N分鐘所得結果的平均值
  2. 最近N次所得結果的平均值

 而且,我們的觸發器存在可呼叫的函式:

nodata()    #是否採集到資料,採集不到則為異常
last()      #最近幾次的平均值
date()
time()
now()
dayofmonth()
...

  注:能用數值儲存的就不要使用字串

② 觸發器表示式

  基本的觸發器表示式格式如下所示

{<server>:<key>.<function>(<parameter>)}<operator><constant>
  • server:主機名稱;
  • key:主機上關係的相應監控項的key;
  • function:評估採集到的資料是否在合理範圍內時所使用的函式,其評估過程可以根據採取的資料、當前時間及其它因素進行;
  • 目前,觸發器所支援的函式有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
  • parameter:函式引數;大多數數值函式可以接受秒數為其引數,而如果在數值引數之前使用“#”做為字首,則表示為最近幾次的取值,如sum(300)表示300秒內所有取值之和,而sum(#10)則表示最近10次取值之和;
  • 此外,avg、count、last、min和max還支援使用第二個引數,用於完 成時間限定;例如,max(1h,7d)將返回一週之前的最大值;
      表示式所支援的運算子及其功能如下圖所示:

③ 定義一個觸發器

  我們可以檢視一下rate of packets(in)的值,並以其為標準確定我們的非正常的值:

  圖中我們可以看出,我們的最大值為74,最小值為4,平均值為24。這樣的話,我們可以定義50以上的都是非正常的值。
  下面我們來定義一個觸發器:
  進入:配置 ---> 主機 ---> node1 ---> 觸發器 ---> 建立觸發器

  我們的表示式可以直接點選右側的新增,然後定義自己所需的內容,即可自動生成:

  生成完畢後,我們就點選頁面下方的新增,即成功定義了一個觸發器,同時頁面自動跳轉:

  然後我們去看一下我們剛剛定義了觸發器的那個監控項:

  我們可以看出,這個裡面就有了一根線,就是我們剛剛定義的值,超過線的即為異常狀態,看起來非常直觀。
  但是,現在即使超過了這根線,也僅僅會產生一個觸發器事件而不會做其他任何事。因此,我們就需要去定義一個動作(action)。

④ 觸發器的依賴關係

  我們的觸發器彼此之間可能會存在依賴關係的,一旦某一個觸發器被觸發了,那麼依賴這個觸發器的其餘觸發器都不需要再報警。
  我們可以來試想一下這樣的場景:
  我們的多臺主機是通過交換機的網路連線線來實現被監控的。如果交換機出了故障,我們的主機自然也無法繼續被監控,如果此時,我們的所有主機統統報警……想想也是一件很可怕的事情。要解決這樣的問題,就是定義觸發器之間的依賴關係,當交換機掛掉,只它自己報警就可以了,其餘的主機就不需要在報警了。這樣,也更易於我們判斷真正故障所在。
  注意:目前zabbix不能夠直接定義主機間的依賴關係,其依賴關係僅能通過觸發器來定義。
  我們來簡單舉一個例子,示範一下如何定義一個依賴關係:
  開啟任意一個觸發器,上面就有依賴關係,我們進行定義即可:


  由於當前我們只定義了一個觸發器,就不演示了,過程就是這樣~新增以後點選更新即可。
  觸發器可以有多級依賴關係,比如我們看下面的例子:

5)定義動作(action)

① 簡介

  我們需要去基於一個對應的事件為條件來指明該做什麼事,一般就是執行遠端命令或者發警報
  我們有一個告警升級的機制,所以,當發現問題的時候,我們一般是先執行一個遠端操作命令,如果能夠解決問題,就會發一個恢復操作的訊息給接收人,如果問題依然存在,則會執行發警報的操作,一般預設的警報接收人是當前系統中有的zabbix使用者,所以當有人需要收到警報操作的話,我們則需要把它加入我們的定義之中。
  其次,每一個使用者也應該有一個接收告警資訊的方式,即媒介,就像我們接收簡訊是需要有手機號的一樣。
  我們的每一個監控主機,能夠傳播告警資訊的媒介有很多種,就算我們的每一種大的媒介,能夠定義出來的實施媒介也有很多種。而對於一個媒介來說,每一個使用者都有一個統一的或者不同的接收告警資訊的端點,我們稱之為目標地或者目的地。
  綜上,為了能夠發告警資訊,第一,我們要事先定義一個媒介,第二,還要定義這個媒介上使用者接收訊息的端點(當然,在使用者上,我們也稱之為使用者的媒介)。
  我們可以去看一下系統內建的媒介型別:

  這只是大的媒介型別,裡面還有更多的細分,我們以Email為例:

  同樣的,同一個型別我們也可以定義多個,還是以Email為例,我們可以定義一個騰訊的伺服器,一個網易的伺服器,一個阿里的伺服器等等。

② 定義一個媒介(media)

  我們還是以Email為例。來簡單的定義一個媒介:


  這樣定義以後,我們去更新一下就可以了。
  媒介定義好了,那麼我們怎麼才能夠然後使用者接收到郵件呢?比如讓我們的Admin使用者接收郵件,我們應該怎麼操作呢?具體步驟如下:
  進入 管理 ---> 使用者 ---> Admin ---> 報警媒介
  我們來新增一條進來:

  新增過後是這樣的:

  然後我們更新就可以了。
  一個使用者可以新增多個接收的媒介型別。

③ 定義一個動作(action)

  我們之前說過了,動作是在某些特定條件下觸發的,比如,某個觸發器被觸發了,就會觸發我們的動作。
  現在,我麼基於redis來定義一個動作。
  首先,我們在agent端使用yum安裝一下redis

[[email protected] ~]# yum install redis -y

  修改一下配置檔案:

[[email protected] ~]# vim /etc/redis.conf 
bind 0.0.0.0        #不做任何認證操作

  修改完成以後,我們啟動服務,並檢查埠:

[[email protected] ~]# systemctl start redis
[[email protected] ~]# ss -nutlp | grep redis
tcp    LISTEN     0      128       *:6379                  *:*                   users:(("redis-server",pid=5250,fd=4))

  接著,我們就可以去網站上來定義相關的操作了:

1.定義監控項

  進入 配置 ---> 主機 ---> node1 ---> 監控項(items)---> 建立監控項

  填寫完畢以後,我們點選下方的新增。

  該監控項已成功新增。
  我們可以去檢視一下他的值:
  檢測中 ---> 最新資料

2.定義觸發器

  定義好了監控項以後,我們亦可來定義一個觸發器,當服務有問題的時候,我們才能及時知道:
  進入 配置 ---> 主機 ---> node1 ---> 觸發器(trigger)---> 建立觸發器

  填寫完畢以後,我們點選下方的新增。

  該觸發器已成功新增。
  我們去檢視一下:
  監測中 ---> 最新資料

  我們來手動關閉redis服務來檢測一下:

[[email protected] ~]# systemctl stop redis.service

  進入 監測中 ---> 問題

  可以看到,現在已經顯示的是問題了。並且有持續的時間,當我們的服務被開啟,會轉為已解決狀態:

[[email protected] ~]# systemctl start redis.service 

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

  我們添加了第一步需要做的事情,也就是重啟服務,如果重啟不成功怎麼辦呢?我們就需要來新增第二步:

  新增完成以後,我們可以看一下:

  操作新增完了,如果服務自動恢復了,我們可以傳送訊息來提示:

  至此,我們的動作設定完畢,可以點選添加了,新增完成會自動跳轉至如下頁面:

  現在我們可以手動停止服務來進行測試:

[[email protected] ~]# systemctl stop redis.service 

  然後我們來到問題頁面來檢視,發現確實有問題,並且已經解決:

  我們可以去server端檢視是否收到郵件:

  也可以去agent端檢視埠是否開啟:

[[email protected] ~]# systemctl stop redis.service 
[r[email protected] ~]# ss -ntl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128        *:6379                   *:*                  
LISTEN      0      128        *:111                    *:*                  
LISTEN      0      5      192.168.122.1:53                     *:*                  
LISTEN      0      128        *:22                     *:*                  
LISTEN      0      128    127.0.0.1:631                    *:*                  
LISTEN      0      128        *:23000                  *:*                  
LISTEN      0      100    127.0.0.1:25                     *:*                  
LISTEN      0      128        *:10050                  *:*                  
LISTEN      0      128       :::111                   :::*                  
LISTEN      0      128       :::22                    :::*                  
LISTEN      0      128      ::1:631                   :::*                  
LISTEN      0      100      ::1:25                    :::* 

  可以看出埠正常開啟,我們的動作觸發已經完成。

補充:我們也可以使用指令碼來發送警報,我們的指令碼存放路徑在配置檔案中可以找到,定義為:AlterScriptsPath=/usr/lib/zabbix/alertscripts

  接下來,我們來一波徹底一點的操作,我們來手動修改一下redis服務的監聽埠,這樣,我們就不能通過重啟服務恢復了:

[[email protected] ~]# vim /etc/redis.conf
    #port 6379
    port 6380               #註釋掉原來的埠,更換為新的埠

[[email protected] ~]# systemctl restart redis

  然後,我們來網頁檢視一下狀態:
  進入 監測中 ---> 問題,可以看到是報錯的:

  這樣,在經過了重啟服務以後還是沒能把解決問題,就會發郵件告警:

  我們再把服務埠改回來,然後重啟服務。這樣,等到問題自動解決了以後,我們會再次收到郵件:


  這樣,我們的動作設定已經全部測試完成。
  

6)zabbix視覺化

① 簡介

  資料日積月累,如果我們想要更直觀的瞭解到各項資料的情況,圖形無疑是我們的最佳選擇。
  zabbix提示了眾多的視覺化工具提供直觀展示,如graph、screen及map等。上文中我們也看到過一些簡單的圖形展示。
  如果我們想要把多個相關的資料定義在同一張圖上去檢視,就需要去自定義圖形了~

② 自定義圖形(Graphs)

  自定義圖形中可以集中展示多個時間序列的資料流。支援“線狀圖(normal)”、“堆疊面積圖(stacked)”、“餅圖(pie)” 和“分離型餅圖(exploded)”四種不同形式的圖形。
  具體的設定過程如下:
  進入 配置 ---> 主機 ---> node1 ---> 圖形,選擇右上角建立圖形:

  我們來看一看四種狀態:




  包括我們的主機都可以自定義,不過一般來說,線型是看的最清晰的,我們通常會使用這個。
  我們也可以克隆一個packets來更改為bytes用~同樣的,我們如果想新增別的內容,也都可以新增的。
  我們一共添加了三個圖形,我們可以在 監測中 ---> 圖形 來檢視

③ 聚合圖形(Screens)

  我們建立的自定義圖形也可以放在一個聚合圖裡顯示,具體的設定方法如下:
  進入 監測中 ---> 聚合圖形 ---> 選擇右上角建立聚合圖形

  我們還可以選擇分享:

  定義好了新增即可。
  定義完成以後,我們需要編輯一下,來指定儲存哪些圖:



  依次新增即可,新增完成之後是這樣嬸兒的~:

  因為我們只有三張圖,所以新增的有重複的,通常情況下是不需要這樣的。

④ 幻燈片演示(Slide shows)

  如果我們有多個聚合圖形想要按順序展示的話,我們就可以定義一個幻燈片。
  具體步驟如下:
  進入 監測中 ---> 聚合圖形 ---> 右上角選擇幻燈片演示 ---> 建立幻燈片


  然後我們開啟即可。開啟以後顯示的是圖片1,5s以後會自動切換為圖片2。
  這樣就可以實現幻燈片演示,我們就不需要去手動切換了。

⑤ 定義拓撲圖(Maps)

  在拓撲圖中,我們可以定義成一個複雜的網路連線圖,我們可以使用一臺主機來連線另一臺主機,這樣的話,我們就可以查看出到底是哪個連結出了問題。
  我們就不來演示了,看一下過程即可:
  進入 監測中 ---> 拓撲圖 ---> 所有地圖 ---> Local network(預設就有的)

  通過 Ping 和 Traceroute 就可以實驗我們上述的功能。

7)模板

① 建立模板

  之前我們說過,每一個主機的監控項都很多,我們一個一個的新增實在是太頭疼了,更何況,可能不止一個主機。
  但是我們