1. 程式人生 > >Zabbix報警機制 、 Zabbix進階操作 、 監控案例

Zabbix報警機制 、 Zabbix進階操作 、 監控案例

Top

NSD SECURITY DAY06

1 案例1:實現Zabbix報警功能

1.1 問題

沿用第5天Zabbix練習,使用Zabbix實現報警功能,實現以下目標:

  1. 監控Linux伺服器系統賬戶
  2. 建立Media,設定郵件伺服器及收件人郵箱
  3. 當系統賬戶數量超過26人時傳送報警郵件

1.2 方案

自定義的監控項預設不會自動報警,首頁也不會提示錯誤,需要配置觸發器與報警動作才可以自定報警。

什麼是觸發器(trigger)?

表示式,如記憶體不足300M,使用者超過30個等

當觸發條件發生後,會導致一個觸發事件

觸發事件會執行某個動作

什麼是動作(action)?

動作是觸發器的條件被觸發後所執行的行為

可以是傳送郵件、也可以是重啟某個服務等

參考如下操作步驟:

  1. 建立觸發器並設定標記
  2. 設定郵箱
  3. 建立Action動作

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:建立觸發器規則

1)建立觸發器

建立觸發器時強烈建議使用英文的語言環境,通過Configuration--> Templates,找到我們之前建立的count.line.passwd模板,點選模板後面的triggers,如圖-1所示。

圖-1

2)觸發器表示式

建立觸發器時需要定義表示式,觸發器表示式(Expression)是觸發異常的條件,觸發器表示式格式如下:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

{主機:key.函式(引數)}<表示式>常數

在如圖-2所示的藍色方框中編寫觸發器表示式,可以直接手寫,也可以通過add選擇表示式模板。

圖-2

下面,我們看幾個表示式的案例:

{web1:system.cpu.load[all,avg1].last(0)}>5 //0為最新資料

如果web1主機最新的CPU平均負載值大於5,則觸發器狀態Problem

{vfs.fs.size[/,free].max(5m)}<10G //5m為最近5分鐘

根分割槽,最近5分鐘的最大容量小於10G,則狀態進入Problem

{vfs.file.cksum[/etc/passwd].diff(0)}>0 //0為最新資料

最新一次校驗/etc/passwd如果與上一次有變化,則狀態進入Problem

大多數函式使用秒作為引數,可以使用#來表示其他含義(具體參考表-1)。

avg, count, last, min and max 等函式支援額外的第二個引數time_shift(時間偏移量),這個引數允許從過去一段時間內引用資料。

3)配置觸發器

設定觸發器名稱,如圖-3所示,點選add新增表示式,填寫表示式:監控項為賬戶數量,最近300秒賬戶數量大於26(根據系統賬戶數量實際填寫),效果如圖-4所示。

圖-3

圖-4

選擇觸發器報警級別,如圖-5所示,Add建立該觸發器,如圖-6所示。

圖-5

圖-6

步驟二:設定郵件

1)建立Media

通過Administration(管理)-->Media Type(報警媒體型別)-->選擇Email(郵件),如圖-7所示。

圖-7

設定郵件伺服器資訊,設定郵件伺服器及郵件賬戶資訊,如圖-8所示。

圖-8

2)為使用者新增Media

在Administration(管理)-->Users(使用者)中找到選擇admin賬戶,如圖-9所示。

圖-9

點選Admin賬戶後,在彈出的介面中選擇Media(報警媒介)選單-->點選Add(新增)報警媒介,如圖-10所示。

圖-10

點選Add(新增)後,在Meida Type中填寫報警型別,收件人,時間等資訊,如圖-11所示。

圖-11

步驟三:建立Action動作

1)Action動作

Action(動作)是定義當觸發器被觸發時的時候,執行什麼行為。

通過Configuration(配置)-->Actions(動作)-->Create action(建立動作),如圖-12所示。

圖-12

2)配置Action動作的觸發條件

填寫Action動作的名稱,配置什麼觸發器被觸發時會執行本Action動作(賬戶數量大於26),如圖-13所示。

圖-13

3)配置Action動作的具體行為

配置動作的具體操作行為(傳送資訊或執行遠端命令),無限次數傳送郵件,60秒1次,傳送給Admin使用者,如圖-14和圖-15所示。

圖-14

圖-15

4)測試效果

在被監控主機建立賬戶(讓賬戶數量大於26),然後登入監控端Web頁面,在儀表盤中檢視問題報警(需要等待一段時間),如圖-16所示。

