Nagios 流量监控

关于 snmp 这个协议,中文名是简单网络管理协议(Simple Network Management Protocol),该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。它由一组网络管理的标准组成,包含一个应用层协议(application layer protocol),数据库模型(database schema),和一组数据对象。他可以用来监控设备正常运行时间(sysUpTimeInstance),操作系统版本清单(sysDescr),收集接口信息(ifName, ifDescr, ifSpeed, ifType, ifPhysAddr),测量网络接口吞吐量 (ifInOctets, ifOutOctets)等。他有几个版本,我们将要使用的是 2c 版本。有关 snmp 更详细的信息可以查看这里

# yum install net-snmp* bc

主配置文件在 /etc/snmp/snmpd.conf 中。里面的选项很多,首先看下面几个重要的。

第一,将 community 名映射到 security 名字中
com2sec NAME SOURCE COMMUNITY

第二,将 security 名字映射到 group 名字中
group NAME MODEL SECURITY

第三,生成一个 view,以使得 group 有相应的权限
view NAME TYPE SUBTREE [MASK]

最后,将 group 的只读权限赋予给 view
access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY

####
# First, map the community name "public" into a "security name"

#       sec.name  source          community
com2sec notConfigUser  default       public

####
# Second, map the security name into a group name:

#       groupName      securityModel securityName
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser

####
# Third, create a view for us to let the group have rights to:

# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1

####
# Finally, grant the group read-only access to the systemview view.

#       group          context sec.model sec.level prefix    read   write  notif
access  notConfigGroup ""      any       noauth    exact  systemview none none

# —————————————————————————–

上面这段是 snmpd.conf 的默认配置。首先是定义一个 community,为 public ,及可以访问这个 public 的 security 名,为 notConfigUser;定义一个组名 group name,为 notConfigGroup,把 notConfigGroup 这个 secuirty name 加到这个组中;定义一个可操作的范围 view 名,为 systemview ,包括其范围;定义 notConfigGroup 这个组在 systemview 这个 view 范围内可做的操作。

下面的在 /etc/snmp/snmpd.conf 中的4 句话可以用来实现接下来的流量监控:

com2sec local     localhost       nagios
group notConfigGroup v2c        local
view all    included  .1
access notConfigGroup ""      any       noauth    exact  all    none    none

启动并且开机自启 snmp:

# chkconfig snmpd on
# /usr/sbin/snmpd -c /etc/snmp/snmpd.conf
或者:

# /etc/init.d/snmpd start

测试是否启动:

# netstat -tunlp

测试 snmp 的数据:

# snmpwalk -c nagios -v 2c localhost

如果上面一切正常的话,就可以使用 check_traffic.sh 这个脚本来进行网络流量的监测了。

首先查看能检测的网络接口:

# /usr/local/nagios/libexec/check_traffic.sh -V 2c -C nagios -H 127.0.0.1 -L

开始采集 eth0 的流量:

# /usr/local/nagios/libexec/check_traffic.sh -V 2c -C nagios -H 127.0.0.1 -I 2 -w 300,350 -c 500,600 -K -B

该脚本收集的数据在 /var/tmp/ 下,在正是使用 nagios 这个用户调用时,会出现权限问题,可以直接删除或者修改文件权限:

# chmod 777 /var/tmp/check_traffic*

修改 nrpe 的文件:

# vi /usr/local/nagios/etc/nrpe.cfg
command[check_traffic]=/usr/local/nagios/libexec/check_traffic.sh -V 2c -C nagios -H 127.0.0.1 -I 2 -w 300,350 -c 500,600 -K -B

重启 nrpe:

# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

将命令写入监测端的 commands.cfg 中:

# vi /usr/local/nagios/etc/objects/commands.cfg

define command{
   command_name check_traffic
   command_line $USER1$/check_traffic.sh -V 2c -C nagios -H localhost -I $ARG1$ -w
$ARG2$ -c $ARG3$ -M -b
}

在 service 段中调用就可以了。