XenServer

使用 SNMP 监控主机和 dom0 资源

注意:

SNMP 功能适用于 XenServer Premium 或 Trial Edition 客户。有关 XenServer 许可的更多信息,请参阅许可。要升级或获取 XenServer 许可证,请访问 XenServer 网站

借助池管理员角色,您可以使用 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-queryvm-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位整数

注意:

  1. 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 字符串 可以是以下值之一:adddel。如果 XenServer 生成陷阱并发送到您的 NMS(XenCenter 中也会创建警报),则 operationadd;如果警报被销毁(例如,如果您关闭警报),则为 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 字符串 生成的陷阱类别。可以是以下值之一:VMHostSRPoolVMPPVMSSPVS_proxyVDICertificate
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 设置时,请确保主机已启动并正在运行,并且未处于维护模式。

  • 在将 Citrix Hypervisor 8.2 CU1 滚动池升级到 XenServer 8.4 或将更新应用于 XenServer 主机和池之前,如果您之前手动修改过以下配置文件并且需要它们,请务必备份它们:

    • /etc/snmp/snmpd.xs.conf
    • /etc/sysconfig/snmp
    • /var/lib/net-snmp/snmpd.conf
  • 当 SNMP 代理脱机时,无法生成陷阱。例如,如果 SNMP 代理重新启动,或者池协调器重新启动或重新指定。

使用 xe CLI 配置 SNMP

您可以使用 xe CLI 或 XenCenter 配置 SNMP。有关如何使用 XenCenter 配置 SNMP 的更多信息,请参阅使用 SNMP 监控主机和 dom0 资源

result 对象

配置 SNMP 时,所有响应都以 JSON 格式返回。如果命令成功执行,它将返回键值对 "code": 0。某些命令(例如 get-config 命令)会返回一个名为 result 的嵌套 JSON 对象。用于更新 SNMP 配置的 set-config 命令也需要 result JSON 对象。

result JSON 对象由以下对象组成:commonagentnmss

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 MD5SHA  
privacy_password COMMON_STRING_TYPE,其中长度 >= 8(参见注释 1)  
privacy_protocol DESAES  
engine_id 不适用(此字段为只读,并在 SNMP 代理首次启动时生成)  

nmss

字段 允许值 默认值
uuid NMS UUID(在配置 NMS trap 接收器时设置此项,此值在池中的所有主机上应保持一致)  
address NMS IPv4 地址或主机名 (FQDN)  
port 165535 162
v2c no(禁用 SNMPv2c),yes(启用 SNMPv2c),或支持 SNMPv2c 或 v3。 yes
community COMMON_STRING_TYPE(参见注释 1) public
v3 no(禁用 v3),yes(启用 v3),或支持 SNMPv2c 或 SNMPv3。 no
user_name COMMON_STRING_TYPE(参见注释 1)  
authentication_password COMMON_STRING_TYPE 长度 >= 8 (参见注释 1)  
authentication_protocol MD5SHA  
privacy_password COMMON_STRING_TYPE 长度 >= 8 (参见注释 1)  
privacy_protocol DESAES  

注释:

  1. 通用字符串类型 指的是满足以下要求的字符串:
    • 字母、数字、连字符 (-)、句点 (.)、井号 (#)、at 符号 (@)、等号 (=)、冒号 (:) 或下划线字符 (_) 的任意组合。
    • 长度在 6 到 32 之间(含)。
  2. 密码不会以明文形式存储在 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-->

其中 operationstartstoprestart

获取 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 发送一个测试陷阱,其中 msg_nameTEST_TRAPmsg_bodyThis is a test trap from XenServer pool "<pool name>" to verify the NMS Trap Receiver configuration..

如果您未收到测试陷阱,请再次检查您的 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] 格式。
使用 SNMP 监控主机和 dom0 资源