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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在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__ 及其所处的阶段、以及说明如下:

__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
groupby  project,  alert_name
orderby  cnt desc

结果参考如下:

案例二:通知失败统计

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

查询分析语句如下:

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

案例三:通知失败原因

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

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

__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

参考结果如下:

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

告警内置仪表盘

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

监控规则中心

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

告警链路中心

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

告警排障中心

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

常见配置错误

告警中心日志中,通过 __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 限制。

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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
10天前
|
存储 SQL 监控
|
10天前
|
运维 监控 安全
|
7天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
13天前
|
监控 关系型数据库 MySQL
分析慢查询日志
【10月更文挑战第29天】分析慢查询日志
34 3
|
13天前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
32 2
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
32 1
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1625 14
|
23天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
46 1
|
1月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
35 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
43 2

相关产品

  • 日志服务