圖-16

檢視報警郵件,在監控伺服器上使用mail命令查收報警郵件,如圖-17所示。

圖-17

2 案例2:Zabbix自動發現

2.1 問題

沿用前面的練習,配置Zabbix的自動發現機制,實現以下目標:

  1. 建立自動發現規則
  2. 建立自動發現後的動作,新增主機、為主機連結模板

2.2 方案

什麼是自動發現(Discovery)?

當Zabbix需要監控的裝置越來越多,手動新增監控裝置越來越有挑戰,此時,可以考慮使用自動發現功能,自動新增被監控主機,實現自動批量新增一組監控主機功能。

自動發現可以實現:

  • 自動發現、新增主機,自動新增主機到組;
  • 自動連線模板到主機,自動建立監控專案與圖形等。

自動發現(Discovery)流程:

  • 建立自動發現規則
  • 建立Action動作,說明發現主機後自動執行什麼動作
  • 通過動作,執行新增主機,連結模板到主機等操作

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:自動發現規則

1)建立自動發現規則

通過Configuration(配置)-->Discovery(自動發現)-->Create discovery rule(建立發現規則),如圖-18所示。

圖-18

2)填寫規則

填寫自動發現的IP範圍(逗號隔開可以寫多個),多久做一次自動發現(預設為1小時,僅實驗修改為1m),如圖-19所示。配置檢查的方式:Ping、HTTP、FTP、Agent的自定義key等檢查,如圖-20所示。

圖-19

圖-20

步驟二:建立動作

1)建立Action動作

通過Configuration(配置)--> Actions Event source(事件源):自動發現(Discovery)-->Create action(建立動作),如圖-21所示。

圖-21

2)配置Action動作具體行為

配置動作,新增動作名稱,新增觸發動作的條件,如圖-22所示。

圖-22

點選操作(觸發動作後要執行的操作指令),操作細節:新增主機到組,與模板連結(HTTP模板),如圖-23所示。

圖-23

步驟二:新增新的虛擬機器

1)建立新的虛擬機器(啟動HTTP伺服器)

建立一臺新的主機,驗證zabbix是否可以自動發現該主機,可以重新部署一臺新的虛擬機器(注意前面的課程,我們已經建立了虛擬機器zabbixclient_web2,並且已經安裝部署了Zabbix agent,如果沒有該虛擬機器或沒有安裝Agent,則需要前在zabbixclient_web2部署Agent),也可以將舊虛擬機器的IP地址,臨時修改為其他IP。

2)驗證結果

登陸Zabbix伺服器的Web頁面,檢視主機列表,確認新新增的主機是否被自動加入監控主機列表,是否自動綁定了監控模板。

3 案例3:Zabbix主動監控

3.1 問題

沿用前面的練習,配置Zabbix主動監控,實現以下目標:

  1. 修改被監控主機agent為主動監控模式
  2. 克隆模板,修改模板為主動監控模板
  3. 新增監控主機,並連結主動監控模板

3.2 方案

預設zabbix採用的是被動監控,主動和被動都是對被監控端主機而言的!

被動監控:Server向Agent發起連線,傳送監控key,Agent接受請求,響應監控資料。

主動監控:Agent向Server發起連線,Agent請求需要檢測的監控專案列表,Server響應Agent傳送一個items列表,Agent確認收到監控列表,TCP連線完成,會話關閉,Agent開始週期性地收集資料。

區別:Server不用每次需要資料都連線Agent,Agent會自己收集資料並處理資料,Server僅需要儲存資料即可。

當監控主機達到一定量級後,Zabbix伺服器會越來越慢,此時,可以考慮使用主動監控,釋放伺服器的壓力。

另外,Zabbix也支援分散式監控,也是可以考慮的方案。

3.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:新增被監控主機

1)為被監控主機安裝部署zabbix agent

注意:前面的實驗,我們已經在zabbixclient_web2主機安裝部署了zabbix agent,如果已經完成,則如下操作可以忽略。

  1. [[email protected]_web2 ~]# yum -y install gcc pcre-devel
  2. [[email protected]_web2 ~]# tar -xf zabbix-3.4.4.tar.gz
  3. [[email protected]_web2 ~]# cd zabbix-3.4.4/
  4. [[email protected]_web2 ~]#./configure --enable-agent
  5. [[email protected]_web2 ~]# make && make install

2)修改agent配置檔案

將agent監控模式修改為主動模式。

  1. [[email protected]_web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
  2. #Server=127.0.0.1,192.168.2.5
  3. //註釋該行,允許誰監控本機
  4. StartAgents=0            
  5. //被動監控時啟動多個程序
  6. //設定為0,則禁止被動監控,不啟動zabbix_agentd服務
  7. ServerActive=192.168.2.5
  8. //允許哪些主機監控本機(主動模式),一定要取消127.0.0.1
  9. Hostname=zabbixclient_web2
  10. //告訴監控伺服器,是誰發的資料資訊
  11. //一定要和zabbix伺服器配置的監控主機名稱一致(後面設定)
  12. RefreshActiveChecks=120
  13. //預設120秒檢測一次
  14. UnsafeUserParameters=1            
  15. //允許自定義key
  16. Include=/usr/local/etc/zabbix_agentd.conf.d/
  17. [[email protected]_web2 ~]# killall zabbix_agentd                    //關閉服務
  18. [[email protected]_web2 ~]# zabbix_agentd                            //啟動服務

步驟二:建立主動監控的監控模板

1)克隆Zabbix自動的監控模板

為了方便,克隆系統自帶模板(在此基礎上就該更方便)。

通過Configuration(配置)-->Templates(模板)-->選擇Template OS Linux

-->全克隆,克隆該模板,新建一個新的模板。如圖-24所示。

新模板名稱為:Template OS Linux ServerActive。

圖-24

2)修改模板中的監控專案的監控模式

將模板中的所有監控專案全部修改為主動監控模式,通過Configuration(配置)-->Templates(模板)-->選擇新克隆的模板,點選後面的Items(監控項)-->點選全選,選擇所有監控專案,點選批量更新,將型別修改為:Zabbix Agent(Active主動模式),如圖-25所示。

圖-25

3)禁用部分監控專案

批量修改監控項的監控模式後,並非所有監控專案都支援主動模式,批量修改後,會發現有幾個沒有修改主動模式成功,說明,這些監控專案不支援主動模式,關閉即可。

可以點選型別排序,方便操作,點選狀態即可關閉。如圖-26所示。

圖-26

步驟三:新增監控主機

1)手動新增監控主機(主動模式監控)

在Zabbix監控伺服器,新增被監控的主機(主動模式),設定主機名稱:zabbixclient_web2 (必須與被監控端的配置檔案Hostname一致),將主機新增到Linux servers組,IP地址修改為0.0.0.0,埠設定為0,如圖-27和圖-28所示。

圖-27

圖-28

為主機新增監控模板,選擇剛剛建立的模板(主動模式),新增連結模板到主機,如圖-29所示。

圖-29

2)驗證監控效果

檢視資料圖表,通過Monitoring-->Graphs選單,選擇需要檢視的主機組、主機以及圖形,檢視效果,如圖-30所示。

圖-30

CPU、記憶體等其他資料可用正常獲取,但是,檢視分割槽圖表時並無資料,因為分割槽資料採用的是自動發現監控,與普通監控項一樣,修改為主動模式即可,選擇Template OS Linux ServerActive模板,修改Discovery自動發現為主動模式。如圖-31所示。

圖-31

4 案例4:拓撲圖與聚合圖形

4.1 問題

沿用前面的練習,熟悉zabbix拓撲圖與聚合圖形,實現以下目標:

  1. 建立修改拓撲圖
  2. 建立聚合圖形

4.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:建立拓撲圖

1)建立拓撲

繪製拓撲圖可以快速瞭解伺服器架構,通過Monitoring(監控中)-->Maps(拓撲圖),選擇預設的Local network拓撲圖,編輯即可(也可以新建一個拓撲圖),如圖-32所示。

圖-32

2)拓撲圖圖表說明

  • Icon(圖示),新增新的裝置後可以點選圖示修改屬性
  • Shape(形狀)
  • Link(連線),先選擇兩個圖示,再選擇連線
  • 完成後,點選Update(更新)

建立完拓撲圖,效果如圖-33所示。

圖-33

步驟二:建立聚合圖形

1)建立聚合圖形

聚合圖形可以在一個頁面顯示多個數據圖表,方便了解多組資料。

通過Monitoring(監控中)-->Screens(聚合圖形)-->Create screen(建立聚合圖形)即可建立聚合圖形,如圖-34所示。

圖-34

修改聚合圖形引數如下:

  • Owner:使用預設的Admin使用者
  • Name:名稱設定為zabbixclient_web2_host
  • Columns:列數設定為2列
  • Rows:行數設定為4行

2)為聚合圖形中新增監控圖形

