使用 SNMP 监控主机和 dom0 资源
拥有池管理员角色后,您可以使用 SNMP 远程监控 XenServer® 主机和 dom0(主机的控制域)所消耗的资源。SNMP 管理器(也称为网络管理系统 (NMS))向在 XenServer 主机上运行的 SNMP 代理发送查询请求。SNMP 代理通过将收集到的各种指标数据发送回 NMS 来响应这些查询请求。可收集的数据由名为管理信息库 (MIB) 的文本文件中的对象标识符 (OID) 定义。OID 表示有关网络设备的特定可测量信息,例如 CPU 或内存使用情况。
您还可以配置陷阱,这些是代理发起的警报消息,用于通知 NMS XenServer 中发生了特定事件。查询请求和陷阱都可以用于监控 XenServer 池的状态。这些被定义为度量和陷阱对象,并通过 MIB 文件 XENSERVER-MIB.txt 中的 OID 进行标识,该文件可从 XenServer 下载页面 下载。下表提供了有关这些度量和陷阱对象的信息。
度量对象
您可以使用下表中列出的指标来请求有关 XenServer 主机的特定信息。SNMP 管理器在向 SNMP 代理发送查询请求时会使用这些指标,因此您可以在 NMS 中查看这些数据。
您可以从 NMS 或 xe CLI 查看这些度量对象返回的数据。要从 xe CLI 查询度量对象,请运行 host-data-source-query 或 vm-data-source-query,并将 RRDD 数据源作为 data-source 参数的值提供。例如:
xe host-data-source-query data-source=cpu_avg host=<host UUID>
<!--NeedCopy-->
注意:
默认情况下,NMS 使用端口 161 向 SNMP 代理发送 OID 查询请求。
| 对象标识符 (OID) | RRDD 数据源 | 返回数据 | 类型 |
|---|---|---|---|
| 1.3.6.1.4.1.60953.1.1.1.1 | memory |
Dom0 总内存(MB) | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.2 | memory_internal_free |
Dom0 空闲内存 (MB) | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.3 | cpu_usage |
Dom0 CPU 使用率(百分比) | 浮点数 |
| 1.3.6.1.4.1.60953.1.1.1.4 | memory_total_kib |
主机总内存 (MB) | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.5 | memory_free_kib |
主机可用内存(MB) | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.6 | cpu_avg |
主机 CPU 使用率(百分比) | 浮点数 |
| 1.3.6.1.4.1.60953.1.1.1.7 | (参见注释 1) | 物理 CPU 数量 | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.8 | running_vcpus |
正在运行的虚拟 CPU 数量 | 无符号32位整数 |
| 1.3.6.1.4.1.60953.1.1.1.9 | running_domains |
正在运行的虚拟机数量 | 无符号32位 |
注意:
pCPU 的名称格式为
cpu后跟一个数字。要从 xe CLI 查询 pCPU 的数量,请运行以下命令:
xe host-data-source-list host=<host UUID> | grep -E 'cpu[0-9]+$'这将返回一个匹配正则表达式
cpu[0-9]+的 CPU 指标列表。
陷阱
陷阱是 SNMP 代理发送的警报,用于在特定事件发生时通知 SNMP 管理器,从而使您能够监控 XenServer 主机并及早发现问题。您可以配置 SNMP 设置,以便在达到限制时(例如,如果主机 CPU 使用率过高)生成陷阱。生成陷阱时,它会发送到您的 NMS,并且以下字段作为陷阱对象的一部分返回。
注意:
默认情况下,池协调器主机上的 SNMP 代理使用 UDP 端口 162 将陷阱发送到 NMS。
| 对象标识符 (OID) | 字段名称 | 类型 | 描述 |
|---|---|---|---|
| 1.3.6.1.4.1.60953.1.10.1.1 | operation |
字符串 | 可以是以下值之一:add 或 del。如果 XenServer 生成陷阱并将其发送到您的 NMS(XenCenter 中也会创建警报),则 operation 为 add;如果警报被销毁(例如,如果您关闭警报),则为 del。 |
| 1.3.6.1.4.1.60953.1.10.1.2 | ref |
字符串 | 陷阱对象的引用。 |
| 1.3.6.1.4.1.60953.1.10.1.3 | uuid |
字符串 | 陷阱对象的 UUID。 |
| 1.3.6.1.4.1.60953.1.10.1.4 | name |
字符串 | 陷阱对象的名称。 |
| 1.3.6.1.4.1.60953.1.10.1.5 | priority |
整数 | 陷阱的严重性。可以是以下值之一:1:严重,2:主要,3:警告,4:次要,5:信息,others:未知。 |
| 1.3.6.1.4.1.60953.1.10.1.6 | class |
字符串 | 生成的陷阱类别。可以是以下值之一:VM、Host、SR、Pool、VMPP、VMSS、PVS_proxy、VDI 或 Certificate。 |
| 1.3.6.1.4.1.60953.1.10.1.7 | obj-uuid |
字符串 | 字段 class 的各种类的 xapi 对象 UUID。 |
| 1.3.6.1.4.1.60953.1.10.1.8 | timestamp |
字符串 | 生成陷阱的时间。 |
| 1.3.6.1.4.1.60953.1.10.1.9 | body |
字符串 | 有关字段 name 的详细信息。 |
先决条件
-
池中的所有主机都必须运行相同版本的 XenServer,并且此版本必须包含 SNMP 插件。
注意:
如果您在 XenCenter® 中看不到 SNMP 选项卡,则可能是因为主机或池中的成员未运行支持 SNMP 的 XenServer 版本。请将主机或池更新到最新版本的 XenServer。
-
您使用的 NMS 必须支持 SNMPv2c 或 SNMPv3。
-
您的 NMS 和 XenServer 必须网络连接。
限制
- 您可以为整个池或不属于任何池的独立主机配置 SNMP 设置。目前,您无法为池中的单个主机配置 SNMP 设置。
-
如果将主机添加到已启用并配置 SNMP 的池中,XenCenter 不会自动将池的 SNMP 设置应用于新主机。您必须在新主机添加到池后重新配置池上的 SNMP 设置,或者在将新主机添加到池之前使用相同的 SNMP 设置配置新主机。
注意:
在新主机添加到池后重新配置 SNMP 设置时,请确保主机已启动并正在运行,且未处于维护模式。
- 当 SNMP 代理脱机时,无法生成陷阱。例如,如果 SNMP 代理重新启动,或者池协调器重新启动或重新指定。
使用 xe CLI 配置 SNMP
您可以使用 xe CLI 或 XenCenter 配置 SNMP。有关如何使用 XenCenter 配置 SNMP 的更多信息,请参阅使用 SNMP 监视主机和 dom0 资源。
result 对象
配置 SNMP 时,所有响应都以 JSON 格式返回。如果命令成功执行,它将返回键值对 "code": 0。某些命令(例如 get-config 命令)返回一个名为 result 的嵌套 JSON 对象。result JSON 对象也是 set-config 命令所必需的,该命令用于更新 SNMP 配置。
result JSON 对象由以下对象组成:common、agent 和 nmss:
common
| 字段 | 允许值 | 默认值 |
|---|---|---|
enabled |
no(禁用 SNMP 服务)或 yes(启用 SNMP 服务) |
no |
debug_log |
no (禁用调试日志) 或 yes (启用调试日志) |
no |
max_nmss |
不适用 (此字段为只读,指定了支持的最大 NMS 数量) | 1 |
agent
| 字段 | 允许值 | 默认值 |
|---|---|---|
v2c |
no (禁用 SNMPv2c) 或 yes (启用 SNMPv2c) |
yes |
community |
COMMON_STRING_TYPE (参见注释 1) | public |
v3 |
no (禁用 v3) 或 yes (启用 v3) |
no |
user_name |
COMMON_STRING_TYPE (请参阅注释 1) | |
authentication_password |
COMMON_STRING_TYPE 长度 >= 8 (请参阅注释 1) | |
authentication_protocol |
MD5 或 SHA
|
|
privacy_password |
COMMON_STRING_TYPE 长度 >= 8 (请参阅注释 1) | |
privacy_protocol |
DES 或 AES
|
|
engine_id |
不适用(此字段为只读,在 SNMP 代理首次启动时生成) |
nmss
| 字段 | 允许值 | 默认值 |
|---|---|---|
uuid |
NMS UUID(在配置 NMS 陷阱接收器时设置此值,此值在池中的所有主机上应保持一致) | |
address |
NMS IPv4 地址或主机名 (FQDN) | |
port |
1 到 65535
|
162 |
v2c |
no(禁用 SNMPv2c),yes(启用 SNMPv2c),或支持 SNMPv2c 或 v3。 |
yes |
community |
通用字符串类型 (参见注释 1) | public |
v3 |
no (禁用 v3), yes (启用 v3), 或支持 SNMPv2c 或 SNMPv3。 |
no |
user_name |
通用字符串类型 (参见注释 1) | |
authentication_password |
通用字符串类型,其中长度 >= 8 (参见注释 1) | |
authentication_protocol |
MD5 or SHA
|
|
privacy_password |
通用字符串类型,其中长度 >= 8 (参见注释 1) | |
privacy_protocol |
DES 或 AES
|
注意:
- COMMON_STRING_TYPE 指满足以下要求的字符串:
- 字母、数字、连字符 (-)、句点 (.)、井号 (#)、at 符号 (@)、等号 (=)、冒号 (:) 或下划线字符 (_) 的任意组合。
- 长度在 6 到 32 之间(含)。
- 密码不会以明文形式存储在 XenServer 的任何配置文件中。它们被转换为本地化密钥并存储。
get-config命令将密码显示为由星号 (*) 组成的隐藏常量。
配置 SNMP 服务
获取 SNMP 服务状态:
xe host-call-plugin host-uuid=<host-uuid> plugin=snmp fn=status
<!--NeedCopy-->
启动、停止或重新启动 SNMP 服务:
xe host-call-plugin host-uuid=<host-uuid> plugin=snmp fn=<operation>
<!--NeedCopy-->
其中 operation 为 start、stop 或 restart。
获取 SNMP 配置详细信息:
xe host-call-plugin host-uuid=<host-uuid> plugin=snmp fn=get-config
<!--NeedCopy-->
如果成功,此命令将返回键值对 "code": 0 和包含 SNMP 服务配置详细信息的 result JSON 对象。例如:
"code": 0,
"result": {
"common": {
"enabled": "no",
"debug_log": "no",
"max_nmss": 1
},
"agent": {
"v2c": "yes",
"v3": "no",
"community": "public",
"user_name": "",
"authentication_password": "",
"authentication_protocol": "",
"privacy_password": "",
"privacy_protocol": "",
"engine_id": "<engine_id>"
},
"nmss": []
}
<!--NeedCopy-->
将 result JSON 对象复制到您首选的文本编辑器中,并从文件中删除所有换行符 (\n)。使用您的 SNMP 配置详细信息更新字段。通过参考您的 NMS 文档并为 nmss 对象所需的字段指定值来配置您的 NMS。有关更多信息,请参阅上面列出的 对象。
要配置 SNMP 服务,请运行 set-config 命令,并将编辑后的 result JSON 对象作为参数值提供给 args:config 参数。
设置 SNMP 配置:
xe host-call-plugin host-uuid=<host-uuid> plugin=snmp fn=set-config args:config='<result>'
<!--NeedCopy-->
其中 result 是您复制和编辑的 get-config 命令返回的 result JSON 对象。
注意:
要为整个池配置 SNMP,您必须为池中的每个主机运行
set-config命令。
如果配置更改成功,该命令将返回键值对 "code": 0。如果配置更改不成功,set-config 命令将返回以下键值对之一,表明发生了错误:
-
"code": 1:常见错误字符串。例如,未知异常。 -
"code": 2:错误字符串(参数缺失)。 -
"code": 3:返回一个message对象作为列表,其中每个元素都采用[field_path, key, value, error string]的格式。
您还可以向您的 NMS 发送一个测试 SNMP trap,以验证指定的 trap 接收器信息是否正确。
发送测试 SNMP trap:
xe host-call-plugin host-uuid=<host-uuid> plugin=snmp fn=send-test-trap args:config='{"nmss":[{"uuid":"<uuid>","address":"<address>","port":162,"v2c":"yes","v3":"no","community":"public","user_name":"<user_name>","authentication_password":"<authentication_password>","authentication_protocol":"<authentication_protocol>","privacy_password":"<privacy_password>","privacy_protocol":"<privacy_protocol>"}]}'
<!--NeedCopy-->
此命令将向您的 NMS 发送一个测试 trap,其 msg_name 为 TEST_TRAP,msg_body 为 This is a test trap from XenServer pool "<pool name>" to verify the NMS Trap Receiver configuration.。
如果您未收到测试 trap,请再次检查您的 SNMP 配置。如果不成功,send-test-trap 命令也会返回以下键值对之一,表明发生了错误:
-
"code": 1:常见错误字符串。例如,未知异常。 -
"code": 2:错误字符串(参数缺失)。 -
"code": 3:返回一个message对象作为列表,其中每个元素都采用[field_path, key, value, error string]的格式。 -
"code": 4:返回一个message对象作为列表,其中每个元素都采用[nms address, nms port, error string]的格式。