基本概念
告警网关以应用为维度,提供告警发送、限流、升级等功能。
告警的一些基本字段有:
- app: 发生告警的应用,对应cmdb中应用名
- name:告警名。由各个项目组自己定义,对告警类型的简要描述
- labels: 项目组自定义的一串标签key value
- env: 发送告警的环境。
- recovery:默认为false。如果设置成true,表示这是一条告警恢复通知
告警网关会根据app字段,从cmdb中获取应用负责人和运维,将应用负责人和运维自动加到告警接收人里面
告警限流
为了防止告警发送频率过高,导致接收人员来不及查看,或者漏看重要告警,因此对具有同一特征的告警进行流控。
- 特征的计算方式是将app, name, label, recovery等字段进行排序拼接,然后计算这些属性的hash值。同一个hash值被认为是同一个告警。
- 默认流控时间是20分钟(即20分钟内同一个告警只发送一次)
- 项目组可以针对不同应用、告警名在告警策略 - DevOps Alarm 页面修改流控时间。
告警发送
目前告警发送支持企业微信、电话等方式发送. 再发送电话的时候,强烈推荐同时通过webhook或者chatId方式发送。电话当做紧急提醒用,而webhook或者chatId作为查看详细内容用。
企业微信:
- 支持直接发送给个人(朗歌企业微信)。多个接收人员用逗号隔开
- 支持发送给群组(朗歌企业微信),可通过微信告警组 - DevOps Alarm查看群组id
- 支持webhook方式发送
下面例子将同时发送给个人(sendUsers), 告警组(chatId)和webhook
1 | curl --location --request POST 'http://devops-alarm.geely.com/devopsalarm/api/v1/alarms/alarm' \ |
电话告警
电话告警需提前申请,需要运维将接收号码加到白名单中。
在同一条电话告警中,任意一个人接通后,该条电话告警被认为已经发送成功,不再重复发送。如果所有人均未接通,那每个人最多拨打两次,每次拨打时间间隔2分钟。
电话告警有两种通知方式
1. 按照电话告警组通知
指同时给电话告警组内所有人员发送电话告警。电话告警组可通过电话告警组 - DevOps Alarm查看。
比如电话告警组4包含4个用户,在收到告警后,将同时给这四个用户拨打电话.
例:下面是通过电话告警组发送的方式(设置了voiceAppId和sendType=8)
1 | curl --location --request POST 'http://devops-alarm.geely.com/devopsalarm/api/v1/alarms/alarm' \ |
2. 按接收用户逐个发送
按接收用户逐个发送,当用户未接通,告警网关间隔时间为2分钟向后续用户发送,直到有用户接听。
比如告警接收用户指定了4个人,(sendUsers: zhangsan,lisi,wangwu,zhaoliu)。当收到电话告警后
- 告警网关首先给zhangsan拨打电话
- 2分钟,检测zhangsan是否接听。如果未接听,同时给zhangshan, lisi拨打电话
- 再过2分钟,检测zhansan, lisi是否接听。如果均未接听,则给 lisi, wangwu拨打 (此时zhangsan已经达到最大拨打次数,不再给zhangsan拨打)
- 以2分钟为间隔,依次检测是否有人接听,或者直到给zhaoliu也拨打完两次电话。
- 在这个过程中,任意一人接听电话,则不再拨打后续人员
推荐使用这种方式进行电话告警,可以有效防止骚扰现象
例: 下面按照逐个发送方式的例子(设置了sendUsers和sendType=8)
1 | curl --location --request POST 'http://devops-alarm.langgemap/devopsalarm/api/v1/alarms/alarm' \ |