关于硬件监控,常用的监控手段通常为SNMP
和IPMI
:
SNMP(Simple Network Management Protocol)
简单网络管理协议,是由互联网工作组定义的一套网络管理协议。IPMI(Intelligent Platform Management Interface)
即智能平台管理接口是使硬件管理具备“智能化”的新一代通用接口标准;在进行配置SNMP之前,需要了解以下几个概念(深入挖掘可以参考Google):
MIB文件中的变量使用的名字取自ISO和ITU管理的对象标识符(object identifier)名字空间。它是一种分级树的结构。可以分为两种类型:
.0
来引用。通过对SNMP简介中得知,MIB对于配置SNMP的重要性,那么,该段文字便是介绍关于获取MIB文件的方法:
第二方法为手动获取:
ftp://ftp.cisco.com/pub/mibs/supportlists/
or http://tools.cisco.com/ITDIT/MIBS/MainServlet
;https://www-945.ibm.com/support/fixcentral/
下载IMM微码升级文件,将下载好的微码升级文件(eg:ibm_fw_imm_yuooh1c-1.50_windows_32-64)
双击打开,选择Extract to Hard Drive将文件导出,即可得到imm.mib
文件;https://www-945.ibm.com/support/fixcentral/
下载Library微码升级文件,解压即可得到IBM-3100-MIB.mib
;https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c04272529
;Dell支持中心(https://www.dell.com/support/home/cn/zh/cndhs1/)
,选择相应的设备型号,在驱动程序和下载
中找到Dell EMC OpenManage MIBs for PowerEdge,v9.3.0
下载获得;Dell支持中心(https://www.dell.com/support/home/cn/zh/cndhs1/)
,选择相应的设备型号,在驱动程序和下载
中找到 Dell Storage Center操作系统(MIB)
下载获得。华为企业业务软件下载中心(https://support.huawei.com/enterprise/zh/software/index.html)
,选择相应的设备型号,在软件
中找到RH5885H V3-iBMC-MIB-V316.zip
类似文件下载获得。RealPresence Resource Manager system
中,转到Admin > Server Settings > SNMP Settings
点击下载即可获取。各个厂商的SNMP Agent配置方法不径相同:
在配置的时候,需要注意到几个参数:
|参数|描述|
|:---|:---|
|Address|SNMP设备(Agent)的地址 |
|SNMP Version|SNMP的版本,建议使用SNMPv2c|
|SNMP Community|SNMP的团体名|
在获取到MIB文件后,即可通过相应的工具加载MIB文件,例如MIB Browser
、FreeSnmp
等,建议使用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个控制器。
首先新建一个模板,名为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
简单变量的值,均为一个值,那么可以筛选部分有用的简单变量添加到模板的监控项中,例如:
复制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的描述|
在上文提及到对表格
的定义中,是这样描述的:
表格:对应一组数组,可包含变量的多个实例,表格中的每个表项可以用多个字段,这些字段本身可能是简单变量也可能是表格,表格不能直接进行存取。
这种查询SNMP设备在单个请求中的多个值,就需要用到自动发现(Low-level discovery)。
在Zabbix官网的介绍中,自动发现的过程如下:
首先,用户在配置
→模板
→发现
列中创建一个发现规则。发现规则包括:
其次,自动发现所需实体的项就像其他地方所看到的常规项一样:服务器(Zabbix Server)向 Agent(或者对应该项的其他类型的设置)查询该项的值,Agent以文本值进行响应。区别在于Agent响应的值应该包含特定JSON格式的已发现实体的列表。虽然这个列表的详细信息仅对自定义发现检查来说很重要,但有必要知道返回的值包含宏->值相对应的列表。例如,项目net.if.discovery
可能会返回两对:
{#IFNAME} -> lo
{#IFNAME} -> eth0
net.if.discovery
示例中,服务器将生成lo
和eth0
的两组监控项、触发器和图表。在了解完自动发现的过程后,可以回过头来整理出表格类型的监控思路:
结合上文提到的自动发现的过程,对应下图,那么就可以生成创建自动发现的思路:
scCtlrTempName
(温度传感器的名称)来表示;其次,返回Zabbix中提到的宏->值相对应的列表:
{#scCtlrTempName} -> BBU
{#scCtlrTempName} -> System Board
...
...
BBU
和System Board
的监控项。例如,新建一个名为温度传感器的状态scCtlrTempStatus
的监控项,等等;BBU
和System Board
,根据创建的温度传感器
的监控项原型,Zabbix 会生成温度传感器BBU
和System Board
的两组监控项。在整理完自动发现的创建思路后,可以按照上面的思路添加一个自动发现检查项,在之前创建的模板中,跳转到自动发现规则
,点击右上角的创建发现规则
:
在这里,值得注意的是,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}
设置为1
和2
、宏{#SNMPVALUE}
设置为BBU
和System Board
。
{
"data": [
{
"{#SNMPINDEX}": "1",
"{#SNMPVALUE}": "BBU",
},
{
"{#SNMPINDEX}": "2",
"{#SNMPVALUE}": "System Board",
},
]
}
最后,新建这个自动发现规则下的监控项原型:
其中,值得注意的是,键值
和SNMP OID
一定要按照图中格式加上{#SNMPINDEX}
,确保后面能获取到不重名的监控项。
硬件类监控往往关注点在于(也就是触发器):
关于状态这类监控项,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
关于数值这类监控项,MIB往往会提供当前的值和设定的阈值,例如:
那么,就可以在自动发现规则的监控项原型中同时添加当前的值和设定的阈值监控项:
值得注意的是:设定的阈值这类监控项取值间隔无须太频繁,建议1d。
最后,就可以在添加触发器的时候,利用这个设定的阈值来创建触发器,例如:
触发器名称:控制器温度传感器 {#SNMPVALUE} 当前的数值高于严重阈值
表达式:{Template_SNMPv2_Dell_Storage_SC_Chinese:ScCtlrTempCurrentC.[{#SNMPINDEX}].last()} > {Template_SNMPv2_Dell_Storage_SC_Chinese:ScCtlrTempCritUprC.[{#SNMPINDEX}].last()}
值得注意的:如果是配置自动发现规则中的监控项的触发器,名称中要加上 {#SNMPVALUE} ,那么在触发器触发后,触发器名称会带有自动发现的实体。
至此,篇幅中较为复杂的部分就是自动发现规则(表格),在理解其配置思路后,配置过程便会如履平地。
其实,在厂商的MIB文件中,已经归类好简单变量和表格类型,且逻辑清晰(信息->状态),通过遍历整个MIB文件,监控思路便可跃然纸上。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞14
添加新评论2 条评论
2020-04-22 11:01
2020-01-02 00:38