前文我們了解了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等等;當然也可以提前規划好,在裝系統時直接安裝並啟動好;