SLS告警最佳实践——自定义分析告警历史

概述

在SLS告警评估、触发到通知的整个生命周期过程中,都会有一些日志记录,通过这些日志我们可以借助告警对系统的整体健康状况、稳定性等有一个相对全面的了解。


在开始使用SLS告警的时候,需要选择一个地域来存储告警相关的数据,该初始化操作会自动创建一个 sls-alert-$uid-$region 形式的project,例如阿里云账号ID是 12345,选择的地域是杭州,那么默认创建出来的 project 就是 sls-alert-12345-cn-hangzhou。该 Project 下也会自动创建出来一个 internal-alert-center-log 的 LogStore,用于存放告警相关的数据,也就是告警中心日志。

注:该LogStore完全免费,并且已经默认创建索引。

之后我们就可以基于该 LogStore 进行分析。

Topic

告警中心日志根据 __topic__ 字段做区分,每个 __topic__ 表示告警处理的不同阶段。常见的 __topic__ 及其所处的阶段、以及说明如下:

SLS告警最佳实践——自定义分析告警历史

__topic__

说明

alert_state

告警规则评估日志。

alert_received

告警管理服务接收到告警消息。

alert_routed

告警经过告警策略之后,进行路由合并。

alert_pre_filter

告警进入抑制静默流程。

alert_silenced

告警被抑制或者静默。

alert_pre_notify

告警进入通知发送流程

alert_notified

告警通知被发送。

system_config

配置错误,有可能导致告警通知失败。例如配置了不存在的联系人。

案例

下面通过一些案例来展示如何基于告警中心日志做自定义的查询分析。

案例一:告警触发统计

查询一段时间内,一共有多少告警触发过,以及触发的次数。

查询分析语句如下:

__topic__: alert_received |
select
  "alert.project" as project,
  "alert.alert_name" as alert_name,
  count(*) as cnt
group by
  project,
  alert_name
order by
  cnt desc

结果参考如下:

SLS告警最佳实践——自定义分析告警历史

案例二:通知失败统计

统计一段时间内,各个通知渠道的失败次数。

查询分析语句如下:

__topic__: alert_notified and level: error |
select
  "notifierConfig.type" as notificationType,
  count(*) as cnt
group by
  notificationType
order by
  cnt desc

SLS告警最佳实践——自定义分析告警历史

案例三:通知失败原因

某告警规则没有收到通知,可通过如下方式查询失败原因。

第一步,首先查看是否有配置错误:

__topic__: system_config and alert.alert_id: alert-xxx-yyy | select level, error, msg, "desc"

如果有数据,则说明配置有问题导致无法进行通知。详细的错误说明可以参考下面表格。如果没有配置错误,那么可能是由于通知发送失败了,可以通过如下语句查询是否有通知错误:

__topic__: alert_notified and level: error and alert.alert_id: alert-xxx-yyy | select error

参考结果如下:

SLS告警最佳实践——自定义分析告警历史

此时可以发现是配置的Webhook地址无效导致通知发送失败。

告警内置仪表盘

日志服务告警内置了如下几个仪表盘,用来统计告警的触发情况和通知情况。事实上,这些仪表盘也是基于告警中心日志数据来进行制作的。如果需要一些定制化的图标,也可以自己写查询语句来自定义仪表盘。

监控规则中心

监控规则中心仪表盘主要展示了告警监控规则的执行情况。

SLS告警最佳实践——自定义分析告警历史

告警链路中心

告警链路中心主要包含了了告警在触发、合并、抑制静默、通知等各个阶段的统计。

SLS告警最佳实践——自定义分析告警历史

告警排障中心

告警排障中心主要统计的是告警通知过程中的种种错误。比如由于配置错误导致通知无法发出。通过告警排障,选择相应的项目以及规则名,可以查看该规则相关的配置错误信息,从而快速定位通知收不到的原因。常见的配置错误参考下表。

SLS告警最佳实践——自定义分析告警历史

常见配置错误

告警中心日志中,通过 __topic__: system_config 可以过滤出配置错误导致的通知异常。常见的错误参考如下:

故障级别

