配置过滤条件
title: "配置过滤条件"
description: "Flashduty的分派策略、静默、抑制、路由、标签增强等功能中,大量使用条件匹配来过滤特定告警或故障,本文介绍如何配置这些条件"
date: "2024-06-17T10:00:00+08:00"
url: "https://docs.flashcat.cloud/zh/flashduty/how-to-filter"
Flashduty 中的过滤条件用于匹配不同的告警、故障或者事件。通过过滤条件,我们可以针对特定的对象进行筛选再操作。本文向您介绍过滤条件的设计和配置方法。
在哪里使用过滤条件?
过滤条件应用于以下场景:
- 分派策略:同一个协作空间允许创建多个分派策略,每个分派策略可以设置不同的过滤条件。您可以针对不同的故障设定不同的分派对象。
- 静默规则:设置过滤条件来匹配特定的故障,满足条件的故障将会被静默。
- 抑制规则:设置过滤条件,分别匹配新触发的故障和已有的活跃故障,当新故障满足条件,将被抑制。
- 告警聚合:告警聚合支持默认的聚合维度,但当您需要细粒度控制时,您需要设置过滤条件,匹配特定的告警,并针对这部分故障设置新的聚合维度。
- 路由规则:当使用集成中心的告警集成,可以设置全局路由匹配规则。使用不同的过滤条件匹配不同的告警,并路由到特定协作空间。
- 标签增强:设置过滤条件来匹配特定的告警,满足条件的告警按照规则进行标签的生成。
如何配置过滤条件?
规则的设计
Flashduty 将整个过滤条件做了抽象,期望做到最小化配置且满足大部分场景需求。
整体判断逻辑分为多组条件:
- 组内条件之间为
and
关系,即每一个条件均匹配,整个组才为匹配。 - 组与组之间为
or
关系,即任一组条件匹配,整体即为匹配。
每一个条件内部,分字段(field)、操作符(oper)以及目标值(values)。其中,操作符仅有两种情况:
- **
匹配
**:目标可以有多个 value,任一 value 满足条件,则该条件匹配。 - **
不匹配
**:目标可以有多个 value,所有 value 均不满足条件,则该条件匹配。
:::tip
条件中的目标值 value,全部为字符串。并支持精确、正则、通配、IP段和数值大小等多种匹配方式。
:::
如上图所示,我们有两组条件,每组条件内有两个条件,条件匹配值有多个。如果严重程度为 “Critical” 或 “Warning”,且check标签等于 “Binlog同步延迟”,则整体满足条件。否则,如果 check 标签包含 “cpu”、“io” 或 “disk” 任一字样,且 value 标签的数值大于 90,整体也满足条件。我们也可以使用一个表达式直观的描述过滤条件:
( severity == Critical|Warning && labels.check == Binlog同步延迟 )
or
( labels.check == /cpu/|/io/|/disk/ && labels.value == num:gt:90 )
按照正则过滤
当 value 字符串以/
为前后缀,整个 value 将被识别为正则
。此时,目标值必须满足这个正则,才算匹配通过。
举例如下:
- labels.check:/宕机/,check标签包含”宕机“时,即匹配。
:::tip
Flashduty 全平台使用RE2
正则规范,部分Perl
语法可能无法匹配。您可使用 AI Chatbot 生成表达式,并前往 RE2 Playground 进行验证。
:::
按照通配符过滤
当 value 字符串包含*
或?
且没有/
前后缀,整个 value 将被识别为通配
。注意,当前仅支持*
和?
,*
可匹配零个或多个任意字符,?
可匹配单个任意字符。目标值必须满足这个通配字符串,才算匹配通过。
举例如下:
- labels.check:宕机*,check标签以”宕机“作为前缀,即匹配。
:::tip
您可使用*
来判断一个字段存在(Exist)
或不存在(NotExsit)
。
如果一个字段匹配 *
,表示您需要该字段存在。如果一个字段不匹配 *
,表示您需要该字段不存在。
:::
按照 IP 段过滤
当 value 以cidr
作为前缀,整个 value 将被识别为IP 段
。
举例如下:
- labels.host:cidr:10.0.0.206/24,ip 标签在”10.0.0.206/24“这个 IP 段内,即匹配。
按照数值过滤
当 value 以num:[gt|ge|lt|le]:
作为前缀,整个 value 将被识别为数值大小匹配
。大小判断规则如下:
- gt:大于
- ge:大于等于
- lt:小于
- le:小于等于
举例如下:
- labels.value:num:ge:90,value 标签大于等于 90,即匹配。
按精确值过滤
当 value 不满足上述任意格式,即被视为精确匹配
。此时,仅当字符串完全相等时,才算匹配通过。
常见问题
为什么系统不提示我可选标签?
Flashduty 接受大量数据上报,为了保证系统的稳定性,系统仅查找过去 24 小时内,最多 500 条告警事件进行标签的去重操作。因此提取到的标签范围可能会动态变化,甚至在过去24小时没有新数据时提取不到任何标签。这种情况下,您可以手动输入标签。