標籤:awk nagios頻寬監控 nagios頻寬監控外掛程式 nagios流量監控 nagios流量監控外掛程式
#!/bin/awk -f#function: nagios外掛程式;細定每個網卡的監閥值,指定參數時單位為MB(如果監控周期為1分鐘,則指定的參數為1分鐘傳輸的資料大小,非Mbit/s)##Usage:伺服器(WAN:em1;LAN:em2),頻寬為下行:100Mbit/s,上行:100/3約等於33.3Mbit/s(一般為下行三分之一),警示閥值按80%計算,nagios每分鐘監控一次,如下:#接收(上行):100/8*0.8*60=600(單位MB)#發送(下行):100/3/8*0.8*60=200(單位MB)#監控所有網卡,nrpe配置如下:#command[check_netcount]=/usr/local/nagios/libexec/check_netcount.awk em1 200 600 em2 600 200#註:因為是NAT環境,所以em2網卡警示參數正好和em1相反。如果是單台機器,可直接指定一個網卡,順序同上:網卡名 接收閥值 發送閥值##Date:20140929 --sndapkBEGIN { #存放上一次資料的臨時檔案 last_f="/var/tmp/nagios_bw.tmp" run_f="/proc/net/dev" #擷取當前所有網卡:裝置名稱、接收資料、發送資料到資料 while (getline runline <run_f) { if (runline ~ /:/) { sub(/^ +/,"",runline) split(runline,runarraytmp,": +|:| +") rundata_r[runarraytmp[1]]=runarraytmp[2] rundata_t[runarraytmp[1]]=runarraytmp[10] } } #判斷有沒有臨時檔案 if (system("[ -f "last_f" ]") == 0) { #擷取上一次的接收、發送資料到數組 while (getline lastline <last_f) { split(lastline,lastarraytmp," ") lastdata_r[lastarraytmp[1]]=lastarraytmp[2] lastdata_t[lastarraytmp[1]]=lastarraytmp[3] } #在上一步擷取舊資料後,用新資料更新臨時檔案 printf("") >last_f for (i in rundata_r) { print i,rundata_r[i],rundata_t[i] >>last_f } } #未找到臨時檔案,操作:初始化臨時檔案、初始化上次接收、發送的數組(一般在第一次運行時執行) else { if (system("touch "last_f) == 0) { for (j in rundata_r) { print j,rundata_r[j],rundata_t[j] >>last_f lastdata_r[j]=rundata_r[j] lastdata_t[j]=rundata_t[j] } } else { print "CRITICAL - cat not create file:",last_f"." exit 2 } } #擷取各網卡及其警示參數 for (k=1; k<ARGC; k+=3) { monitor_r[ARGV[--k]]=ARGV[++k] monitor_t[ARGV[k-=2]]=ARGV[k+=2] } #根據新資料和舊資料,計算這一檢查周期內產生的資料量 for (l in rundata_r) { generate_r[l]=int((rundata_r[l]-lastdata_r[l])/1024/1024) generate_t[l]=int((rundata_t[l]-lastdata_t[l])/1024/1024) } #計算指定監控的網卡是否達到警示閥值,分別更新狀態數組 for (m in monitor_r) { if (m in generate_r) { if (generate_r[m] >= monitor_r[m] ) { critical_r[m] } if (generate_t[m] >= monitor_t[m] ) { critical_t[m] } #原則,只對監控的網卡產生資訊和效能資料繪圖 status=status"__"m"("monitor_r[m]","monitor_t[m]"):R="generate_r[m]"M,T="generate_t[m]"M" sub(/^__/,"",status) performance=performance""l"_r="generate_r[m]";"monitor_r[m]";"l"_t="generate_t[m]";"monitor_t[m]";" } else { print "CRITICAL - wrong parameter." exit 2 } } #如果狀態數組都為0,則正常 if (length(critical_r)==0 && length(critical_t)==0 ) { print "OK - "status"|"performance exit 0 } else { print "CRITICAL - "status"|"performance exit 2 }}
本文出自 “notepad” 部落格,請務必保留此出處http://sndapk.blog.51cto.com/5385144/1559536
awk:nagios流量監控外掛程式