分散式監控系統之Zabbix網路發現

1874發表於2020-11-22

  前文我們瞭解了zabbix的巨集,自定義item和模板的相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/14013331.html;今天我們來了解下zabbix的網路發現功能;

  1、為什麼要使用網路發現功能呢?

  我們知道使用zabbix監控系統去監控一個叢集,通常我們會使用各種通道去對應server上採集資料,這意味著每臺server上必須能夠支援zabbix上定義的通道去採集資料;比如我們使用zabbix agent這種通道去server上採集資料,那麼對應server上就必須安裝好zabbix agent;其次配置zabbix agent告訴它zabbix server是誰;然後我們才可以在zabbix 的web介面上配置新增對應主機使用zabbix agent通道去採集資料;在叢集環境節點和server數量不多的情況下我們手動新增也到不是什麼難事,試想一下,如果我們監控的server有20臺,甚至更多,這意味著我們手動去新增主機,然後連結模板需要重複做20次,甚至更多;很顯然這不是我們想要的方式;那有沒有什麼方式能夠幫助我們去自動新增主機,並連結模板呢?這就是我們使用zabbix網路發現功能的目的;簡單說zabbix的網路發現功能,它能幫助我們在我們指定的網段內掃描主機,當掃描到對應網段有符合我們定義的掃描規則時,它就會觸發一個discovery事件,而對應action監聽到對應的事件發生後,就能觸發action的操作,比如把某主機新增到zabbix,然後連結指定的模板等等;這樣一來我們要想去監控一個叢集,我們只需要定義怎麼去發現主機的規則和監聽對應discovery事件的action,就能夠完成一個叢集的快速監控;

  2、zabbix網路發現它是怎麼去發現主機的呢?

  zabbix的網路發現功能是通過掃描我們指定的網段,當然掃描肯定是有判斷條件的,不是說在指定網段裡的所有主機都能滿足;那它是怎麼判斷的呢?我們知道要想被zabbix所監控,必須滿足對應server支援指定的通道和zabbix server進行通訊,將指定的指標資料響應或傳送給zabbix server;如果說zabbix使用一種機制給指定的主機傳送指定通道的某種請求,如果對應server能夠正常響應,那麼我們就可以理解為對應server支援該通道和zabbix server進行通訊,這樣一來zabbix server 就可以把對應的server新增進來進行監控;簡單講zabbix discovery功能是通過zabbix server 向指定網段中的所有主機傳送某種通道的某種請求,如果對應server能夠正常響應,那麼zabbix server 就認為對應server滿足加入zabbix監控系統,此時zabbix server 就會觸發一個discovery事件;對於該事件發生後該採取什麼措施,這取決於我們定義的action的操作;

  示例:配置使用zabbix 網路發現功能發現指定網段內的主機

  建立網路發現規則

  提示:在zabbix web 介面的configuration--->discovery選單找到create discovery rule,點選進入建立discovery rule介面;

  提示:以上配置表示在192.168.0.44-50這個網段進行ICMP ping操作,如果有主機響應,則觸發discovery 事件;當然checks可以配置多個,比如zabbix agent,snmp,ssh ,telnet,ftp等等;使用zabbix agent去check,如果對應主機能夠給予響應,則表示對應主機上安裝的有zabbix agent,如果使用snmp去check,如果對應主機能夠響應,這表示對應主機支援使用snmp通道去採集資料;總之使用什麼方式去掃描,就意味著對應主機上必須支援對應方式和zabbix server通訊;zabbix server才會觸發一個discovery事件;意思就是根據某種check去掃描指定網段內的主機發現了某某主機支援這種方式;至於後續該怎麼處理這個事件,則由對應的action來處理就好;

  驗證:看看對應網段是否有符合icmp ping的主機呢?

  提示:在monitoring--->discovery選單下選擇我們剛才定義的test_discovery規則,然後點選apply,就能夠檢視對應符合test_discovery規則的主機;從上面結果可以看到符合test_discovery規則的主機有4臺;

  更改test_discovery規則使用zabbix agent方式來掃描指定網段的主機

  提示:以上配置表示使用zabbix agent的方式來掃描指定網段主機;向指定網段內的主機傳送請求zabbix 內建的key system.uname,如果對應主機能夠給予響應,則zabbix server 就觸發discovery事件;

  現在看看test_discovery 是否能夠發現主機呢?

  提示:現在看就只有node04被發現了,其他的主機都沒有發現,這說明node04上安裝的有zabbix agent ;同理我們在node05上如果安裝上zabbix agent,是不是node05也會被發現呢?

  複製zabbix.repo檔案到node05

