斑竹网络专注为中小企业客户提供以管理服务为核心的IT全方位服务 https://www.sysadm.cn
分类: 系统运维
2014-03-25 11:54:34
在前面,我们提到并在被监控设备或代理上配置了SNMP陷入。与Zabbix服务器可以直接支持SNMP查询不一样,对于SNMP陷入,我们需要在Zabbix服务器(或者代理服务器)上配置并启动SNMP陷入服务,Zabbix系统才能使用SNMP陷入的方法采集监控数据。
u Zabbix系统中SNMP陷入的工作流程
被监控设备上的SNMP服务代理无法直接向Zabbix服务端或代理发送SNMP陷入信息,它需要借助第三方服务或插件才能完成这个功能。以下Zabbix系统中SNMP陷入的工作流程。
1、 snmptrapd进程接收到来自被监控设备或代理上的SNMP代理发送过来的SNMP陷入;
2、 snmptrapd将接收到的陷入信息传送给SNMP陷入转译器(SNMPTT,SNMP Trap Translator)或用Perl编写的陷入接收器(Zabbix软件包里附带这个接收器程序);
3、 SNMPTT或Perl接收器解析接收到的陷入信息,并按照一定格式进行格式化,之后将格式化后的陷入信息写入指定的陷入信息文件中;
4、 Zabbix服务的SNMP陷入器读取并解析这个陷入信息文件;
5、 Zabbix从每条陷入信息中分离出发送陷入信息的被监控设备的IP地址或主机名;
6、 将接收到的陷入信息与分离出来的IP地址或主机名对应的主机上配置的项目进行正则匹配。如果匹配监控项目,则将对应的项目设置成相应的值。如果没有匹配到任何项目,但是配置了“snmptrap.fallback”项目,则将陷入的信息设置到该目上;
7、 如果分离出来的IP地址或主机名没有匹配到任何被监控的主机,则zabbix会产生一条没有匹配到陷入的陷入信息;
u SNMPTT安装配置
通过上面的介绍,我们了解到Zabbix系统接收SNMP陷入需要与snmptrapd服务(该服务是net-snmp软件包自带的服务)一起工作。snmptrapd服务通过其内嵌的机制——Perl脚本或SNMPTT将接收到的SNMP陷入传送给Zabbix服务器(或服务器代理)进程的。如果使用Perl脚本进行SNMP陷入信息的转译,则要求在编译net-snmp时显示的添加内嵌Perl支持,即在编译net-snmp软件包时使用--enable-embedded-perl编译选项。而我们在介绍安装net-snmp包时使用的yum安装的,默认情况下使用二进制方式安装的net-snmp软件包是不支持内嵌Perl的(在net-snmp5.4以后的版本里支持内嵌Perl)。所以,我们在这里介绍使用SNMPTT进行SNMP陷入转译的方法。
SNMP陷入转译器(SNMPTT,SNMP Trap Translator),是用Perl语言编写的,供net-snmp或ucd-snmp软件包中的snmptrapd 进程使用的SNMP陷入处理器。SNMP陷入转译器的主要作用是将snmptrapd捕获的陷入信息按照指定的格式进行转换,并将其存成文件形式、输出到系统日志、Windows系统的事件日志甚至存储到SQL数据库中。下面我们来介绍SNMPTT安装和配置的方法。
SNMPTT需要使用SNMP以及IniFiles的perl模块,所以需要首先安装net-snmp-perl以及perl-Config-IniFiles软件包。
shell> yum install net-snmp-perl
perl-Config_IniFiles在CentOS的默认yum源里,而使用源码安装各个软件包的依赖关系比较复杂。所以,我们使用epel源来安装。故我们首先来配置一下epel。创建/etc/yum.repos.d/epel.repo文件,并将下面内容复制进该文件后保存。
shell> vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=
mirrorlist=
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
接下来用下面命令安装perl-Config-IniFiles软件包。
shell> yum install perl-Config-IniFiles
接下来,我们按照下面步骤安装snmptt软件包。
下载snmptt_1.4源码包:
shell > wget /snmptt_1.4.tgz?r=&ts=1389880477&use_mirror=superb-dca2
解压软件包:shell> tar -zxvf snmptt_1.4.tgz
shell> cd snmptt_1.4
将snmptt文件拷贝到/usr/sbin下,并设置成可执行文件:
shell> cp snmptt /usr/sbin/
shell> chmod +x /usr/sbin/snmptt
将snmptthandler文件拷贝到/usr/sbin下,并设置成可执行文件:
shell> cp snmptthandler /usr/sbin/
shell> chmod +x /usr/sbin/snmptthandler
拷贝snmptt配置文件snmptt.ini和snmptt.conf文件到/etc/snmp下:
shell> cp snmptt.ini /etc/snmp/
shell> cp examples/snmptt.conf.generic /etc/snmp/snmptt.conf
创建/var/log/snmptt 和mkdir /var/spool/snmptt目录:
shell> mkdir /var/log/snmptt
shell> mkdir /var/spool/snmptt
创建用户并赋予上述用新用户的属组:
shell> useradd –s /sbin/nologin snmptt
shell> chown snmptt:snmptt /var/spool/snmptt
修改snmptt配置文件snmptt.ini下列各项:
vi /etc/snmp/snmptt.ini
修改mode = standalone 项为 mode = daemon;
修改date_time_format = 项为date_time_format = %H:%M:%S %Y/%m/%d;
修改log_system_enable = 0项为og_system_enable = 1;
修改unknown_trap_log_enable = 0 项为unknown_trap_log_enable = 1。并确认
下面所列的两项所配置的路径是否正确。
log_file = /var/log/snmptt/snmptt.log
log_enable = 1
u 配置snmptrap服务
首先,我们需要按照2.3.3节所介绍的方法在zabbix服务器或代理服务器上安装net-snmp软件包并做相应的配置。在安装完net-snmp软件包以后,系统不会自动生成默认配置的net-snmp陷入进程所需要的配置文件snmptrapd.conf。所以,我们可以使用snmpconf工具来生成一个snmptrapd.conf。snmpconf工具使用比较简单,只要按照提示回答一些提问之后,snmpconf即可为我们生成snmptrapd的配置文件。在此,我们提供一个简化的配置文件内容,读者只需创建/usr/share/snmp/snmptrapd.conf文件,并将下面这段内容复制过去即可。
donotfork yes
pidfile /var/run/snmptrapd.pid
printeventnumbers yes
traphandle default /usr/sbin/snmptthandler
ignoreauthfailure yes
authcommunity execute,log,net snmp@domain.com
接下来,因为snmptt是基于数字OID来匹配/etc/snmp/snmptt.conf文件里的内容,以确定是接收到了哪种陷入并将陷入信息转化成相应格式的。但是,在默认情况下snmptrapd会自动将接收到陷入信息中的OID转化成类似于: SNMPv2-MIB::coldStart这种简化的字符串形式的。而这种简化的字符串形式OID与snmptt.conf中配置的OID是数字形式的不匹配,故snmptt服务将无法识别。因些,我们修改snmptrap的启动脚本来解决这一问题。
shell> /etc/init.d/snmptrapd
将snmptrapd文件中的OPTIONS="-Lsd -p /var/run/snmptrapd.pid"修改成OPTIONS="-Lsd -On -p /var/run/snmptrapd.pid"并保存。
好了,通过上面的安装、配置和准备,我们已经完成了snmp陷入服务的安装和配置,下面我们来重启服务并检查服务工作是否正常。
shell> service snmpd start/restart
shell> service snmptrapd start/restart
shell> service snmptt start/restart
如果上述三种服务启动都是正常的,则我们可能通过下例命令来检查我们配置的SNMP陷入服务是否正常。在本机或其它主机上发送一条陷入信息到我们zabbix服务器的陷入服务端口上,并检查snmptt服务是否在指定的文件里输出我们要求的陷入信息的输出。
shell>snmptrap -v 2c -c snmp@domain.com 192.168.5.139:162 "" .1.3.6.1.6.3.1.1.5.3
执行上述陷入命令之后,如果在/var/log/snmptt/snmptt.log文件里有如下类似如下的信息输出则说明我们配置的snmptrapd和snmptt服务工作是正常的。
15:05:362014/01/17.1.3.6.1.6.3.1.1.5.3Normal"Status Events" source.iwgame.tec - Link down on interface $1. Admin state: $2. Operational state: $3