事件处理

更新时间:
复制为 MD 格式

云监控2.0事件中心的事件处理功能可以对接收到的事件进行灵活的转换和处理,包括修改事件字段、提取数据、合并标签等操作,从而满足不同场景下的事件处理需求。

功能简介

事件处理是事件集成后的核心处理环节,支持对事件数据进行结构化的转换和处理:

  • 对事件字段进行赋值、清除、提取等操作。

  • 使用正则表达式或JSON解析从原始数据中提取信息。

  • 配置生效范围条件,只处理符合条件的事件。

  • 设置执行顺序,控制多个处理流的执行优先级。

  • 支持匹配完成后退出,避免重复处理。

新建事件处理流

  1. 登录云监控2.0控制台,选择目标工作空间,在左侧导航栏选择所有功能 > 事件中心

  2. 事件中心的导航栏,选择事件管理 > 事件处理

  3. 事件处理页面,单击新建处理流

  4. 在右侧弹出的新建事件处理流对话框中,根据需求设置以下参数。

    1. 名称:自定义事件处理名称。

    2. 描述:自定义事件处理描述内容。

    3. 匹配完成后退出:事件处理匹配完成后是否退出,可选择

      • 设置为是:事件匹配该处理流后,不再执行后续的处理流。

      • 设置为否:事件会继续按顺序执行后续的处理流。

    4. 生效范围:设置条件的生效范围。

      • 满足条件方式。

        • 任意:只需要满足一个条件。

        • 所有:事件需要满足所有设置的条件。

        • 复合:满足自定义组合的条件,选择目标条件序号进行组合。

      • 条件N:可以设置多组条件。

        参数

        描述

        事件来源类别

        选择事件来源的对象。

        • 严重级别

        • 告警状态

        • 告警名称

        根据需求选择系统内置的资源标签。

        • 云产品:_cms_acs_product

        • 系统事件资源名:_cms_acs_sys_event_arn

        • 系统事件级别:_cms_acs_sys_event_level

        • 系统事件名称:_cms_acs_sys_event_name

        • 系统事件状态:_cms_acs_sys_event_status

        • 系统事件类型:_cms_acs_sys_event_type

        • _cms_app_name

        • _cms_domain

        • _cms_entity_type

        • _cms_instance_name

        • 事件集成Id:_cms_integration_id

        • _cms_log_audit_rule_template_id

        • _cms_log_audit_rule_type

        • regionId:_cms_region

        • _cms_rule_id

        • 日志服务logstore:_cms_sls_logstores

        • 日志服务Project:_cms_sls_project

        • 工作空间:_cms_workspace

        自定义标签

        根据需求选择您自定义的标签。

    5. 处理逻辑:支持多条处理逻辑,单击增加一条处理逻辑,在右侧弹出的处理逻辑对话框中,设置以下参数。

      逻辑类型

      描述

      赋值属性

      根据设置的值或者数据来源路径来设置事件的字段。

      • 来源:赋值属性来源。

        • 源路径:数据来源路径,支持data.event.variables.前缀。

          源路径说明

          • 路径前缀

            • data.:访问事件的原始data字段内容,如data.alert.severitydata.detail.AlarmName

            • event.:访问事件对象本身的字段,如event.severityevent.labels.xxx

            • variables.:访问前面提取操作生成的变量,如variables.var1[0]variables.var1.field

        • 设置值:可以直接输入字符串,也可以输入模板格式数据比如报警级别:${event.severity}, 报警标题: ${event.subject}

      • 目标:根据需求可以选择以下的目标属性。

        可选属性

        • ID

        • SOURCE

        • TIME(时间戳,选择时间字符串,会自动转化为毫秒数时间戳,如果转化失败,使用当前时间)

        • TIMESTAMP

        • 事件描述 SUBJECT

        • 严重级别(SEVERITY)

        • 报警状态 OCCURRED, PERSISTENT, RECOVERED(STATUS)

        • 事件标签(LABELS)

        • DATA

        • RESOURCE_ID

        • RESOURCE_TYPE

        • RESOURCE_URI

        • RESOURCE_TAGS

        • RESOURCE_NAME

      清除属性

      清除掉对应字段的值,恢复为默认值。

      • 目标属性:根据需求可以选择以下的目标属性。

        可选属性

        • ID:清除后重新生成UUID

        • SOURCE:变为空字符串

        • TIME:时间戳,选择时间字符串,会自动转化为毫秒数时间戳,使用当前时间

        • STATUS:清除后默认变为OCCURRED

        • 事件描述 SUBJECT:变为空字符串

        • 严重级别(SEVERITY):清除后默认变为INFO

        • LABELS:清空所有标签

        • ANNOTATIONS:清空所有注释

        • RESOURCE_TAGS:清空所有资源标签

        • RESOURCE_ENTITY:清空所有资源属性

      标签合并

      根据来源路径获取到对应的节点数据,需要是一个map类型数据,并把这个map数据合并到标签中。

      • 来源:指定包含map数据的路径,例如data.tags

      • 目标属性:根据需求可以选择以下的目标属性。

        可选属性

        • ID

        • SOURCE

        • TIME(时间戳,选择时间字符串,会自动转化为毫秒数时间戳,如果转化失败,使用当前时间)

        • TIMESTAMP

        • 事件描述 SUBJECT

        • 严重级别(SEVERITY)

        • 报警状态 OCCURRED, PERSISTENT, RECOVERED(STATUS)

        • 事件标签(LABELS)

        • DATA

        • RESOURCE_ID

        • RESOURCE_TYPE

        • RESOURCE_URI

        • RESOURCE_TAGS

        • RESOURCE_NAME

        合并规则

        • 源数据中keyString,valueString、IntegerLong类型的键值对才会被合并

        • 空值和其他类型的值会被过滤掉

        • 合并后的值都会转换为String类型

      文本提取

      使用正则表达式从来源节点数据字符串中提取字段,支持提取多个字段,比如([^:]+):([^:]+):([^:]+),提出出来的数据为数组,并赋值到一个变量var1,变量可以在后续处理节点引用,variables.var1[0] 可以引用第一个字段,variables.var1[1] 可以引用数组的第二个字段。

      • 来源:指定要提取的数据路径,例如data.message

      • 正则:编写正则表达式,使用捕获组提取多个字段

      • 提取到变量:指定保存提取结果的变量名称

      使用示例

      正则表达式([^:]+):([^:]+):([^:]+)

      源数据error:database:connection_timeout

      提取结果

      • variables.var1[0] = error

      • variables.var1[1] = database

      • variables.var1[2] = connection_timeout

      提取的变量可以在后续处理逻辑的源路径中引用。

      JSON提取

      从指定的数据节点上获取到JSON格式字符串,并把这个字符串解析为map,并赋值到一个变量var1,变量可以在后续处理节点引用,variables.var1.field1 可以引用JSON中的field1字段。

      • 来源:指定包含JSON字符串的数据路径,例如data.json_content

      • 提取到变量:指定保存解析结果的变量名称

      使用示例

      源数据(JSON字符串):

      {"alertName": "CPU高", "instanceId": "i-xxxxx", "region": "cn-hangzhou"}
      

      解析结果

      • variables.var1.alertName = CPU

      • variables.var1.instanceId = i-xxxxx

      • variables.var1.region = cn-hangzhou

  5. 在处理逻辑配置中存在多个配置时,可以调整各操作的执行顺序:

    • 单击上移:将当前操作向上移动一位。

    • 单击下移:将当前操作向下移动一位。

    操作按照列表顺序从上到下依次执行,前面操作提取的变量可以在后续操作中使用。

  6. 参数设置完成,单击确定

