Zabbix報警機制 、 Zabbix進階操作 、 監控案例
NSD SECURITY DAY06
1 案例1:實現Zabbix報警功能
1.1 問題
沿用第5天Zabbix練習,使用Zabbix實現報警功能,實現以下目標:
- 監控Linux伺服器系統賬戶
- 建立Media,設定郵件伺服器及收件人郵箱
- 當系統賬戶數量超過26人時傳送報警郵件
1.2 方案
自定義的監控項預設不會自動報警,首頁也不會提示錯誤,需要配置觸發器與報警動作才可以自定報警。
什麼是觸發器(trigger)?
表示式,如記憶體不足300M,使用者超過30個等
當觸發條件發生後,會導致一個觸發事件
觸發事件會執行某個動作
什麼是動作(action)?
動作是觸發器的條件被觸發後所執行的行為
可以是傳送郵件、也可以是重啟某個服務等
參考如下操作步驟:
- 建立觸發器並設定標記
- 設定郵箱
- 建立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的自動發現機制,實現以下目標:
- 建立自動發現規則
- 建立自動發現後的動作,新增主機、為主機連結模板
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主動監控,實現以下目標:
- 修改被監控主機agent為主動監控模式
- 克隆模板,修改模板為主動監控模板
- 新增監控主機,並連結主動監控模板
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,如果已經完成,則如下操作可以忽略。
- [[email protected]_web2 ~]# yum -y install gcc pcre-devel
- [[email protected]_web2 ~]# tar -xf zabbix-3.4.4.tar.gz
- [[email protected]_web2 ~]# cd zabbix-3.4.4/
- [[email protected]_web2 ~]#./configure --enable-agent
- [[email protected]_web2 ~]# make && make install
2)修改agent配置檔案
將agent監控模式修改為主動模式。
- [[email protected]_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=zabbixclient_web2
- //告訴監控伺服器,是誰發的資料資訊
- //一定要和zabbix伺服器配置的監控主機名稱一致(後面設定)
- RefreshActiveChecks=120
- //預設120秒檢測一次
- UnsafeUserParameters=1
- //允許自定義key
- Include=/usr/local/etc/zabbix_agentd.conf.d/
- [[email protected]_web2 ~]# killall zabbix_agentd //關閉服務
- [[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拓撲圖與聚合圖形,實現以下目標:
- 建立修改拓撲圖
- 建立聚合圖形
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監控常用監控專案,實現以下目標:
- 監控Nginx狀態
- 監控網路連線狀態
5.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:監控Nginx服務狀態
1)準備環境,部署nginx軟體
安裝nginx軟體,開啟status模組
- [[email protected]_web1 nginx-1.12.2]# ./configure \
- > --with-http_stub_status_module
- [[email protected]_web1 nginx-1.12.2]# make && make install
- [[email protected]_web1 ~]# cat /usr/local/nginx/conf/nginx.conf
- … …
- location /status {
- stub_status on;
- }
- … …
- [[email protected]_web1 ~]# curl http://192.168.2.100/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
- [[email protected]_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
- UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
- [[email protected]_web1 ~]# killall zabbix_agentd
- [[email protected]_web1 ~]# zabbix_agentd
自定義監控指令碼(僅供參考,未檢測完整狀態)
- [[email protected]_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
- [[email protected]_web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
測試效果:
- [[email protected]_web1 ~]# zabbix_get -s 127.0.0.1 \
- -k 'nginx.status[accepts]'
登陸Zabbix監控Web,建立監控專案item,點選Configuration(配置)-->Hosts(主機),點選主機後面的items(專案),點選Create item(建立專案)。修改專案引數如圖-36所示。
圖-36
步驟二:監控網路連線狀態
1)瞭解TCP協議
熟悉TCP三次握手,參考圖-37。
圖-37
熟悉TCP連線的四次斷開,參考圖-38。
圖-38
2)檢視網路連線狀態
模擬多人併發連線
- [[email protected]_web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/
檢視網路連線狀態,仔細觀察、分析第二列的資料
- [[email protected]_web1 ~]# ss -antup
- //-a顯示所有
- //-t顯示TCP連線狀態
- //-u顯示UDP連線狀態
- //-n以數字形式顯示埠號和IP地址
- //-p顯示連線對應的程序名稱
3)建立自定義key
注意:被監控端修改配置檔案,注意要允許自定義key並設定Include。
- [[email protected]_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
- UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
- [[email protected]_web1 ~]# killall zabbix_agentd
- [[email protected]_web1 ~]# zabbix_agentd
自定義監控指令碼(僅供參考,未檢測完整狀態)
- [[email protected]_web1 ~]# vim /usr/local/bin/net_status.sh
- #!/bin/bash
- case $1 in
- estab)
- ss -antp |awk '/^ESTAB/{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
- [[email protected]_web1 ~]# chmod +x /usr/local/bin/net_status.sh
測試效果:
- [[email protected]_web1 ~]# zabbix_get -s 127.0.0.1 \
- -k 'net.status[time_wait]'
4) 監控netstatus
在監控伺服器,新增監控專案item,Configuration-->Hosts點選主機後面的items
點選Create item,如圖-39所示。
圖-39