3 预处理示例

概述

本节介绍了一些使用预处理步骤完成实际任务的示例。

过滤 VMware 事件日志记录

本示例使用匹配正则表达式预处理步骤,从 VMware 事件日志中过滤不必要的事件。

1. 在一个正常工作的 VMware Hypervisor 主机上,检查 vmware.eventlog 监控项是否存在并正常工作。
请注意,如果在创建主机期间已关联 VMware 模板,则该事件日志监控项可能已经存在于该 hypervisor 上。

2. 在 VMware Hypervisor 主机上,创建一个 Log 类型的依赖监控项,并将事件日志监控项设置为其主监控项。

3. 在该依赖监控项的 预处理 选项卡中,单击 添加 以创建一个预处理步骤,并从下拉列表中选择 匹配正则表达式。然后,指定以下模式之一:

  • 用于过滤所有日志事件:
.* logged in .*
  • 用于过滤在 “User” 之后包含用户名的行:
\bUser\s+\K\S+

如果正则表达式未匹配,则该依赖监控项将变为不支持状态,并显示相应的错误消息。
为避免这种情况,请勾选 失败时自定义 复选框,并选择一个选项,例如丢弃该值或设置自定义值。
请注意,被丢弃的值不会存储在数据库中;因此,不会对触发器进行评估,也不会生成趋势数据。

或者,您也可以使用正则表达式预处理步骤来提取匹配组并控制输出:

  • 若要提取并输出包含 “logged in” 的整个日志事件,请指定以下参数:
Pattern: .*logged in.*
Output: \0
  • 若要提取并输出 “User” 后面的用户名:
Pattern: User (.*?)(?=\ )
Output: \1

检查获取到的值类型

本示例使用 自定义乘数 预处理步骤来检查获取到的监控项值类型是否为数值型。

在监控项的 预处理 选项卡中,选择 自定义乘数 预处理步骤,并指定以下参数(将获取到的值乘以 1):

1

如果预处理失败(例如,输入不是数值),则该监控项将变为不支持状态,并显示相应的错误消息。 为避免这种情况,请勾选 失败时的自定义处理 复选框,并选择一个选项,例如丢弃该值或设置一个自定义值。 请注意,被丢弃 的值不会存储在数据库中;因此,不会评估触发器,也不会生成趋势数据。

检查不支持的值

本示例使用检查不支持的值预处理步骤来检查是否无法获取监控项值。

当 Zabbix 服务器/proxy 轮询进程尝试采集监控项值时,可能会:

  • 返回有效结果。
  • 返回一个起初看似有效、但之后可能变为不支持的结果(例如,由于预处理后的值类型不匹配)。
  • 返回采集该值时的错误,导致监控项变为不支持。常见原因包括:
    • 未知的监控项键值(对于 Zabbix agent、简单检查或 Zabbix 内部监控项)
    • 未知的 OID(SNMP agent)、未知的传感器(IPMI agent)或没有 JMX 指标(JMX agent)
    • 无法读取 trap 文件(SNMP trap)
    • 找不到脚本(外部检查)
    • 没有这样的 URL(HTTP agent、Browser)
    • 登录失败(SSH agent、TELNET agent)
    • 公式语法无效(Calculated)、JavaScript 语法错误(Script)或无效的 SQL(Database monitor)

要检测并处理采集监控项值时的错误,可以使用检查不支持的值预处理步骤。
请注意,此步骤始终最先执行,并且只能检测在预处理开始之前发生的错误。

在监控项的预处理选项卡中,选择检查不支持的值预处理步骤,并指定以下参数之一:

  • 对于任意错误:
Parameter: any error
  • 对于包含 "cannot connect" 的错误:
Parameter: error matches
Pattern: (?i)cannot connect

然后,使用失败时自定义选项来丢弃该值(在本例中即错误)、设置自定义值,或返回自定义错误消息。
请注意,被丢弃的值不会存储在数据库中;因此,不会评估触发器,也不会生成趋势数据。