SLS告警的分组评估最佳实践

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
日志服务 SLS,月写入数据量 50GB 1个月
简介: 监控系统一般包括监控目标(监控实体),监控条件,告警通知,自动修复等系模块,SLS作为云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务;SLS也提供了丰富的监控告警功能,可以针对在日志/时序/Trace数据中进行配置异常告警,比如在Nginx日志中500错误过多,主机时序数据中CPU超过90%需要告警,在告警发出时,往往需要对问题发生的原因进行追溯,需要知道哪些实体在出现了异常,比如哪个域名500错误过多,哪台主机CPU过高等。本文将介绍通过SLS告警监控中的分组评估功能找出异常的实体。

前言

监控系统一般包括监控目标(监控实体),监控条件,告警通知,自动修复等系模块,SLS作为云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务;SLS也提供了丰富的监控告警功能,可以针对在日志/时序/Trace数据中进行配置异常告警,比如在Nginx日志中500错误过多,主机时序数据中CPU超过90%需要告警,在告警发出时,往往需要对问题发生的原因进行追溯,需要知道哪些实体在出现了异常,比如哪个域名500错误过多,哪台主机CPU过高等。本文将介绍通过SLS告警监控中的分组评估功能找出异常的实体。


接下来就以此为背景来介绍如果使用SLS告警中的分组评估来查找出现异常告警的实体。

SLS告警监控简介

告警监控介绍

上述为SLS告警监控部分的功能结构,其中左边为监控目标指标:包括日志存储和时序存储等,在日志存储和时序存储中一般会有监控实体的信息,比如nginx日志中会有host字段表示域名,主机时序指标的labels会有hostname和ip等实体信息,通过SLS告警监控的规则中的分组评估,我们可以实现根据不同的实体,发出不同的告警。

分组评估告警效果

如上图所示,不同的主机CPU信息存储在SLS时序库中,告警规则可以同时对时序库中不同的主机进行监控。下面介绍如何在监控规则中使用分组评估。


SLS告警监控最佳实践

日志类分组评估告警

以Nginx访问日志为例,Nginx日志接入SLS可以参考使用Nginx模式采集日志,日志的字段如下图所示,其中host可以作为监控的实体,比如www.nwg.mock.com可以作为一个域名实体,每个域名背后对应着一个微服务;在日志中可以存储多个域名的访问日志,不同的域名往往意味着不同的业务,不同的开发运维团队,所以不同的业务发生问题时运维团队首先需要定位的就是哪个实体除了问题。

这种情况下,如果按照host来发出告警,就可以很容易的定位到是哪个服务除了问题。

接下来看下在SLS监控中如何按照host来分组,监控域名下的500错误:

查询分析语句使用

status >= 500 | SELECT host, COUNT(*) as err_cnt GROUP BY host;

可以查出每个host的5xx错误数,如果在15分钟内错误数大于10就发出告警,并且每个host分开发送,可以在告警规则中这样配置,分组评估选择“标签自定义”,值选择host字段,类似SQL语法中group by的效果。

告警在评估时会对每个组内的数据进行评估,是否有数据匹配 err_cnt > 10;如果该组的数据有满足err_cnt > 10,则该组可以认为满足触发条件,会产生一条告警;整个告警规则会对每个组的内容进行评估,每个组会对应一条告警。

每个组对应的告警产生的告警属性中的labels中会默认加上分组字段,例如:

labels: {"host": "www.zjn.mock.com"}

时序类分组评估告警

以主机监控时序数据为例,可以使用SLS采集主机监控数据,主要包括CPU,内存,磁盘,网络,TCP等相关指标,使用SLS的promql_range函数查询时序数据,返回的字段主要包括labels,metric, time, value;举例如下:

labels: "{\"hostname\":\"hostname0\",\"ip\":\"192.168.31.246\"}"

metric: "cpu_util"

time: "1635506700000"

value: "52.58"

其中labels字段一般用来表示监控实体,所以对于时序类数据,SLS告警提供了“标签自动”的分组选项,自动设置为labels为分组字段,当满足触发条件时,每个分组都会分开评估是否触发告警。

查询分析语句使用:

* | select promql_query('cpu_util') from metrics limit 1000

告警配置如下:

监控规则在评估时,会根据按照时序数据中的labels进行分组,然后对每个分组评估是否满足 value > 90,如果满足,将会生成一条告警,告警属性中的labels默认会加上时序中的labels,如:

labels: {"hostname":"hostname0","ip":"192.168.31.246"}

告警属性的标签

在上述的日志或者时序类分组评估,分别触发告警后,生成的告警的labels即为告警属性中的标签,告警属性可以参考文章

告警属性的标签可以用在告警管理后续的告警策略行动策略的配置。本文主要介绍分组评估的实践,告警属性的用法这里不再赘述。具体可以参考SLS告警的官方文档告警学习路径

分组评估注意事项

分组评估虽然可以实现一套告警规则同时监控多个实体的效果,在支持客户的过程中,会遇到一些客户不恰当的使用分组评估:

选择分组评估字段时,最好选择可以标识监控实体的字段,离散的字段。

例:比如slb或者nginx日志中的host,url等字段,可以用来区分不同的服务,但是request_time字段就不具有区分度,更不能用来标记实体。

使用这样的字段会产生非常多的分组,每个分组对应一个告警,造成告警风暴,这些都是由于配置不合理导致的。

总结

通过文中对分组评估的介绍,分组评估在通过告警信息推导监控实体的过程中起了很大作用,可以对多个监控实体将日志或时序同时写入一个SLS存储中的时候,可以有效的对不同实体进行监控,实现一套规则,多个实体统一监控的目标。

同时在使用分组评估后,产生的告警会自动将分组字段加入到告警属性的标签中,可供后续的告警管理使用。

近期,阿里云也发布了《基于SLS实现统一告警最佳实践》,其中详细介绍了SLS告警的各种用法,包括开放告警/内置规则告警/自定义告警,以及灵活的告警管理策略。


参考

  • 什么是日志服务告警【链接
  • 告警分组评估【链接
  • 使用Nginx模式采集日志【链接
  • 采集主机监控数据【链接
  • 创建告警策略【链接
  • 创建行动策略【链接
  • SLS告警-学习路径【链接
  • 基于SLS实现统一告警最佳实践【链接


进一步参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
11天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
28天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
48 1
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
46 2
|
2月前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
3月前
|
JSON Java fastjson
Java日志通关(五) - 最佳实践
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第五篇。
|
3月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
50 0
|
3月前
|
消息中间件 Prometheus 监控
Producer的监控与日志记录最佳实践
【8月更文第29天】在分布式系统中,消息队列作为关键组件之一,其稳定性和性能至关重要。生产者(Producer)负责生成并发送消息到消息队列中,因此确保生产者的健康运行是非常重要的。本文将探讨如何为生产者设置监控和日志记录,以跟踪其健康状况和性能指标。
63 0
|
4月前
|
存储 分布式计算 监控
日志数据投递到MaxCompute最佳实践
日志服务采集到日志后,有时需要将日志投递至MaxCompute的表中进行存储与分析。本文主要向用户介绍将数据投递到MaxCompute完整流程,方便用户快速实现数据投递至MaxCompute。
201 2
|
5月前
|
运维 监控 Java
系统日志规范及最佳实践
系统日志规范及最佳实践
377 1
系统日志规范及最佳实践
|
5月前
|
监控 Java API
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
115 1

相关产品

  • 日志服务
  • 下一篇
    无影云桌面