everychengxuan
作者everychengxuan2019-06-29 19:01
系统工程师, 某某公司

Zabbix4.0配置SNMP硬件监控

字数 8930阅读 11552评论 2赞 14

1. 硬件监控

  • 关于硬件监控,常用的监控手段通常为SNMPIPMI

    • SNMP(Simple Network Management Protocol)简单网络管理协议,是由互联网工作组定义的一套网络管理协议。
    • IPMI(Intelligent Platform Management Interface)即智能平台管理接口是使硬件管理具备“智能化”的新一代通用接口标准;
  • 对于二者的取舍,缘于SNMP协议的不断完善、设备厂商的全力支持,SNMP现在支持的设备种类越来越多、获取的信息更加完善,因此,建议在设备支持的情况下,尽可能使用SNMP协议来监控。

2. SNMP简介

在进行配置SNMP之前,需要了解以下几个概念(深入挖掘可以参考Google):

  • SNMP(Simple Network Management Protocol)简单网络管理协议,是由互联网工作组定义的一套网络管理协议。
  • 一套完整的SNMP系统主要包括SNMP报文协议、管理信息库(MIB)及管理信息结构(SMI)
  • 在SNMP中,管理站(NMS)和代理(Agent)之间的管理信息构成了SNMP报文
  • SNMP主要有SNMPv1、SNMPV2c(最常用)、SNMPv3几种最常用的版本。
  • SNMP消息主要由Version、Community、SNMP PDU几部分构成
  • OID(对象标识符),是SNMP代理提供的具有唯一标识的键值。
  • MIB(管理信息库),是提供数字化OID到可读文本的映射。一个MIB描述了在哪里找某个值、以及返回结果是什么。
  • MIB文件中的变量使用的名字取自ISO和ITU管理的对象标识符(object identifier)名字空间。它是一种分级树的结构。可以分为两种类型:

    • 简单变量(Simple varible):是常见的整型以及字符串,也包括一些数据集合,通过在变量的对象标识符末尾附件.0来引用。
    • 表格(Table):对应一组数组,可包含变量的多个实例,表格中的每个表项可以用多个字段,这些字段本身可能是简单变量也可能是表格,表格不能直接进行存取
  • 通俗而言,缘于OID值的晦涩难懂,MIB其实只是提供给用户关于OID的具体解释的一张解码表

3. 获取设备的MIB

