Event Drop 事件处理器
概述
Event Drop 处理器是一个灵活的事件过滤工具,允许您根据自定义的逻辑条件来决定是否删除特定的告警事件。当标签过滤和属性过滤都无法满足您的需求时,可以使用此处理器实现更加复杂的过滤逻辑。
工作原理
Event Drop 处理器使用 Go Template 语法来编写判断逻辑:
- 如果模板执行结果为
true,则删除该事件 - 如果模板执行结果为
false或其他值,则保留该事件
配置方法
1. 选择处理器类型
在告警规则配置页面中,选择 “Event Drop” 作为处理器类型。
2. 编写判断逻辑
在判断逻辑输入框中,使用 Go Template 语法编写您的过滤条件。
可用变量
在模板中,您可以使用以下预定义变量:
| 变量 | 描述 | 示例用法 |
|---|---|---|
$event |
整个事件对象 | $event.RuleName |
$labels |
事件的标签映射 | $labels.instance |
$value |
触发值 | $value |
使用示例
示例1:根据标签值过滤
{{ if eq $labels.service "mon" }}true{{ else }}false{{ end }}
此配置会删除所有标签 service 为 “mon” 的事件。
示例2:根据触发值过滤
{{ if lt $value 10 }}true{{ else }}false{{ end }}
此配置会删除所有触发值小于 10 的事件。
示例3:根据实例名称过滤
{{ if hasPrefix $labels.instance "test-" }}true{{ else }}false{{ end }}
此配置会删除所有实例名称以 “test-” 开头的事件。
示例4:组合条件过滤
{{ if and (eq $labels.env "dev") (lt $value 5) }}true{{ else }}false{{ end }}
此配置会删除环境为 “dev” 且触发值小于 5 的事件。
常用模板函数
比较函数
eq: 等于 -{{ eq $value 100 }}ne: 不等于 -{{ ne $labels.env "prod" }}lt: 小于 -{{ lt $value 50 }}le: 小于等于 -{{ le $value 50 }}gt: 大于 -{{ gt $value 100 }}ge: 大于等于 -{{ ge $value 100 }}
逻辑函数
and: 逻辑与 -{{ and (eq $labels.env "prod") (gt $value 100) }}or: 逻辑或 -{{ or (eq $labels.env "dev") (eq $labels.env "test") }}not: 逻辑非 -{{ not (eq $labels.env "prod") }}
字符串函数
hasPrefix: 前缀匹配 -{{ hasPrefix $labels.instance "web-" }}hasSuffix: 后缀匹配 -{{ hasSuffix $labels.instance "-prod" }}contains: 包含字符串 -{{ contains $labels.message "error" }}
测试功能
在配置完成后,您可以使用页面提供的测试功能来验证您的判断逻辑是否正确:
- 点击"测试"按钮
- 查看测试结果,确认是否符合预期
- 根据需要调整判断逻辑
常见问题
-
模板解析失败
- 检查 Go Template 语法是否正确
- 确认变量名拼写无误
-
模板执行失败
- 检查是否使用了不存在的标签或属性
- 确认数据类型是否匹配
-
事件未按预期删除
- 确认模板返回值是否为字符串 “true”
- 使用测试功能验证逻辑
调试建议
- 使用简单的条件开始测试
- 逐步增加复杂度
- 查看系统日志了解执行结果
- 利用测试功能验证逻辑正确性
通过合理使用 Event Drop 处理器,您可以实现精确的事件过滤,减少不必要的告警噪音,提高告警系统的效率。