選擇剛剛建立的聚合圖形(zabbixclient_web2_host),點選後面的建構函式(constructor),點選Change(更改),設定每行每列需要顯示的資料圖表,如圖-35所示。

圖-35

5 案例5:自定義監控案例

5.1 問題

沿用前面的練習,使用自定義key監控常用監控專案,實現以下目標:

  1. 監控Nginx狀態
  2. 監控網路連線狀態

5.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:監控Nginx服務狀態

1)準備環境,部署nginx軟體

安裝nginx軟體,開啟status模組

  1. [[email protected]_web1 nginx-1.12.2]# ./configure \
  2. > --with-http_stub_status_module
  3. [[email protected]_web1 nginx-1.12.2]# make && make install
  4. [[email protected]_web1 ~]# cat /usr/local/nginx/conf/nginx.conf
  5. … …
  6. location /status {
  7. stub_status on;
  8. }
  9. … …
  10. [[email protected]_web1 ~]# curl http://192.168.2.100/status
  11. Active connections: 1
  12. server accepts handled requests
  13. 10 10 3
  14. Reading: 0 Writing: 1 Waiting: 0

2)自定義監控key

語法格式:

UserParameter=key,command

UserParameter=key[*],<command>

key裡的所有引數,都會傳遞給後面命令的位置變數

如:

UserParameter=ping[*],echo $1

ping[0], 返回的結果都是0

ping[aaa], 返回的結果都是aaa

注意:被監控端修改配置檔案,注意要允許自定義key並設定Include!

建立自定義key

  1. [[email protected]_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
  2. UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
  3. [[email protected]_web1 ~]# killall zabbix_agentd
  4. [[email protected]_web1 ~]# zabbix_agentd

自定義監控指令碼(僅供參考,未檢測完整狀態)

  1. [[email protected]_web1 ~]# vim /usr/local/bin/nginx_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. active)
  5. curl -s http://192.168.2.100/status |awk '/Active/{print $NF}';;
  6. waiting)
  7. curl -s http://192.168.2.100/status |awk '/Waiting/{print $NF}';;
  8. accepts)
  9. curl -s http://192.168.2.100/status |awk 'NR==3{print $2}';;
  10. esac
  11. [[email protected]_web1 ~]# chmod +x /usr/local/bin/nginx_status.sh

測試效果:

  1. [[email protected]_web1 ~]# zabbix_get -s 127.0.0.1 \
  2. -k 'nginx.status[accepts]'

登陸Zabbix監控Web,建立監控專案item,點選Configuration(配置)-->Hosts(主機),點選主機後面的items(專案),點選Create item(建立專案)。修改專案引數如圖-36所示。

圖-36

步驟二:監控網路連線狀態

1)瞭解TCP協議

熟悉TCP三次握手,參考圖-37。

圖-37

熟悉TCP連線的四次斷開,參考圖-38。

圖-38

2)檢視網路連線狀態

模擬多人併發連線

  1. [[email protected]_web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/

檢視網路連線狀態,仔細觀察、分析第二列的資料

  1. [[email protected]_web1 ~]# ss -antup
  2. //-a顯示所有
  3. //-t顯示TCP連線狀態
  4. //-u顯示UDP連線狀態
  5. //-n以數字形式顯示埠號和IP地址
  6. //-p顯示連線對應的程序名稱

3)建立自定義key

注意:被監控端修改配置檔案,注意要允許自定義key並設定Include。

  1. [[email protected]_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
  2. UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
  3. [[email protected]_web1 ~]# killall zabbix_agentd
  4. [[email protected]_web1 ~]# zabbix_agentd

自定義監控指令碼(僅供參考,未檢測完整狀態)

  1. [[email protected]_web1 ~]# vim /usr/local/bin/net_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. estab)
  5. ss -antp |awk '/^ESTAB/{x++} END{print x}';;
  6. close_wait)
  7. ss -antp |awk '/^CLOSE-WAIT/{x++} END{print x}';;
  8. time_wait)
  9. ss -antp |awk '/^TIME-WAIT/{x++} END{print x}';;
  10. esac
  11. [[email protected]_web1 ~]# chmod +x /usr/local/bin/net_status.sh

測試效果:

  1. [[email protected]_web1 ~]# zabbix_get -s 127.0.0.1 \
  2. -k 'net.status[time_wait]'

4) 監控netstatus

在監控伺服器,新增監控專案item,Configuration-->Hosts點選主機後面的items

點選Create item,如圖-39所示。

圖-39