管理事件处理

事件处理流新建完成后,可在事件处理流列表中,执行以下操作:

  • 调整处理流顺序:在目标处理流右侧执行顺序列,设置序号进行处理流排序。

    • 事件处理流按照执行顺序(sortId)字段的值从小到大依次执行:

      • 数值越小,优先级越高,越先执行。

      • 可以直接在列表页面修改执行顺序。

      • 多个处理流可以依次处理同一个事件。

  • 启动或禁用处理流:在目标处理流右侧状态列单击按钮启用或停止。

  • 更新处理流:在目标处理流右侧操作列单击编辑

  • 删除处理流:在目标处理流右侧操作列单击删除,在弹出的对话框中单击确认

    警告

    删除事件处理流后,配置无法恢复。

事件处理流程说明

事件在系统中的完整处理流程如下:

原始事件 → 事件集成 → 事件处理(转换)→ 事件订阅(过滤)→ 事件分组 → 告警通知

处理流与事件订阅的关系

  • 事件处理:对原始事件进行结构化的转换,改变事件本身的内容。

  • 事件订阅:根据处理后的事件内容,决定哪些用户应该收到通知。

事件处理是独立于事件订阅的功能,可以在事件进入订阅流程之前对其进行预处理。

配置示例

示例1:从原始数据提取告警名称

将原始数据中的alert.name字段设置为事件的SUBJECT:

参数

逻辑类型

赋值属性

源路径

data.alert.name

目标属性

SUBJECT

示例2:设置固定的严重级别

将事件的严重级别设置为WARNING:

参数

逻辑类型

赋值属性

设置值

WARNING

目标属性

SEVERITY

示例3:使用映射表转换状态

将第三方系统的状态值映射为标准状态:

参数

逻辑类型

赋值属性

源路径

data.status

目标属性

STATUS

映射表

firing → OCCURRED, resolved → RECOVERED

示例4:提取并添加标签

从原始数据中提取instanceId并添加到事件标签:

参数

逻辑类型

赋值属性

源路径

data.detail.instanceId

目标属性

LABELS

标签Key

instanceId

示例5:使用正则表达式提取多个字段

从消息中提取服务名称和错误类型:

参数

逻辑类型

文本提取

源路径

data.message

正则表达式

Service:(\w+),Error:(\w+)

提取变量

extracted

然后在后续操作中使用提取的变量:

参数

逻辑类型

赋值属性

源路径

variables.extracted[0]

目标属性

LABELS

标签Key

serviceName

标准事件数据结构

云监控2.0的标准事件格式(CmsEvent)包含以下字段:

字段

类型

说明

id

String

事件唯一标识

dedupId

String

事件去重ID

type

String

事件类型:ALERT(告警)、CHANGE(变化)

subtype

String

事件子类型:NORMAL_TRIGGER、ABNORMAL_TRIGGER_DATA_INSUFFICIENT

source

String

事件来源

timestamp

Long

事件时间戳(毫秒)

time

String

格式化的事件时间

subject

String

事件主题/标题

severity

String

严重级别:CRITICAL、WARNING、INFO

status

String

事件状态:OCCURRED、PERSISTENT、ACK、CLOSED、RECOVERED

labels

Map

事件标签

annotations

Map

事件注解

data

Object

原始事件数据

resource

Object

关联资源信息

userId

String

事件所有者

workspace

String

事件所在工作空间

资源信息结构

字段

说明

resource.tags

资源标签(key-value)

resource.entity.domain

资源所属域(如acs)

resource.entity.entity_type

资源类型(如acs.ecs.instance)

resource.entity.entity_id

资源ID

resource.entity.prop

资源属性(key-value)