【导语】告警面临的一大问题,是警报太多,相当于狼来了的形式。收件人很容易麻木,不再继续理会。关键的告警常常被淹没。在运维监控系统中,告警收敛是指对告警信息进行分析、合并和丢弃,以此来降低告警信息的规模。因此,针对每天上万条的告警事件比如ping事件告警,如何进行收敛并帮助用户更优针对性地发现批次性告警问题,具有重要意义。
当监控系统爆发大规模告警信息时,不仅会给短信网关造成巨大压力,还会增大SRE的故障监管压力,致使其忽略核心根因告警信息。在运维监控系统中, 告警收敛是指对告警信息进行分析、合并和丢弃,以此来降低告警信息的规模。因此,通过告警收敛来降低告警信息的规模对网络运维监控系统而言显得尤为重要。
右下图是每天的告警事件分布情况,可以看出平均每分钟有1.5k - 4k左右的告警量,形成告警风暴,用户难以直接从所有告警事件中发现有效的信息。
现有技术方案的技术问题主要是收敛方式单一:比如对于告警时间维度,当告警时间都在约定的范围内才能进一步考虑是否收敛;告警收敛依据固定化,当且仅当两个告警维度信息完全相同才能收敛,方式单一。对于一些存在差异的告警维度无法收敛,比如包含时间的名称,用户自定义的名称等等,举例如下:
如果想以图中告警的红色框内的告警维度进行收敛,目前的收敛手段只能支持完全相同的告警收敛,然而不同机器的相关维度可能会有编号、自定义、随机生成等形式,导致告警维度相似但是不完全相同。
本文提出一种智能告警收敛的方法,解决人工定位异常根因耗费时间长等技术问题。主要的关键技术和创新点是通过统计方法来实现异常定位或根因分析。创新点主要如下:
下图为AMP、收敛服务、小程序等三方面的整体服务框架设计。原始数据源上报数据,在告警发送通道中缓存一定时间粒度的告警时间(比如1分钟,5分钟),然后调用AI告警收敛服务,得到收敛后的告警事件,再发送到小程序或者短信、邮件等发送端,推送给客户。如下图所示,以ping不可达告警事件为例。备注:通用告警收敛方案以此为例说明,但不局限于Ping不可达告警事件。
主要包括三个步骤:
不同的运维监控系统会采用不同的形式发送告警事件,事件中包含的维度字段等信息也不尽相同。因此,在告警事件输入过程中,需要对告警事件的格式进行解析,统一转换为维度key-value的形式。
告警收敛前提:在进行告警收敛之前,用户可以指定满足收敛前提的告警才可以进一步收敛。比如,设定为:事件名称、产品名称、appId用户,表示当事件名称、产品名称和appId用户相同的情况下,告警才能进一步考虑收敛,否则应该分开发送。
告警时间粒度:根据告警的重要和紧急程度等属性,用户可以设定多长内的告警事件才可以收敛并发送。若时间太长,则收敛事件量大但告警发送的延时较大;若时间太短,则告警延时较小但收敛效果不明显。通常可设置为1分钟。
告警收敛依据:用户可以指定根据哪个字段将告警事件进行收敛。比如“服务器名”,[未命名63,未命名78,未命名61]等在形式上是“固定部分+可变部分”的维度信息,很明显这类告警属于同一类型的告警,因而可以进一步收敛。
告警聚类收敛注意包括以下三个步骤:
1、预处理:告警收敛依据中的字符可能存在一些特殊字符,因而需要进行格式解析和剔除特殊符号;同时,参照“固定部分+可变部分”的形式,将数字和ip地址、url等可变部分转换成统一的*通配符形式,最后生成的字符称为通配字符。
2、分层收敛:收敛层可分为如下三层:
3、模板归类:对于可收敛为同一类的告警,取其中最早出现的告警通配字符作为当前告警收敛列表的模板;对于新输入的告警,若其符合已有的告警模板,则收敛为同一类事件;若不能收敛到已有的告警模板中,则自称一类新的告警模板。
重复以上三个收敛步骤,直至告警事件列表里所有的告警事件均被遍历。
通用化告警收敛方案,其通用性和定制化体现在几个方面:
单条实时Ping不可达告警事件
3. 告警收敛维度: 如果维度信息完全相同,则只展示一次;如果有不同,则以列表的形式依次展示。 用户可指定哪些维度需要收敛展示;若不指定,则默认为所有维度中除去告警收敛前提和告警收敛依据的剩余所有维度。
4. 附加信息:
图1. 收敛事件包含的原始告警事件的 alias告警收敛依据不同,则以通配符的形式展示,原始的在 aliasList中以列表形式展示 其中,region 维度相同均为 sh, 则只展示一次;其他告警收敛维度以列表形式展示; eventCount 表示收敛了5次告警事件。
图2. 收敛事件包含的原始告警事件的 alias告警收敛依据相同,则展示最原始形式, aliasList也只展示一次。
图2. 收敛事件包含的原始告警事件的alias告警收敛依据相同,则展示最原始形式, aliasList也只展示一次。在不该表原来事件结构的前提下,可以收敛的多条事件,统一放到收敛的列表内。
[[{'additionalMsg': [{'key': 'ip', 'value': 'something unnormal'}, {'key': 'alias', 'value': 'scf_function_tcbm'}, {'key': 'deviceLanIp', 'value': '9.1.32.124'}, {'key': 'deviceWanIp', 'value': ''}, {'key': 'uniqVpcId', 'value': 'vpc-99nlipgq'}], 'appId': '1253665819', 'dimensions': [{'key': 'uuid', 'value': 'c006d2b4-3e51-4c2e-9d61-0a3d4ed3e99a'}], 'displayFlag': 1, 'eventId': 42, 'eventName': 'ping_unreachable', 'instanceId': 'ins-otm8jy9t', 'occurTime': 1590116683, 'productName': 'cvm', 'projectId': '0', 'region': 'sh', 'seqId': 'a463080f-dec3-4204-9b46-0d70bb39b767', 'status': 0, 'type': 2},
{'additionalMsg': [{'key': 'ip', 'value': 'something unnormal'}, {'key': 'alias', 'value': 'scf_function_tcbm'}, {'key': 'deviceLanIp', 'value': '9.1.74.9'}, {'key': 'deviceWanIp', 'value': ''}, {'key': 'uniqVpcId', 'value': 'vpc-99nlipgq'}], 'appId': '1253665819', 'dimensions': [{'key': 'uuid', 'value': 'b82b738d-bc0e-4950-8ab2-346b24bd7208'}], 'displayFlag': 1, 'eventId': 42, 'eventName': 'ping_unreachable', 'instanceId': 'ins-9kdyahtv', 'occurTime': 1590116682, 'productName': 'cvm', 'projectId': '0', 'region': 'sh', 'seqId': 'eb176177-b832-4cc4-a085-60da4c4c9571', 'status': 0, 'type': 2}],
{'additionalMsg': [{'key': 'ip', 'value': 'something unnormal'}, {'key': 'alias', 'value': 'scf_function_tcbm'}, {'key': 'deviceLanIp', 'value': '9.1.79.40'}, {'key': 'deviceWanIp', 'value': ''}, {'key': 'uniqVpcId', 'value': 'vpc-99nlipgq'}], 'appId': '1253665819', 'dimensions': [{'key': 'uuid', 'value': '5ebe690e-7c88-4b1e-8940-824b7053f200'}], 'displayFlag': 1, 'eventId': 42, 'eventName': 'ping_unreachable', 'instanceId': 'ins-3n1zcw6j', 'occurTime': 1590116682, 'productName': 'cvm', 'projectId': '0', 'region': 'sh', 'seqId': 'd9c04f26-74ff-4228-b774-cefc51502746', 'status': 0, 'type': 2},
{'additionalMsg': [{'key': 'ip', 'value': 'something unnormal'}, {'key': 'alias', 'value': 'test_tcbm'}, {'key': 'deviceLanIp', 'value': '9.1.60.164'}, {'key': 'deviceWanIp', 'value': ''}, {'key': 'uniqVpcId', 'value': 'vpc-99nlipgq'}], 'appId': '1253665819', 'dimensions': [{'key': 'uuid', 'value': 'e593dbc8-8d38-4036-94e9-1518c9cd1f0e'}], 'displayFlag': 1, 'eventId': 42, 'eventName': 'ping_unreachable', 'instanceId': 'ins-fxjj63lt', 'occurTime': 1590116683, 'productName': 'cvm', 'projectId': '0', 'region': 'sh', 'seqId': '13ec8c62-d3e7-4aab-a278-397bb15a3e78', 'status': 0, 'type': 2}]
基于此功能可以设计丰富的相关功能,比如:
说明:以下template为收敛后的模板/模式,alias_list为收敛所包含的单条告警事件的alias列表。
1、部分日期可变型
template: activity-cvm-*-*-*
====================
alias_list: ['activity-cvm-2020-02-27', 'activity-cvm-2020-03-25', 'activity-cvm-2020-05-12', 'activity-cvm-2020-05-22', 'activity-cvm-2020-01-11', 'activity-cvm-2020-03-25', 'activity-cvm-2020-05-27', 'activity-cvm-2020-05-27', 'activity-cvm-2019-12-12', 'activity-cvm-2019-12-12', 'activity-cvm-2020-05-27', 'activity-cvm-2020-05-27', 'activity-cvm-2020-01-11', 'activity-cvm-2020-05-26', 'activity-cvm-2020-01-11']
2、多次重复出现的
template: u672au547du540d
====================
alias_list: ['u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d', 'u672au547du540d']
template: 星海资源网
====================
alias_list: ['星海资源网', '星海资源网', '星海资源网', '星海资源网', '星海资源网']
template: centos-2GB-sh-2073
====================
alias_list: ['centos-2GB-sh-2073', 'centos-2GB-sh-2073', 'centos-2GB-sh-2073', 'centos-2GB-sh-2073'
3、纯数字型
template: *
====================
alias_list: ['789', '25', '19', '33', '1', '9', '15', '18', '17', '21', '34', '26']
4、末尾数字可变型
template: TRANSGROUP_*
====================
alias_list: ['TRANSGROUP_039', 'TRANSGROUP_035', 'TRANSGROUP_006', 'TRANSGROUP_029', 'TRANSGROUP_035', 'TRANSGROUP_015', 'TRANSGROUP_015', 'TRANSGROUP_009', 'TRANSGROUP_031', 'TRANSGROUP_025', 'TRANSGROUP_025', 'TRANSGROUP_009', 'TRANSGROUP_041', 'TRANSGROUP_024', 'TRANSGROUP_006', 'TRANSGROUP_009', 'TRANSGROUP_022', 'TRANSGROUP_017', 'TRANSGROUP_017', 'TRANSGROUP_019', 'TRANSGROUP_028']
template: T*-斗鱼-*
====================
alias_list: ['T4-斗鱼-0203', 'T4-斗鱼-0203', 'T4-斗鱼-0316', 'T4-斗鱼-0316', 'T4-斗鱼-0203', 'T4-斗鱼-0203', 'T4-斗鱼-0203', 'T4-斗鱼-0203']
template: 默认项目*
====================
alias_list: ['默认项目96', '默认项目69', '默认项目33', '默认项目40', '默认项目96', '默认项目82', '默认项目69', '默认项目14', '默认项目30', '默认项目33', '默认项目56', '默认项目40', '默认项目64', '默认项目75', '默认项目53', '默认项目64']
template: CD*
====================
alias_list: ['CD2', 'CD2', 'CD2', 'CD2',`CD001', 'CD2']
template: 账号*
====================
alias_list: ['账号1', '账号5', '账号1', '账号5']
template: wshm-logic*
====================
alias_list: ['wshm-logic01', 'wshm-logic01', 'wshm-logic03', 'wshm-logic022', 'wshm-logic01']
5、中间数字可变型
template: psd-练习环境*-长期* 张宇
====================
alias_list: ['psd-练习环境1-长期2 张宇', 'psd-练习环境1-长期4 张宇', 'psd-练习环境2-长期4 张宇', 'psd-练习环境2-长期3 张宇']
6、参数配置型
template: as-cpu-*x-*
====================
alias_list: ['as-cpu-4x-232', 'as-cpu-4x-233', 'as-cpu-4x-218', 'as-cpu-4x-238', 'as-cpu-4x-212', 'as-cpu-4x-236', 'as-cpu-4x-26', 'as-cpu-4x-28', 'as-cpu-4x-246', 'as-cpu-4x-217', 'as-cpu-4x-225', 'as-cpu-4x-222', 'as-cpu-4x-218']
template: windows-*GB-bj-*
====================
alias_list: ['windows-1GB-bj-2148', 'windows-1GB-bj-2148', 'windows-4GB-gz-3235', 'windows-4GB-gz-3235', 'windows-2GB--6988', 'windows-1GB-bj-2148', 'windows-1GB-bj-2148', 'windows-1GB-cd-5807', 'windows-4GB-bj-6096', 'windows-1GB-bj-2148', 'windows-1GB-bj-2148', 'windows-1GB-bj-2148', 'windows-1GB-bj-2148', 'windows-1GB--5298']
7、‘-’ 和 ‘_’ 两种符号共存型
template: *_*
====================
alias_list: ['emr-task1_emr-c0r0wdr6', 'emr-task2_emr-c0r0wdr6', 'emr-task1_emr-c0r0wdr6', 'emr-task2_emr-c0r0wdr6', 'T4-DY-0509_4', 'T4-DY-0509_4']
8、长-短相似型
template: scf_func_d
====================
alias_list: ['scf_func_d', 'scf_func_d', 'scf_func_d', 'scf_func_d']
template: scf_function_tcbm
====================
alias_list: ['scf_function_tcbm', 'scf_function_tcbm', 'scf_function_tcbm']
template: scf_func_ziyan
====================
alias_list: ['scf_func_ziyan', 'scf_func_ziyan', 'scf_func_ziyan', 'scf_func_ziyan']
1、《大规模集群之告警系统实践》
https://zhuanlan.zhihu.com/p/42190073
2、《文本相似度算法总结》
3、《浅析文本相似度》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。