Zabbix-agent監控
zabbix可以監視各種網絡參數,保證服務器系統的安全運營,提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。我們知道,zabbix由2部分構成,zabbix server與可選組件zabbix agent,zabbix-server是基於mysql存儲的,監控文件都存到mysql庫里,上次已經安裝完zabbix server,這次主要是關於agent的操作,不廢話了,開整:
Zabbix-agent服務及配置:
在對應的客戶端上安裝zabbix
查看服務狀態:systemctl status zabbix-agent
服務啟動:systemctl start zabbix-agent
如果啟動報如下錯誤,kill進程重新啟動即可:
啟動服務之后,agent變配置完成,之后去web端進行監控項操作,由於我們服務器比較多,所以使用腳本進行agent服務的批量啟動,在web端也需要批量添加服務器,比較麻煩,好在zabbix支持自動發現滿足條件的主機。
配置自動發現規則
可添加網段,能夠發現整個網段內啟動agent服務的機器,但要注意配置-自動發現-設備唯一性准則 不要選ip地址,否則會發現不了:
配置DISK監控項
zabbix模板自帶CPU與內存的監控項,沒有DISK和NET的監控項,所以需要我們自己添加:
首先,磁盤的在客戶端進行配置:
對每個啟動agent服務的客戶端,(通常在/etc/zabbix下)添加磁盤的conf 文件,並重啟zabbix-agent
然后去zabbix-server查看配置是否生效,切換到zabbix-server的bin目錄執行如下命令,ip換成agent服務器ip,能正常讀取出來就可以,
./zabbix_get -s 192.1.1.1 -p 10050 -k custom.vfs.dev.write.ops[sda]
配置NET監控項
net的很簡單,只需要監控項net寫上具體網卡就可以監控,我的是ens160:
聚合圖形
zabbix支持聚合圖形的編輯和實時監控,可導出為xml文件,並可以導入xml圖表
我們的需求是每行添加五個圖表,對應一個IP。然后多少個agent就有多少行,使用java直接生成xml比較簡單,要注意0那行需要選擇0靜態,不然頁面會跟着選擇的ip亂跑 :
import java.util.ArrayList; import java.util.List; public class ZabbixXml { public String createXml(List <String> ip) { int hsize = 5; int vsize = ip.size (); String name,host; int x,y; //5種圖表監控項,根據需要添加 List<String> imgname = new ArrayList<String>() { { this.add ( "CPU utilization" ); this.add ( "Memory usage" ); this.add ( "IO" ); this.add ( "Network traffic on ens160" ); this.add ( "CPU load" ); } }; String head = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<zabbix_export>\n" + " <version>4.0</version>\n" + " <date>2020-11-12T07:21:22Z</date>\n" + " <screens>\n" + " <screen>\n" + " <name>Zabbix server</name>\n" + " <hsize>"+hsize+"</hsize>\n" + " <vsize>"+vsize+"</vsize>\n" + " <screen_items>\n"; for(int i=0;i<ip.size ();i++ ){ host = ip.get ( i ); for(int j =0;j<5;j++) { x=j; y=i; name = imgname.get ( j ); String screen_item = " <screen_item>\n" + " <resourcetype>0</resourcetype>\n" + " <width>500</width>\n" + " <height>100</height>\n" + " <x>"+x+"</x>\n" + " <y>"+y+"</y>\n" + " <colspan>1</colspan>\n" + " <rowspan>1</rowspan>\n" + " <elements>0</elements>\n" + " <valign>0</valign>\n" + " <halign>0</halign>\n" + " <style>0</style>\n" + " <url/>\n" + " <dynamic>0</dynamic>\n" + " <sort_triggers>0</sort_triggers>\n" + " <resource>\n" + " <name>"+name+"</name>\n" + " <host>"+host+"</host>\n" + " </resource>\n" + " <max_columns>3</max_columns>\n" + " <application/>\n" + " </screen_item>\n"; head=head+screen_item; } } String end = " </screen_items>\n" + " </screen>\n" + " </screens>\n" + "</zabbix_export>"; return head+end; } public static void main(String args[]){ List <String> ip =new ArrayList<String>() { { //換下IP this.add ( "192.168.1.1" ); this.add ( "192.168.1.2" ); } }; ZabbixXml test = new ZabbixXml (); System.out.println ( test.createXml ( ip ) ); } }
然后將生成的文本復制成xml導入到zabbix,就可以生成相對定制化的監控圖表:
支持展示時間段,可配置最長數據保存時間等: