配置Nagios监控IPMI硬件设备

作为系统管理员,最为担心的故障莫过是:半夜停电,担心UPS能不能坚持到早晨;双休日服务器配件故障,报修无门;精密空调失效,服务器被高温煎熬。以上这些都是机房环境,服务器设备硬件部分的故障。不同制造商之间设备往往使用不同管理软件,一一购买又是很大一笔开支。所以监控硬件不会像监控操作系统上的服务那样容易。

好在,服务器硬件管理接口都使用了业界统一的IPMI协议,版本从1.5到2.0不等。从IPMI协议出发,就有可能通过Nagios监控服务器硬件。

下面就详细叙述如何使用Nagios监测IBM服务器IMM中集成的各种传感器。并配置IMM以SNMP Trap的形式主动向Nagios发送报警。

Nagios监控IPMI设备同样分为两个部分:主动获取IPMI传感器参数,IPMI设备向Nagios发送报警通知。接下来的讲解,以IBM X3650M4 (为IMM2界面)和 IBM X3850X5 (为IMM界面)为例讲解。非IBM服务器请阅读对应设备制造商发布的官方文档。

Nagios获取IPMI参数配置思路。已知IBM IMM板载芯片为操作系统独立的硬件控制芯片,只要在通电的情况下就会自动运行,是一个微系统。IMM可以通过IPMI接口以UDP/623端口访问。那么只需要打通Nagios监控系统到服务硬件管理IMM接口的网络,让Nagios可以和服务器管理接口通信,就可以在Linux系统上使用ipmitool或者freeipmi之类的关键就可以获取服务器上的各种传感器了。也就是说Nagios可以监测服务器内部硬件环境参数。

Nagios接收IPMI设备主动发过来的报警通知。IMM2支持以SNMP trap形式主动向特定IP的主机发送报警。那么只要获取IMM2使用的SNMP mib管理信息库就可以解释并发送服务器硬件报警信息了。

操作步骤

接下来的配置需要如下几样东西:

  • MIB Browser,用来查看下载到的mib。
  • SNMP Trap Sender,用来发送自定义trap,测试Nagios配置是否正确。
  • IBM 账号,用来从IBM网站上下载IMM的升级包。自己注册吧!
  • 一台笔记本电脑,用来配置IMM2接口。

上述两个工具下载地址:http://ireasoning.com/mibbrowser.shtml

设计网络拓扑

这一步,其实可以选择不配置。为什么这么说呢?IPMI同时在操作系统上提供一个设备接口。在Linux系统上可以通过ipmitool默认访问本机的IPMI参数。Windows系统也可以通过ipmiutil工具做到同样的事情。这样,就可以通过Linux平台的nrpe和Windows平台的nsclient++工具调用上面两个IPMI工具。同样可以获取到IPMI传感器的值。但是(哈哈!肯定会有一个但是),这种情况下的应用,依赖于操作系统的正常运行。服务器关机或者操作系统死机都会造成硬件监测的不可用。做不到完全的软硬件分离。

言归正传,在不影响安全的情况下,实现IMM/IMM2接口和Nagios服务器通信,还是需要一点点配置的。接下来就说一下这一点点配置。下图是物理线路连接情况。

nagios-IPMI-network

对于上述网络拓扑图,从下往上,做如下几点解释:

  1. 服务器根据机柜或者位置的不同,接入到傻瓜交换机上。傻瓜交换机上行接入三层交换机vlan 11的access接口。
  2. 从傻瓜交换机下行连接服务器的网线接入SYSMGMT-IMM接口。配置IP为10.1.11.0网段,掩码为255.255.255.0,网关为10.1.11.254。
  3. 多台三层交换机间的互联接口,必须trunk vlan 11 100 。其中vlan 100为服务器业务网络使用的vlan。
  4. 外部网络设备上起服务器业务网络vlan 100的三层接口10.1.100.254,作为默认网关。直连外部网络的三层交换机上起vlan 11和vlan 100的三层接口10.1.11.254盒10.1.100.253。此交换机上配置指向外部网络的默认路由。
  5. Nagios服务器的业务接口使用10.1.100.253的网关,可以访问vlan100和vlan11。其他服务器的业务网络接口使用10.1.100.254的网关,只能访问vlan100,无法访问vlan11。
  6. 三层交换机2 上面起的三层接口只是为了便于管理。

修改IMM配置

设计完成网络连接方法后,就要动手修改IMM2的配置了。这部分需要的配置任务包括:修改网络接口IP地址和启用SNMP v1 Trap。

修改接口IP地址

将笔记本的IP地址配置成192.168.70.0段的地址,掩码为255.255.255.0 。不设网关和DNS。用网线直接讲笔记本网卡接口和服务器IMM管理接口连接。用浏览器访问192.168.70.125 ,如果提示不安全的站点,点击信任,添加一条例外。在接下来的登录界面中输入默认的用户名USERID和密码PASSW0RD,其中0是数字0,非字母O。登陆成功后可看到如下界面

imm-overview-page

imm2-overview-page

上述两个图形界面截图分别是IBM X3850X5 的IMM主界面和IBM X3650M4的IMM2主界面。IMM详细使用方法参见 IMM User’s Guide 下载地址如下:

依次点击 IMM Control/IMM Management — Network interfaces/Network 进入修改IP地址界面。将地址获取模式改为静态配置,然后在下面的地址输入框中填写规划好的IP地址,并在笔记本上做好服务器和管理地址映射关系记录。然后,点击保存。

黑色界面为代表的IMM界面(M4以前的),在配置完成IP地址后,需要点击左侧的 Restart IMM重新启动IMM。以蓝色界面为代表的IMM2界面(M4以后的),在点击Apply应用配置以后,需要在当前页面停留3分钟左右。不需要重启IMM,配置会自动生效。生效后,需要重新配置笔记本IP。重启IMM不影响操作系统的正常运行,可放心操作。

启用SNMP和SNMP Trap通知

在IP地址修改生效后,重新登陆IMM。依次点击IMM Control/IMM Management — Network protocols/Network,进入修改网络协议界面。点选SNMP选项卡,根据界面配置SNMP v1 Trap 目标主机为Nagios服务器地址10.1.100.20,团体字为snmptrapd配置文件中指定的团体子Password2,访问模式为trap。点击保存。同样,IMM界面需要重启IMM,IMM2界面等待3分钟左右后,会自动生效。下面是IMM 界面的SNMP协议配置界面的截图:

imm-snmp

IMM还需要在Alerts菜单下的SNMP Alert Settings界面中,自定义通过SNMP Trap发送哪些报警。如下面截图。

imm-snmp-trap

IMM2如下图:

imm2-snmp-1

设置联系人和位置。这部分信息在trap报警内容里面可以显示。

imm2-snmp-2

自定义勾选启用那些类型的报警通知。

imm2-snmp-3

将报警信息以什么团体字发送到哪些接收主机。注意,访问类型设置为trap。

配置监测IPMI传感器状态

服务器配置部分也包分为两小节:获取IPMI传感器参数和配置trap报警。获取IPMI传感器需要安装ipmitool/freeipmi/ipmiutil软件套件。这三个软件套件,功能一样,选哪个都行。然后下载Nagios使用的check_ipmi_sensor插件。Trap报警只需要找到IMM用的SNMP mib管理信息库就可以了。

寻找IPMI传感器监测点

首先,在Nagios服务器上ping一下需要监测的几个服务器的IMM管理接口的IP。确保ping得通!然后,在Nagios服务器上安装必要的软件。推荐把那三个软件都装上。因为下载的Nagios插件不知道用哪一个工具呢。安装命令如下:

yum install ipmitool freeipmi ipmiutil

针对获取IPMI传感器这一个目的,三个软件包可以通过以下三个命令获取帮助:

ipmitool -h
ipmiutil -h
ipmi-sensors --help

下面是三个工具套件分别获取一台服务器全部的传感器输出结果的命令格式:

ipmitool sensor -H 10.1.11.11 -U USERID -P PASSW0RD
ipmiutil sensor -N 10.1.11.11 -U USERID -P PASSW0RD
ipmi-sensors -h 10.1.11.11 -u USERID -p PASSW0RD

上述命令可以输出IP为10.1.11.11的IMM所有的传感器列表和一些简单状态提示。以下参数的ipmitool命令可以详细输出一个传感器的状态。

