设为首页 收藏本站
查看: 1258|回复: 0

awk:nagios流量监控插件

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-30 08:33:30 | 显示全部楼层 |阅读模式
#!/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
    }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25535-1-1.html 上篇帖子: nagios邮件报警设置 下篇帖子: 安装nagios详解及注意事项 流量监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表