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
    }
}
时间: 2024-10-10 22:13:49

awk:nagios流量监控插件的相关文章

nagios 流量监控和报警的shell脚本

上下文:我们平台的监控系统用的是cacti+nagios.之前没有加流量异常报警设置,cacti上到是有插件可以时间报警,但是无法使用我们自己的短信接口(nagios用的购买的短信接口),所以想自己写一个脚本配合nagios实现基本的流量异常报警. 脚本思路:/proc/net/dev取出当前流经网卡的(接收和发送)的kb总数量,在检测间隔时间后再次读取这两个值,相减既是间隔时间段内的增量,再根据此增量做计算,算出间隔时间内的平均流量,和基准流量作比较,触发nagios报警事件 局限性:我们只检

nagios自写插件监控某个程序使用物理内存情况

前几天在工作中遇到了一个问题,nagios自写插件,单独测试命令和插件没有问题,但是通过check_nrpe插件调用自写插件的时候会出现问题. 下面是我写的一个插件,主要功能是:输入一个端口号,就可以知道监听该端口号的程序使用物理内存情况. #!/bin/bash if [ $# -ne 1 ];then     echo "Usage:$0 num1"     exit 5; fi PORT="$1" LINE=$(sudo netstat -lnutp|awk 

关于nagios系统下使用shell脚本自定义监控插件的编写以及没有实时监控图的问题

关于nagios系统下shell自定义监控插件的编写.脚本规范以及没有实时监控图的问题的解决办法 在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列, Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来. N

nagios借助check_hpasm插件监控惠普服务器硬件信息(未成)

nagios借助check_hpasm插件监控惠普服务器硬件信息: http://labs.consol.de/wp-content/uploads/2011/10/check_hpasm-4.3.tar.gz 被监控端: $ sudo tar zxfv check_hpasm-4.3.tar.gz $ cd check_hpasm $ ./configure --enable-hpacucli --enable-perfdata --enable-extendedinfo $ sudo mak

nagios监控插件 nagios_oracle_health+check_linux_stats.pl

一.安装nagios_oracle_health插件 项目地址:https://labs.consol.de/nagios/check_mysql_health/ 1.查看perl包有没有安装. [[email protected] ~]# rpm -qa|grep perlperl-Test-Simple-0.92-136.el6.x86_64perl-ExtUtils-MakeMaker-6.55-136.el6.x86_64perl-version-0.77-136.el6.x86_64p

关于nagios系统下使用shell脚本自定义监控插件的编写

在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列. 所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来. Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态.安装完成后,在nagios主目录

nagios 添加自定义监控项目监控mysql数据库死锁

nagios 添加自定义监控项目 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 系统环境:CentOS Linux release 7.2.1511 (Core) nagios 版本: 2.15 这里配合pt-dead-logger插件了,运行了这个插件,有死锁就会在test.deadlocks表写入死锁的信息 这里通过检测这个表是否增加了行数来发报警 nagios客户端自定义脚本: ###这里为了省事,直接把数据库的用户,

nagios之监控

监控系统需要监控: 1.本地资源:负载(uptime),cpu(top.sar),磁盘(df),内存(free),IO(iostat),RAID,温度,passwd文件的变化,本地所有文件指纹识别 2.网络服务:端口,URL,丢包,进程数,网络流量 3.其他设备:路由器,交换机端口流量,打印机,windows 4.业务数据:用户登录失败次数,用户登录网站次数,输入验证码失败的次数 某个API接口流量并发,电商网站订单,支付交易的数量 5.监控软件本身仅仅是一个平台,想要监控内容,理论上只要在服务

shell编程之【nagios自定义监控系统磁盘脚本】

之前写了一篇文章主要介绍nagios的搭建使用 http://msiyuetian.blog.51cto.com/8637744/1704346 下面这篇文章主要介绍nagios自定义监控系统磁盘的脚本实现. Nagios可以识别4种状态返回信息,即 0 表示状态正常(OK).1 表示出现警告(WARNING).2 表示出现非常严重的错误(CRITICAL),3 表示未知错误(UNKNOWN).Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来.我们就可以利用上面这个特性