[root@nms ~]# ipmitool sensor -H 10.1.11.11 -U USERID -P PASSW0RD  get "PCH Temp"
Locating sensor record...
Sensor ID             : PCH Temp (0x31)
Entity ID             : 45.1
Sensor Type (Analog)  : Temperature
Sensor Reading        : 46 (+/- 0.500) degrees C
Status                : ok
Lower Non-Recoverable : na
Lower Critical        : na
Lower Non-Critical    : na
Upper Non-Critical    : 93.000
Upper Critical        : 98.000
Upper Non-Recoverable : 103.000
Assertion Events      :
Assertions Enabled    : unc+ ucr+ unr+
Deassertions Enabled  : unc+ ucr+ unr+

 

通过观察分析上述命令的输出的各个传感器状态和单个传感器的详细输出。可以发现,大部分传感器都不需要直接监控,异常时通过SNMP Trap报警就可以了。以下几个传感器输出结果还有可借鉴之处:

  • 处理器/内存/电源/磁盘驱动器健康状态
  • 风扇转速
  • 主板温度
  • 线路电压

上述几个参数的传感器类型分组(Sensor Type)分别为Processor/Memory/Power Supply/Drive Slot/Fan/Temperature/Voltage 。也就是说我们可以直接监测一个类型组的传感器状态就可以了。

通过在网络上搜索可用的IPMI插件,发现可用的插件有以下两个:

经过不断测试,发现第二个插件在获取风扇转速和内存状态时输出结果有差错。所以淘汰第二个插件。

好吧,我承认,我是用了第一个插件,才想起来传感器分组监测的。执行下面命令来安装IPMI-Sensor-Monitoring-Plugin插件的perl依赖模块。

yum install perl-IPC-Run

IPMI-Sensor-Monitoring-Plugin只有一个用perl语言写的check_ipmi_sensor脚本。调用了freeipmi软件包下的ipmimonitoring命令。使用方法如下:

./check_ipmi_sensor -H 10.1.11.11 -U USERID -P PASSW0RD -L USER -T Memory -vv
#命令名 -主机地址 -用户名 -密码 -IPMI执行权限 -传感器分组 -结果输出详细程度

上面命令中,传感器类型分组一项。如果分组名内包含空格的话,请把空格转换为英文半角下划线。这不是check_ipmi_sensor脚本的问题,是freeipmi的问题。另外,如果权限不对,造成脚本无法执行,自己Google一下吧。

修改Nagios配置文件

使用check_ipmi_sensor脚本定义Nagios监测命令。将check_ipmi_sensor移动到/usr/lib64/nagios/plugins/文件夹,并以Nagios权限重新执行命令。确保在Nagios用户下不会出现权限问题。

cp check_ipmi_sensor /usr/lib64/nagios/plugins/
sudo -u nagios /usr/lib64/nagios/plugins/check_ipmi_sensor -H 10.1.11.11 -U USERID -P PASSW0RD -L USER -T Memory -vv

如果上述命令能成功执行,即可在command.conf文件中添加命令定义了。

这时又出现一个问题。此时一台服务器已经对应两个IP了,而Nagios主机配置文件中只有一个address定义。好在Nagios支持自定义对象变量(custom object variable),说白了,就是允许用户自定义主机属性,并在command.conf文件中以固定格式的宏变量引用。详细内容再查找资料吧。

以上就解决了所有的问题。只修改或添加主机文件,如下格式就行了。

define host{
use                windows-server
host_name          JYD-Server
alias              CZB JYD Server
address            10.1.9.1
_ipmi_ip           10.1.11.11
}

define service{
use                        generic-service
host_name                  JYD-Server
service_description        Hardware Temperature
check_command              check_ipmi_sensor!Temperature
}

define service{
use                        generic-service
host_name                  JYD-Server
service_description        Hardware Fan Health
check_command              check_ipmi_sensor!Fan
}

define service{
use                        generic-service
host_name                  JYD-Server
service_description        Hardware Porcessor Health
check_command              check_ipmi_sensor!Processor
}

define service{
use                        generic-service
host_name                  JYD-Server
service_description        Hardware Memory Health
check_command              check_ipmi_sensor!Memory
}

同时,修改Nagios命令定义文件command.conf文件。添加如下命令定义:

define command{
command_name    check_ipmi_sensor
command_line    $USER1$/check_ipmi_sensor -H $_HOSTIPMI_IP$ -U USERID -P PASSW0RD -L USER -vv -T $ARG1$
}

添加完所有主机的服务后,执行Nagios命令检查Nagios配置文件的正确性。然后重启服务就可以了。

配置接收Trap报警

