案例1:實現Zabbix報警功能 案例2:Zabbix自動發現 案例3:Zabbix主動監控 案例4:拓撲圖與聚合圖形 案例5:自定義監控案例

Top

NSD SECURITY DAY06

  1. 案例1:實現Zabbix報警功能
  2. 案例2:Zabbix自動發現
  3. 案例3:Zabbix主動監控
  4. 案例4:拓撲圖與聚合圖形
  5. 案例5:自定義監控案例

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

1.1 問題

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

  1. 監控Linux服務器系統賬戶
  2. 創建Media,設置郵件服務器及收件人郵箱
  3. 當系統賬戶數量超過35人時發送報警郵件

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所示。配置檢查的方式: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)創建新的虛擬機

創建一臺新的主機,驗證zabbix是否可以自動發現該主機,可以重新部署一臺新的虛擬機(注意前面的課程,我們已經創建了虛擬機web2,並且已經安裝部署了Zabbix agent,如果沒有該虛擬機或沒有安裝Agent,則需要前在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

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

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

2)修改agent配置文件

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

  1. [root@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=zabbix_client_web2
  10. //告訴監控服務器,是誰發的數據信息
  11. //一定要和zabbix服務器配置的監控主機名稱一致(後面設置)
  12. RefreshActiveChecks=120
  13. //默認120秒檢測一次
  14. UnsafeUserParameters=1            
  15. //允許自定義key
  16. Include=/usr/local/etc/zabbix_agentd.conf.d/
  17. [root@web2 ~]# killall zabbix_agentd                    //關閉服務
  18. [root@web2 ~]# zabbix_agentd                            //啓動服務
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf 
#Server=127.0.0.1,192.168.2.5
//註釋該行,允許誰監控本機
StartAgents=0			
//被動監控時啓動多個進程
//設置爲0,則禁止被動監控,不啓動zabbix_agentd服務
ServerActive=192.168.2.5
//允許哪些主機監控本機(主動模式),一定要取消127.0.0.1
Hostname=zabbix_client_web2
//告訴監控服務器,是誰發的數據信息
//一定要和zabbix服務器配置的監控主機名稱一致(後面設置)
RefreshActiveChecks=120
//默認120秒檢測一次
UnsafeUserParameters=1			
//允許自定義key
Include=/usr/local/etc/zabbix_agentd.conf.d/
[root@web2 ~]# killall zabbix_agentd					//關閉服務
[root@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監控服務器,添加被監控的主機(主動模式),設置主機名稱:zabbix_client_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:名稱設置爲Web2_host
  • Columns:列數設置爲2列
  • Rows:行數設置爲4行

2)爲聚合圖形中添加監控圖形

選擇剛剛創建的聚合圖形(web2_host),點擊後面的構造函數(constructor),點擊Change(更改),設置每行每列需要顯示的數據圖表,如圖-35所示。

圖-35

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

5.1 問題

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

  1. 監控Nginx狀態
  2. 監控網絡連接狀態

5.2 步驟

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

步驟一:監控Nginx服務狀態

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

安裝nginx軟件,開啓status模塊

  1. [root@web1 nginx-1.12.2]# ./configure \
  2. > --with-http_stub_status_module
  3. [root@web1 nginx-1.12.2]# make && make install
  4. [root@web1 ~]# cat /usr/local/nginx/conf/nginx.conf
  5. … …
  6. location /status {
  7. stub_status on;
  8. }
  9. … …
  10. [root@web1 ~]# curl http://192.168.4.5/status
  11. Active connections: 1
  12. server accepts handled requests
  13. 10 10 3
  14. Reading: 0 Writing: 1 Waiting: 0
[root@web1 nginx-1.12.2]# ./configure \
> --with-http_stub_status_module 
[root@web1 nginx-1.12.2]# make && make install
[root@web1 ~]# cat /usr/local/nginx/conf/nginx.conf
… …
location /status {
                stub_status on;
        }
… …
[root@web1 ~]# curl  http://192.168.4.5/status
Active connections: 1 
server accepts handled requests
10 10 3 
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. [root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
  2. UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
  3. [root@web1 ~]# killall zabbix_agentd
  4. [root@web1 ~]# zabbix_agentd
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
[root@web1 ~]# killall zabbix_agentd
[root@web1 ~]# zabbix_agentd

自定義監控腳本(僅供參考,未檢測完整狀態)

  1. [root@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. [root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
active)
    curl -s http://192.168.2.100/status |awk '/Active/{print $NF}';;
waiting)
    curl -s http://192.168.2.100/status |awk '/Waiting/{print $NF}';
accepts)
    curl -s http://192.168.2.100/status |awk 'NR==3{print $2 }';;
esac
[root@web1 ~]# chmod +x  /usr/local/bin/nginx_status.sh

測試效果:

  1. [root@web1 ~]# zabbix_get -s 192.168.2.100 -k 'nginx.status[accepts]'
[root@web1 ~]# zabbix_get  -s 192.168.2.100 -k 'nginx.status[accepts]'

登陸Zabbix監控Web,創建監控項目item,點擊Configuration(配置)-->Hosts(主機),點擊主機後面的items(項目),點擊Create item(創建項目)。修改項目參數如圖-36所示。

圖-36

步驟二:監控網絡連接狀態

1)瞭解TCP協議

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

圖-37

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

圖-38

2)查看網絡連接狀態

模擬多人併發連接

  1. [root@web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/
[root@web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/

查看網絡連接狀態,仔細觀察、分析第二列的數據

  1. [root@web1 ~]# ss -antup
  2. //-a顯示所有
  3. //-t顯示TCP連接狀態
  4. //-u顯示UDP連接狀態
  5. //-n以數字形式顯示端口號和IP地址
  6. //-p顯示連接對應的進程名稱
[root@web1 ~]# ss -antup
//-a顯示所有
//-t顯示TCP連接狀態
//-u顯示UDP連接狀態
//-n以數字形式顯示端口號和IP地址
//-p顯示連接對應的進程名稱

3)創建自定義key

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

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

[root@web1 ~]# killall zabbix_agentd
[root@web1 ~]# zabbix_agentd

自定義監控腳本(僅供參考,未檢測完整狀態)


  1. [root@web1 ~]# vim /usr/local/bin/net_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. estab)
  5. ss -antp |awk ‘/^TIME-WAIT/{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. [root@web1 ~]# chmod +x /usr/local/bin/net_status.sh
[root@web1 ~]# vim /usr/local/bin/net_status.sh
#!/bin/bash
case $1 in
estab)
ss -antp |awk ‘/^TIME-WAIT/{x++} END{print x}’;;
close_wait)
ss -antp |awk ‘/^CLOSE-WAIT/{x++} END{print x}’;;
time_wait)
ss -antp |awk ‘/^TIME-WAIT/{x++} END{print x}’;;
esac
[root@web1 ~]# chmod +x /usr/local/bin/net_status.sh

測試效果:


  1. [root@web1 ~]# zabbix_get -s 192.168.2.100 -k ‘net.status[time_wait]’
[root@web1 ~]# zabbix_get  -s 192.168.2.100 -k ‘net.status[time_wait]’

4) 監控netstatus


在監控服務器,添加監控項目item,Configuration–>Hosts點擊主機後面的items


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




圖-39



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章