Zabbix认证工程师(ZCS)
从2013年开始接触Zabbix,之前在一家互联网公司任职监控运维,后来在"中国太平洋保险(集团)有限公司"任职,研究大体量环境下的Zabbix监控系统,
之后也单独做过很多Zabbix项目,有着丰富的Zabbix使用及优化经验。
IT设备的硬件监控是监控中非常基础而又重要的环节。各种硬件的厂商提供了非常多监控的方法让我们抓取数据。而我们如何在Zabbix中更方便的通过这些方法高效的获取监控数据并根据实际情况来告警呢?
监控硬件的协议和方法
SSH协议:使用SSH登录硬件设备之后输入交互命令来查看硬件的性能及信息。
Telnet协议:与SSH相似,管理员可通过Telnet登录到设备之后交互的查看设备的性能及信息。
IPMI协议:
IPMI全称:智能平台管理接口(带外管理系统)
(Intelligent Platform Management Interface)
IPMI 能够横跨不同的操作系统、固件和硬件平台,可以智能的监控和自动回报。
大量服务器的运作状况,以降低服务器系统成本。用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状态、电源状态等。
轮询的SNMP:在硬件监控中比较常用的协议,比IPMI更加高效,但需要厂商提供设备型号响应的MIB库。管理员可以通过snmpwalk、snmpget等命令抓取到硬件设备的性能数据及
信息。
SNMP Trap:与轮询的SNMP不同,在配置好SNMPTrap后,设备会向配置的IP主动发送告警信息,但有一个问题:有时候遇到网络波动或瞬断,会丢告警信息。
Syslog:Syslog就是网络设备的日志信息,用户可以根据syslog中的信息来监控硬件设备。
API:现在越来越多的设备开始提供专门的API给管理员查看硬件的信息,使用API的方法
后会输出JSON或XML格式的数据。
脚本:通过在管理服务器上编写shell、python、perl等脚本在系统层面抓取硬件信息,这种
方式可以根据自己的监控需要更加灵活的使用各种方法抓取你想要的数据。但缺点是需要有一定的脚本编写能力,还需要了解用于抓取数据的工具。
Zabbix中提供的方法
SSH协议:Zabbix中提供了SSH客户端的监控项类型,利用这个监控项,我们可以很方便的登录硬件设备,并且无需通过脚本。
监控项配置:
监控数据:
Telnet客户端:Zabbix中提供了“telnet客户端”的监控项类型,利用这个监控项,我们可以很方便的登录硬件设备,并且无需通过脚本。
此方法不通过Zabbix agentd。由Zabbix server或proxy完成。
在Zabbix的telnet模块中,我们可以通过用户名密码的方式登录设备。
IPMI客户端:Zabbix中提供了“IPMI客户端”的监控项类型。我们可以利用这个监控项抓取到硬件服务器IPMI
管理端的监控数据。
利:提供了现成的IPMI模块,不必再用编写脚本的方式通过ipmitool抓取数据。
弊:zabbix中的IPMI模块功能比较简陋,只能抓取到ipmitool sensorlist里的数据,数据很有限。
要使用IPMI来抓取数据,必须修改Zabbix Server或Proxy的配置文件:
StartIPMIPollers=3 开启Zabbix的IPMI客户端进程
如何配置可参考zabbix官方手册
SNMP客户端:Zabbix中提供了“SNMP客户端”的监控项类型。我们可以利用这个监控项抓取到硬件设备
的监控数据。
在Zabbix中,SNMP客户端是一个非常重要的功能,因为现在大多数的硬件设备都已经支持SNMP协议,这也就意味着在zabbix中我们可以更多的通过SNMP来获取硬件的监控数据。同时,Zabbix中的SNMP客户端功能较IPMI客户端来说完善很多。
我们在配置SNMP监控项时,一般分为两类:
1、根据特定(唯一)的OID
2、根据自动发现的OID
根据特定(唯一)的OID:
自动发现的OID:我们在监控硬件设备时,往往会监控类似网卡流量、风扇、电源状态等。一个设备中这些组件肯定不是一个的,所以我们需要利用Zabbix的SNMP自动发现功能来找到并准确的监控这些组件。
配置监控项原型:通过自动发现找到这些组件的INDEX之后,我们就可以来配置监控项原型了。
监控项原型中变量宏的使用原理:
SNMPTrap:Zabbix中提供了“SNMPTrap”的模块,专门用来提取系统接收到的Trap信息。
Zabbix中SNMPTrap监控的逻辑为:
要开始监控Trap前,我们要做哪些准备工作呢?
1、修改Zabbix server或proxy的配置文件:
StartSNMPTrapper=1
SNMPTrapperFile=[TRAP FILE](Trap文件的位置)
2、配置Perl Trap接收器(SNMPTT也可以,这里我以Perl举例),注意要配置Perl Trap接收器,
系统中必须要安装net-snmp-perl包。
Perl trap接收器(源码包/misc/snmptrap/zabbix_trap_receiver.pl)
修改pl文件中的路径和日期格式:
$SNMPTrapperFile = ‘[TRAP FILE]’;(这个路径必须和zabbix配置文件中的路径一致)
$DateTimeFormat = '[DATE TIME FORMAT]';
将perl脚本添加到snmptrapd配置文件(snmptrapd.conf)中
perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
重启snmptrapd
配置完了之后,我们可以在系统中模拟测试,看看SNMPTrap文件中有没有收到模拟信息。
用于发送trap的命令:
snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000„
查看文件中收到的信息:
15:48:18 2011/07/26 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "General event" localhost - ZBXTRAP 127.0.0.1 127.0.0.1
配置SNMPTrap监控项:
Zabbix中有两个SNMPTrap的监控项,分别为:snmptrap[regexp]、snmptrap.fallback
snmptrap[regexp]:捕获与regexp中指定的正则表达式匹配的所有SNMP trap。如果regexp未指定,
则捕获任何trap。
snmptrap.fallback:捕获未被该接口的任何snmptrap[]监控项捕获的所有SNMP trap。
注意:在配置监控项时,尽量将信息类型设置为“日志”。
效果:
SYSLOG:对于网络、安全、负载均衡等类型的设备来说,SYSLOG是很重要的监控手段。
Zabbix中的SYSLOG监控流程:
在Zabbix配置syslog规则的两种方式。
1、常规的日志监控,利用全局的正则表达式过滤出包含需要告警的日志:
这种方式有个弊端,由于这个表达式中有长度限制,故无法写入很多的规则。
如果规则有几百条,那建议使用下面的方式。
2、全部接收syslog,然后一条规则配置一个触发器,这种方式也有一些缺点,就是日志全部接收,会占用比较多的数据库空间。
脚本、API:由于Zabbix没有专门的模块用来请求API,同样要通过脚本调用API,故把脚本和API放在一个章节中。
脚本方式(调用API),监控硬件流程