1、zabbix自定義監控Windows服務器的原理
Zabbix為Windows服務器的監控提供了PerfCounter(性能計數器)這個功能。Zabbix客戶端通過PerfCounter獲取Windows服務器上的相關性能信息,然后發送給服務器端。
2、如何獲取Windows服務器的PerfCounter表達式
方法一:
在Windows服務器的控制面板->管理工具->性能的系統監視器中,可以看到這些性能監控。
點擊添加計數器后,在彈出的添加計數器對話框中,可以在性能對象下拉菜單中選擇相應的監控項目,然后在下面的列表中選擇需要使用的計數器,在右邊的里表中選擇范例。點擊添加。
添加后的計數器在下面列表中可以看到
在添加的計數器上面右鍵選擇屬性,在彈出的窗口中的數據選項卡中可以看到具體的perfCounter表達式
方法二:
進 入開始->運行,輸入CMD進入命令窗口。輸入typeperf –qx| more 獲取相關PerfCounter表達式。也可以配合管道輸出給find,查找想要的相關表達式。以獲取網卡PerfCounter為例,在命令行輸 入:typeperf –qx |find “Network Interface”|find /V “LoopBack”
命令的意思是,查找和“Network Interface”相關的PerfCounter。/V是忽略和”LoopBack”回環接口的PerfCounter
3、在zabbix中使用Perfcounter為Windows模板添加監控項
在zabbix中,使用PerfCounter的方法有兩種:
方法一:
在模板添加監控項時使用perf_counter作為key表達式:
以添加CPU空閑時間監控為例:
系統配置->模板,選擇Windows監控模板。進入監控項,點擊右上角的Create Item,創建監控項,在key中添加PerfCounter相關的參數,然后在設置一下其他選項,保存即可。
方法二:
在客戶端配置文件zabbix_agentd.conf文件中添加類似於Parameter自定義監控的PerfCounter參數。具體使用格式如下
PerfCounter=<監控項key表達式>,<性能計數器名稱> |
以添加網卡監控為例:
修改Windows服務器上的zabbix客戶端配置文件zabbix_agentd.conf,添加通過typeperf-qx命令獲取的和網卡相關信息
#Network PerfCounter=NetAllInt0,"\Network Interface(Intel[R] PRO_1000 MT Network Connection)\Bytes Total/sec",30 PerfCounter=NetInInt0,"\Network Interface(Intel[R] PRO_1000 MT Network Connection)\Bytes Received/sec",30 PerfCounter=NetOutInt0,"\Network Interface(Intel[R] PRO_1000 MT Network Connection)\Bytes Sent/sec",30 PerfCounter=NetBandInt0,"\Network Interface(Intel[R] PRO_1000 MT Network Connection)\Current Bandwidth",30 |
方法一:
windows的key的關鍵字可以使用網卡的ip地址來替代。例如:net.if.out[192.168.101.1,bytes]
方法二:
如果更改了ip地址,上面的方法就不靈了。使用Macro能比較好的解決監控本地網卡的需求net.if.out[{IPADDRESS},bytes]
方法三:
Macro 中的{IPADDRESS}只是獲取主機的外網IP地址,對於多網卡的主機來說內網網卡就監控不到了。在客戶端配置文件中使用PerfCounter可以 解決這個問題。但每個機器的網卡型號不一定相同,因此typeperf的輸出也不一樣。我寫了個perl腳本,來解決這個問題。
use strict; use warnings; #添加對網卡的監控 my @network=`typeperf -qx |find "Network Interface"|find /V "Loopback"|find "Bytes Total"`; my $i=0; foreach my $int (@network) { if($int=~ /^(\\Network Interface.*\\).*$/) { my $intname=($1); open OUT_FILE, ">>c:\\zabbix\\zabbix_agentd.conf" or die("Could not write the file"); print OUT_FILE <<EOF; #Network PerfCounter=NetAllInt${i},"${intname}Bytes Total/sec",30 PerfCounter=NetInInt${i},"${intname}Bytes Received/sec",30 PerfCounter=NetOutInt${i},"${intname}Bytes Sent/sec",30 PerfCounter=NetBandInt${i},"${intname}Current Bandwidth",30 EOF close(OUT_FILE); $i++; } } |
不同的windows服務器只要運行這個腳本,就可以根據服務器上網卡型號還有網卡數量,將監控寫入到zabbix_agentd.conf配置文件中。