配置Nagios到这个地步,肯定知道,添加一项新的Trap报警,获取私有的mib最重要。snmptrapd和snmptt和Nagios之间的已经完成消息互通,不太可能短时间内失效。

Nagios能发出哪个主机的哪些类型的报警消息,取决于Nagios配置了多少主机和snmptt能解释多少种trap消息。也就是mib文件

Nagios能不能正确的发出trap报警消息,取决于snmptt能不能将报警发送者的IP地址,正确反解析到Nagios主机配置文件中定义的主机名。也就是/etc/hosts文件。

综合以上两点,这部分配置的重点就是:找到imm使用的mib文件;正确映射主机名到IP和IPMI_IP 。

获取IBM IMM私有MIB

通过Google搜索,在下面的两个帖子中发现,配置IMM的SNMP监控,需要IMM-MIB和IMMALERT-MIB两个MIB库。

要想通过SNMP的形式配置imm,完成诸如配置channel ip,远程开关机之类的snmpset操作,需要详细阅读了解IMM-MIB库;要接收分析IMM发出的报警,需要详细理解IMMALERT-MIB库。

上述两个文件可以从IBM Fix Central页面的任何一个IMM固件升级包中获取。下载IMM固件升级包需要IBM账号。选择好服务器硬件型号,操作系统类型,在第二步选择imm2固件升级。在下载页面选择下载一个以uxz为后缀的文件大小约为67MB的文件。例如ibm_fw_imm2_1aoo48h-3.10_anyos_noarch.uxz (67.12 MB)。将后缀名改为zip ,用解压缩软件打开。在根目录下就有这两个mib文件。

使用snmptt自带的snmpttconvertmib命令,将immalert.mib文件转换成snmptt.conf.ibm-imm2文件。对转换后的文件,稍作修改后,将其路径添加到snmptt.ini文件的结尾。重启snmptt服务即可。mib转换命令和snmptt文件结尾修改部分如下

snmpttconvertmib --in=/usr/share/snmp/mibs/immalert.mib --out=/etc/snmp/snmptt.conf.ibm-imm2 --exec='/usr/lib64/nagios/plugins/eventhandlers/submit_check_result "$A" "SNMP-TRAP" "1" "$Fz" '

[root@nms ~]# tail /etc/snmp/snmptt.ini
snmptt_conf_files = << END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.hh3c-mstp
/etc/snmp/snmptt.conf.vrrp
/etc/snmp/snmptt.conf.hh3c-ui-man
/etc/snmp/snmptt.conf.hh3c-entity-ext
/etc/snmp/snmptt.conf.h3c-entity-ext
/etc/snmp/snmptt.conf.huawei-splat-trap
/etc/snmp/snmptt.conf.ibm-imm2
END

[root@nms ~]# service snmptt restart
Stopping snmptt: [  OK  ]
Starting snmptt: [  OK  ]

在Nagios监控服务器的/etc/hosts文件中,将被监控服务器的IP和IPMI_IP映射到同一个主机名。如下所示:

[root@nms ~]# cat /etc/hosts | grep JYD-Server
10.1.9.1 JYD-Server
10.1.11.11 JYD-Server

上述配置完成后,可以将如下所示的SNMP-TRAP服务配置部分,添加到服务器的主机文件中。验证配置文件正确性后,重启Nagios服务即可。

define service{
use                         SNMP-TRAP
hosts                       JYD-Server
service_description         SNMP-TRAP
}

验证SNMP Trap报警

为了验证trap配置的正确性。使用iReasoning MIB browser软件中包含的Trap Sender向Nagios发送一个自定义OID的trap报文,看是不是有相应的报警生成。

snmp-trap-sender

下面是发送出trap报文后,对应主机生成的一项报警信息。

snmp-trap-service-status-test

从上面两个截图可以看出Trap配置已经生效。

结语

本文介绍了如何通过Nagios以IPMI协议监控服务器硬件内部的传感器状态。同时以SNMP协议接收服务硬件的主动报警。

按照文档配置完成后,读者将会比较深刻的理解IPMI协议。日后研究高可用集群时,肯定会用到IPMI部分的知识。这是后话。

文中除了几个脚本之外,并没有提供任何文件。这一切都要您自己去搜集。这些文件中,有一小部分可能要科学上网。

相关的文章:

1条评论

写评论
  • 大西洋 回复

    转载请注明出处。谢谢合作!