通过对SNMP简介中得知,MIB对于配置SNMP的重要性,那么,该段文字便是介绍关于获取MIB文件的方法:

  • 第一种即为最简单的方法,直接找设备厂商要;
  • 第二方法为手动获取:

    • Cisco设备:通过该链接获取ftp://ftp.cisco.com/pub/mibs/supportlists/ or http://tools.cisco.com/ITDIT/MIBS/MainServlet
    • IBM X Series:该设备的MIB位于IMM的微码文件中,访问https://www-945.ibm.com/support/fixcentral/下载IMM微码升级文件,将下载好的微码升级文件(eg:ibm_fw_imm_yuooh1c-1.50_windows_32-64)双击打开,选择Extract to Hard Drive将文件导出,即可得到imm.mib文件;
    • IBM TS Series:该设备的MIB位于Library的微码文件中,访问https://www-945.ibm.com/support/fixcentral/下载Library微码升级文件,解压即可得到IBM-3100-MIB.mib
    • Brocade San Switch:一般可以从OEM官网下载的FOS文件中获取;
    • HPE DL Series:通过该链接获取https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c04272529
    • Dell R Series:通过访问Dell支持中心(https://www.dell.com/support/home/cn/zh/cndhs1/),选择相应的设备型号,在驱动程序和下载中找到Dell EMC OpenManage MIBs for PowerEdge,v9.3.0下载获得;
    • Dell SC Series:通过访问Dell支持中心(https://www.dell.com/support/home/cn/zh/cndhs1/),选择相应的设备型号,在驱动程序和下载中找到 Dell Storage Center操作系统(MIB)下载获得。
    • Huawei RH Series:通过访问华为企业业务软件下载中心(https://support.huawei.com/enterprise/zh/software/index.html),选择相应的设备型号,在软件中找到RH5885H V3-iBMC-MIB-V316.zip类似文件下载获得。
    • Polycom:可以在RealPresence Resource Manager system中,转到Admin > Server Settings > SNMP Settings点击下载即可获取。

4. 配置设备的SNMP

各个厂商的SNMP Agent配置方法不径相同:

  • Lenovo SR(IBM x) Series 在Integrated Management Module里配置;
  • HPE Dl Series 在HPE INTEGRATED LIGHTS OUT ILO里配置;
  • Dell R Series 在Integrated Dell Remote Access Controller里配置;
  • ......

在配置的时候,需要注意到几个参数:

|参数|描述|
|:---|:---|
|Address|SNMP设备(Agent)的地址 |
|SNMP Version|SNMP的版本,建议使用SNMPv2c|
|SNMP Community|SNMP的团体名|

示例:Dell Storage Center


5. 阅读MIB文件

在获取到MIB文件后,即可通过相应的工具加载MIB文件,例如MIB BrowserFreeSnmp等,建议使用MIB Browser Personal Edition

http://www.ireasoning.com/download.shtml

待安装完毕后,加载MIB文件,本文以Dell Storage Center的MIB进行示例。

在硬件管理平台配置SNMP Community,将地址和SNMP Community填入到Advanced Properties of SNMP Agent中。

展开左侧加载的OID列表,选中一项变量,右下角即出现该项变量的具体解释:

|参数|描述|
|:---|:---|
|Name|productIDDisplayName|
|OID|.1.3.6.1.4.1.674.11000.2000.500.1.2.1|
|MIB|DELL-STORAGE-SC-MIB|
|Syntax| SNMPADMINSTRING|
|Access| read-only|
|Status| current|
|DefVal||
|Indexes||
|Descr| Name of this product for display purposes.|

双击该变量即可获取到值,该值为右侧的Dell Compellent Storage Center,仔细观察上方的OID(.1.3.6.1.4.1.674.11000.2000.500.1.2.1.0),该值的末尾以.0结尾,那么该变量即为简单变量。即左侧红框处圈中的变量,均为简单变量。

展开下方图标为表格的部分,表示一组变量,即为表格,通过阅读该组表格的Descr,了解到该组表格包含了控制器的数量(scCtlrNbr)、控制器的状态(scCtlrStatus)、控制器的名称(scCtlrName)等,点击get到变量的值,右侧Value显示为1和2,即表示有2个控制器。


6. Zabbix配置SNMP监控

首先新建一个模板,名为Template_SNMPv2_Dell_Storage_SC_Chinese,通过上文的阅读MIB文件段落中得知,MIB文件中存在着简单变量和表格,那么,便围绕着这两种类型来设计监控模板。

建议:配置一个模板宏,便于区分多个SNMP 模板的SNMP community。

此外,为了方便在Zabbix Server上测试监控项,需要安装SNMP工具来发起手动测试。

shell> yum -y install net-snmp  
shell> yum -y install net-snmp-utils snmpget  

6.1. 监控项(简单变量)

简单变量的值,均为一个值,那么可以筛选部分有用的简单变量添加到模板的监控项中,例如:

复制productIDGlobalStatus的OID值,手动在Zabbix Server上发起snmpget测试,结果如下:

shell> snmpget -v 2c -c SCv3000 10.1.3.110 .1.3.6.1.4.1.674.11000.2000.500.1.2.6.0  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.6.0 = INTEGER: 3  

接着,对应该项在MIB Browser中的变量内容,将其添加为一个监控项:

|Zabbix监控项参数|MIB Browser参数|描述|
|:---|:---|:---|
|名称|Descr|根据MIB Browser中Descr中的描述,在Zabbix中赋予其合适的名称|
|类型|无|被监控设备中配置的SNMP Version|
|键值|Name(productIDGlobalStatus)|个人将MIB Browser中Name的字段,在Zabbix中设为键值|
|SNMP OID|OID|唯一的OID|
|SNMP community||为了区分多个SNMP模板,建议单独设置,例如:{$SNMP_COMMUNITY_SC}|
|信息类型|Syntax|MIB Browser中定义为INTEGER,那么Zabbix中相应选择数字(无正负)|
|单位|Descr|根据MIB Browser中Descr中的描述,在Zabbix中赋予其合适的单位。例如,如果描述为设备的运行时间,那么可以在此填入s(秒)这个单位|
|更新间隔|Descr|根据MIB Browser中Descr中的描述,在Zabbix中赋予其合适的取值间隔。例如,描述性的内容,可以设置为1d,状态性的内容,可以设备为5m|
|查看值|Syntax|在大多数为状态类型的OID中,均设计了值映射。例如,这个OID的字段内容为: INTEGER {other( 1 ),unknown( 2 ),ok( 3 ),noncritical( 4 ),critical( 5 ),nonrecoverable( 6 )},那么便可以在Zabbix定义相应的值映射|
|描述|Dsecr|该OID的描述|

值映射:

依次,将简单变量一一添加为监控项,不多赘述。


6.2. 自动发现规则(表格)


6.2.1. 自动发现的过程

在上文提及到对表格的定义中,是这样描述的:

表格:对应一组数组,可包含变量的多个实例,表格中的每个表项可以用多个字段,这些字段本身可能是简单变量也可能是表格,表格不能直接进行存取。

这种查询SNMP设备在单个请求中的多个值,就需要用到自动发现(Low-level discovery)

在Zabbix官网的介绍中,自动发现的过程如下:

  • 首先,用户在配置模板发现列中创建一个发现规则。发现规则包括:

    • 自动发现必要实体(例如,文件系统或网络接口)的项;
    • 根据该项的值创建的监控项、触发器和图形的原型。
  • 其次,自动发现所需实体的项就像其他地方所看到的常规项一样:服务器(Zabbix Server)向 Agent(或者对应该项的其他类型的设置)查询该项的值,Agent以文本值进行响应。区别在于Agent响应的值应该包含特定JSON格式的已发现实体的列表。虽然这个列表的详细信息仅对自定义发现检查来说很重要,但有必要知道返回的值包含宏->值相对应的列表。例如,项目net.if.discovery可能会返回两对:

    {#IFNAME} -> lo   
    {#IFNAME} -> eth0  
  • 然后,这些用于名称、键值和其他原型字段中,用接收到的为每个发现的实体创建实际的监控项,触发器,图形甚至主机;
  • 最后,当服务器接收到已发现项的值时,它会查看宏→值这种对应关系,每对都根据原型生成实际监控项,触发器和图形。在上面的net.if.discovery示例中,服务器将生成loeth0的两组监控项、触发器和图表。

6.2.2. 自动发现的思路

在了解完自动发现的过程后,可以回过头来整理出表格类型的监控思路:

结合上文提到的自动发现的过程,对应下图,那么就可以生成创建自动发现的思路:

  • 首先,自动发现的必要实体,在此可以用scCtlrTempName(温度传感器的名称)来表示;
  • 其次,返回Zabbix中提到的宏->值相对应的列表:

    {#scCtlrTempName} -> BBU  
    {#scCtlrTempName} -> System Board  
    ...  
    ...  
  • 然后,可以新建温度传感器BBUSystem Board的监控项。例如,新建一个名为温度传感器的状态scCtlrTempStatus的监控项,等等;
  • 最后,根据自动发现规则发现的值,为温度传感器BBUSystem Board,根据创建的温度传感器的监控项原型,Zabbix 会生成温度传感器BBUSystem Board的两组监控项。


6.2.3. 自动发现的创建

在整理完自动发现的创建思路后,可以按照上面的思路添加一个自动发现检查项,在之前创建的模板中,跳转到自动发现规则,点击右上角的创建发现规则

在这里,值得注意的是,SNMP OID字段要以以下格式定义:

discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,]  

其中{#MACRO1}, {#MACRO2} … 是有效的LLD宏名称,oid1, oid2… 是能够为这些宏生成有意义值的OID。包含已发现OID索引的内置宏{#SNMPINDEX}将应用于已发现的实体。发现的实体按{#SNMPINDEX}宏的值分组。

注意:{#SNMPINDEX} 和 {#SNMPINDEX} 为内置宏。

为了直观的理解,可以手动snmpwalk(要获取SNMP字符串列表,需要使用 snmpwalk 命令)测试下:

# scCtlrTempName  
shell> snmpwalk -v 2c -c SCv3000 10.1.3.110 .1.3.6.1.4.1.674.11000.2000.500.1.2.19.1.4  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.1 = STRING: "BBU"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.2 = STRING: "System Board"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.3 = STRING: "SAS Expander"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.4 = STRING: "Left Riser Card"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.5 = STRING: "CPU One"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.6 = STRING: "Ambient"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.7 = STRING: "Midplane One"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.8 = STRING: "Midplane Two"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.9 = STRING: "Exhaust Fan One"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.1.10 = STRING: "Exhaust Fan Two"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.2.1 = STRING: "BBU"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.2.2 = STRING: "System Board"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.2.3 = STRING: "SAS Expander"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.2.4 = STRING: "Left Riser Card"  
SNMPv2-SMI::enterprises.674.11000.2000.500.1.2.19.1.4.2.5 = STRING: "CPU One"  

然后将结果套入到SNMP OID中(只取2组):

discovery[{#SNMPINDEX},1.3.6.1.4.1.674.11000.2000.500.1.2.19.1.4]  

至此,此自动发现规则将宏{#SNMPINDEX}设置为12、宏{#SNMPVALUE}设置为BBUSystem Board

{  
"data": [  
{  
"{#SNMPINDEX}": "1",  
"{#SNMPVALUE}": "BBU",  
},  
{  
"{#SNMPINDEX}": "2",  
"{#SNMPVALUE}": "System Board",  
},  
]  
}  

最后,新建这个自动发现规则下的监控项原型:

其中,值得注意的是,键值SNMP OID一定要按照图中格式加上{#SNMPINDEX},确保后面能获取到不重名的监控项。


6.3. 触发器

待监控项和自动发现都创建完毕后,接下来创建触发器。

硬件类监控往往关注点在于(也就是触发器):

  • 硬件的状态。例如服务器整体状态是否正常、电压传感器的状态是否正常、温度传感器的状态是否正常等等;
  • 硬件的数值。例如电压是否超过阈值、温度是否超过阈值、风扇是否超过阈值等。

6.3.1. 硬件的状态

关于状态这类监控项,MIB文件中关于值的类型最常见的是INTEGER ,也有少数是STRING

例如,在上文新建的名为Storage Center 当前的整体状态监控项中,MIB文件中提供了INTEGER的对应信息,为:

INTEGER {other( 1 ),  
unknown( 2 ),  
ok( 3 ),  
noncritical( 4 ),  
critical( 5 ),  
nonrecoverable( 6 )  
}   

那么,如果最后获取的值不为3(OK)就表示服务器的当前状态异常,表达式如下:

触发器名称:Storage Center 当前的整体状态异常  
表达式:{Template_SNMPv2_Dell_Storage_SC_Chinese:ProductIDGlobalStatus.last(0)}<>3  


6.3.2. 硬件的数值

关于数值这类监控项,MIB往往会提供当前的值和设定的阈值,例如:

那么,就可以在自动发现规则的监控项原型中同时添加当前的值设定的阈值监控项:

值得注意的是:设定的阈值这类监控项取值间隔无须太频繁,建议1d。

最后,就可以在添加触发器的时候,利用这个设定的阈值来创建触发器,例如:

触发器名称:控制器温度传感器 {#SNMPVALUE} 当前的数值高于严重阈值  
表达式:{Template_SNMPv2_Dell_Storage_SC_Chinese:ScCtlrTempCurrentC.[{#SNMPINDEX}].last()} > {Template_SNMPv2_Dell_Storage_SC_Chinese:ScCtlrTempCritUprC.[{#SNMPINDEX}].last()}  
值得注意的:如果是配置自动发现规则中的监控项的触发器,名称中要加上 {#SNMPVALUE} ,那么在触发器触发后,触发器名称会带有自动发现的实体。


7. 总结

至此,篇幅中较为复杂的部分就是自动发现规则(表格),在理解其配置思路后,配置过程便会如履平地。

其实,在厂商的MIB文件中,已经归类好简单变量和表格类型,且逻辑清晰(信息->状态),通过遍历整个MIB文件,监控思路便可跃然纸上。


如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

14

添加新评论2 条评论

zhangpeng4007zhangpeng4007系统运维工程师, 某城市商业银行
2020-04-22 11:01
浪潮的PC server MIB库一般从哪里获得?
gaojz_tygaojz_ty项目经理, ibm
2020-01-02 00:38
非常实用,感谢感谢
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广