[root@node03 ~]# scp /etc/yum.repos.d/zabbix.repo node05:/etc/yum.repos.d/
zabbix.repo                                                                   100%  242   205.5KB/s   00:00    
[root@node03 ~]# 

  在node05上安裝zabbix agent

[root@node05 ~]# yum install -y zabbix-agent

  啟動zabbix-agent

[root@node05 ~]# systemctl start zabbix-agent.service 
[root@node05 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
LISTEN     0      128                         :::10050                                   :::*                  
[root@node05 ~]# 

  再次檢視zabbix server是否發現了node05呢?

  提示:很顯然沒有發現node05;

  手動在zabbix server上使用zabbix_get命令來獲取node05上的system.uname看看是否能夠正常獲取?

[root@node03 ~]# zabbix_get -s node05.test.org -k 'system.uname'           
zabbix_get [1902]: Check access restrictions in Zabbix agent configuration
[root@node03 ~]# 

  提示:它這裡提示我們檢查對應agent的配置;

  在node05上配置zabbix agent,將server指向zabbix server ,然後重啟zabbix agent

[root@node05 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.43
ServerActive=127.0.0.1
[root@node05 ~]# systemctl restart zabbix-agent.service 
[root@node05 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
LISTEN     0      128                         :::10050                                   :::*                  
[root@node05 ~]# 

  看看在node3上使用zabbix_get命令獲取node05上的system.uname是否能夠獲取到資料?

[root@node03 ~]# zabbix_get -s node05.test.org -k 'system.uname'
Linux node05.test.org 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
[root@node03 ~]# 

  提示:現在能夠獲取到資料了;

  再次檢視node05是否被發現了呢?

  提示:可以看到node05已經被發現了;從上面實驗可以總結,使用zabbix agent 來check,對應主機必須要安裝zabbix agent並配置其Server的地址才能夠被發現;

  配置zabbix action監聽discovery事件

  提示:在configuration--->actions頁面選擇discovery事件源,然後點選create action進入新建discovery事件源的action;

  填寫action名稱,以及觸發條件

  提示:以上新增了3個條件,第一個條件是discovery check必須是test_discovery:zabbix agent "system.uname";第二個是發現的主機狀態必須是up,第三個條件是對應主機響應中包含Linux字串;通過上述三個條件,我們發現的主機一定是一個linux主機;那麼接下來我們就可以將發現的主機新增到host,然後連結針對監控Linux主機的模板進行監控;

  新增執行的操作

  提示:以上新增了兩個操作,第一個操作上將對應主機新增為zabbix監控的主機;第二個操作上將對應主機連結至template os linux模板;當然如果還有其他操作可以繼續新增;這裡的操作有很多,比如發郵件,遠端執行命令,新增/移除主機,新增/移除主機到某個主機組,連結/取消連結某個模板等等操作;

  驗證:檢視是否將node05新增至host並連結了Template OS Linux模板呢?

  提示:可以看到node05已經加入到zabbix 的hosts中,並連結了Template OS Linux 模板;同時我們也可以發現node04也連結了Template OS Linux;這說明只要符合dicovery事件監聽的action都會執行對應action定義的操作;

  以上就是zabbix的網路發現功能的使用演示,在大規模網路環境中使用,需要注意掃描時間間隔,如果網段特別大,此時如果掃描的間隔時間密集可能造成網路擁堵,對叢集網路有一定的影響;其次選擇zabbix agent 做判斷條件,需要在各個server上安裝zabbix agent 並配置server指向zabbix server ;這個安裝和配置可以使用自動化運維工具去搞,比如ansible ,puppet等等;當然也可以提前規劃好,在裝系統時直接安裝並啟動好;

相關文章