云监控2.0事件中心的事件处理功能可以对接收到的事件进行灵活的转换和处理,包括修改事件字段、提取数据、合并标签等操作,从而满足不同场景下的事件处理需求。
功能简介
事件处理是事件集成后的核心处理环节,支持对事件数据进行结构化的转换和处理:
-
对事件字段进行赋值、清除、提取等操作。
-
使用正则表达式或JSON解析从原始数据中提取信息。
-
配置生效范围条件,只处理符合条件的事件。
-
设置执行顺序,控制多个处理流的执行优先级。
-
支持匹配完成后退出,避免重复处理。
新建事件处理流
-
登录云监控2.0控制台,选择目标工作空间,在左侧导航栏选择。
-
在事件中心的导航栏,选择。
-
在事件处理页面,单击新建处理流。
-
在右侧弹出的新建事件处理流对话框中,根据需求设置以下参数。
-
名称:自定义事件处理名称。
-
描述:自定义事件处理描述内容。
-
匹配完成后退出:事件处理匹配完成后是否退出,可选择是或否。
-
设置为是:事件匹配该处理流后,不再执行后续的处理流。
-
设置为否:事件会继续按顺序执行后续的处理流。
-
-
生效范围:设置条件的生效范围。
-
满足条件方式。
-
任意:只需要满足一个条件。
-
所有:事件需要满足所有设置的条件。
-
复合:满足自定义组合的条件,选择目标条件序号进行组合。
-
-
条件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
自定义标签
根据需求选择您自定义的标签。
-
-
-
处理逻辑:支持多条处理逻辑,单击增加一条处理逻辑,在右侧弹出的处理逻辑对话框中,设置以下参数。
逻辑类型
描述
赋值属性
根据设置的值或者数据来源路径来设置事件的字段。
-
来源:赋值属性来源。
-
源路径:数据来源路径,支持
data.、event.、variables.前缀。 -
设置值:可以直接输入字符串,也可以输入模板格式数据比如报警级别:${event.severity}, 报警标题: ${event.subject}
-
-
目标:根据需求可以选择以下的目标属性。
清除属性
清除掉对应字段的值,恢复为默认值。
-
目标属性:根据需求可以选择以下的目标属性。
标签合并
根据来源路径获取到对应的节点数据,需要是一个map类型数据,并把这个map数据合并到标签中。
-
来源:指定包含map数据的路径,例如
data.tags -
目标属性:根据需求可以选择以下的目标属性。
合并规则
-
源数据中key为String,value为String、Integer或Long类型的键值对才会被合并
-
空值和其他类型的值会被过滤掉
-
合并后的值都会转换为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
-
-
-
在处理逻辑配置中存在多个配置时,可以调整各操作的执行顺序:
-
单击上移:将当前操作向上移动一位。
-
单击下移:将当前操作向下移动一位。
操作按照列表顺序从上到下依次执行,前面操作提取的变量可以在后续操作中使用。
-
-
参数设置完成,单击确定。
管理事件处理
事件处理流新建完成后,可在事件处理流列表中,执行以下操作:
-
调整处理流顺序:在目标处理流右侧执行顺序列,设置序号进行处理流排序。
-
事件处理流按照执行顺序(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 |
|
正则表达式 |
|
|
提取变量 |
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) |