故障类型

故障详情

描述

详细描述

解决方案

error

AlertPolicyNotConfigured

Alert xxx has no alert policy configured

this alert will be ignored since it could not be routed

该告警规则未配置告警策略,导致该告警无法被进行路由分组,因此会被忽略。

修改告警规则,配置正确的告警策略。

error

AlertPolicyNotExist

alert policy xxx not exist

alerts that use this alert policy will be ignored

告警策略不存在,使用该告警策略的告警会被忽略。

检查该告警策略是否存在,如果不存在的话需要创建出来,或者使用其它的告警策略

error

AlertPolicyInvalid

alert policy xxx format error

alerts that use this alert policy will be ignored

告警策略格式错误,导致无法解析,使用该告警策略的告警会被忽略。

修改该告警策略的内容,或者删除重新创建。

warn

AlertPolicyInheritanceLoop

alert policy xxx has inheritance loop with yyy

inheritance loop alert policies will be ignored

告警策略集成有循环,例如 A 继承 B,B 又继承 A。在实际使用的时候,如果配置的是 A,则 B 和 A 生效;如果配置的是 B,则 A 和 B 生效。不会无限解析继承链

修改告警策略,避免有循环继承。

error

NoDefaultAlertPolicy

no default alert policy

alerts that use default alert policy will be ignored

没有配置默认告警策略。因此如果告警规则配置使用了默认告警策略,则相应的告警会被忽略。

设置默认的告警策略。

error

GroupPolicyEmpty

Group policy of alert policy xxx is empty

alerts using this alert policy will be ignored

告警策略中的分组规则为空,因此告警会被忽略。

修改告警策略中的分组规则配置,避免为空。

error

ActionPolicyNotExist

action policy xxx not exist

alerts that use default action policy will not be notified

行动策略不存在,导致使用了该行动策略的告警不会被发送。

创建相应的行动策略,或者修改告警策略中的分组规则,使用其它的行动策略。

error

ActionPolicyInvalid

action policy xxx invalid

alerts that use default action policy will not be notified

行动策略格式错误,导致使用了该行动策略的告警不会被发送。

修改相应的行动策略,或者删除后重新创建。

error

ActionPolicyEmpty

Primary(Secondary) policy for action policy xxx is empty

alerts using this action policy will not be notified

第一(第二) 行动策略为空,导致使用该行动策略的告警不会被发送。

修改相应的行动策略,确保不为空。

warn

UserNotExist

user xxx not exist

this user will not be notified

用户 xxx 不存在,该用户不会被通知。

从行动策略中去掉该用户,或者创建该用户。

warn

UserGroupNotExist

group xxx not exist

this group will not be notified

用户组 xxx 不存在,该用户组不会被通知。

从行动策略中去掉该用户组,或者创建该用户组。

warn

UserGroupEmpty

group xxx is empty

this group will not be notified

用户组 xxx 为空,因此该用户组不会被通知。

为该用户组添加用户。

warn

OncallGroupNotExist

oncall group xxx not exist

this oncall group will not be notified

值班组 xxx 不存在,因此该值班组不会被通知。

创建该值班组。

warn

ContentTemplateNotExist

content template xxx not exist

notifications that use this content template will be ignored

内容模板 xxx 不存在,因此使用了该内容模板的通知渠道会被忽略。

配置行动策略使用其它的内容模板,或者创建该内容模板。

warn

CalendarNotExist

calendar xxx not exist

oncall group that using this calendar will be ignored

日历 xxx 不存在,因此使用该日历的值班组会被忽略。

配置值班组使用其它日历,或者创建该日历。

warn

ChannelQuotaNotExist

channel quota not exist

action policies will ignore channel quota

渠道配额不存在,因此发送通知的时候会忽略 quota 限制。

创建渠道配额。

warn

ChannelQuotaInvalid

channel quota format invalid

action policies will ignore channel quota

渠道配额为空,因此会忽略 quota 限制。

修改渠道配额的内容,确保限制不为空。


上一篇:SLS告警内置通知渠道最佳实践


下一篇:SLS新版告警入门——告警管理编排交互