首页 > 代码库 > awk:nagios流量监控插件
awk: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 --sndapk BEGIN { #存放上一次数据的临时文件 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流量监控插件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。