SLS告警最佳实践——在通知中引用日志内容

简介: 在配置告警通知的时候,通常我们需要知道告警的触发详情。例如Nginx访问错误告警,我们需要知道错误的HTTP Status 分布,错误的机器IP等信息,并且需要将这些信息体现在通知中,以便在接收到告警通知后,能够一目了然地知道发生了什么事情。那么在创建告警规则的时候,我们就需要进行合理的配置,使得告警在触发后,可以将这些信息放在合适的位置发送给通知服务,从而在通知模板里可以被引用到,从而被正确地通知。

概述

在配置告警通知的时候,通常我们需要知道告警的触发详情。例如Nginx访问错误告警,我们需要知道错误的HTTP Status 分布,错误的机器IP等信息,并且需要将这些信息体现在通知中,以便在接收到告警通知后,能够一目了然地知道发生了什么事情。

那么在创建告警规则的时候,我们就需要进行合理的配置,使得告警在触发后,可以将这些信息放在合适的位置发送给通知服务,从而在通知模板里可以被引用到,从而被正确地通知。

基本属性介绍

在告警规则触发告警后,我们可以通过如下一些属性获取到告警的原始日志信息,它们分别是:

  • labels
  • annotations
  • results
  • fire_results

它们的基本格式以及如何在模板中引用可以参考 内容模板变量说明(新版)。下面来分别进行介绍。

labels

自定义标签

在配置告警规则的时候,我们可以手动添加标签,例如:

那么在告警触发后,告警消息里就会包含如下信息:

{
"labels": {
"app": "nginx",
"env": "prod"    }
}

因此在内容模板里,就可以通过如下方式引用标签字段,例如:

应用: {{ alert.labels.app }}
环境: {{ alert.labels.env }}

分组评估

如果设置了分组评估,那么分组评估的字段会默认添加到标签中。关于分组评估的介绍,可以参考文档 分组评估。例如下面的配置,根据 status 字段做分组评估,那么当有错误时,不同的错误码是不同的告警,例如 400 的错误会是一个告警,404 的错误会是另外一个告警,等等。

此时除了自定义的 app 和 env 标签,还会有一个系统加上去的 stauts 标签。例如 404 的错误触发的告警会包含如下信息:

{
"labels": {
"app": "nginx",
"env": "prod",
"status": "404"    }
}

因此在内容模板里,就可以通过如下方式引用标签字段,例如:

应用: {{ alert.labels.app }}
环境: {{ alert.labels.env }}
错误码: {{ alert.labels.status }}

特别注意:

在设置分组评估的时候,需要特别注意,应当使用可枚举的字段。例如 http_status,slb_id 等。而对于不可枚举的随机字段,则不应该作为分组字段,例如 request_time,uuid 等。

annotations

自定义标注

在配置告警规则的时候,我们可以添加标注。与标签相比,标注更加灵活。标注不仅可以配置为固定的文本,还可以引用日志的字段,例如下面配置:

这里需要注意,默认有两个标注:

  • 标题,即 title 属性
  • 描述,即 desc 属性

那么在告警触发后,告警消息里就会包含如下信息:

{
"annotations": {
"title": "Nginx访问错误告警触发",
"desc": "状态码400错误发生了15次"    }
}

因此在内容模板里,就可以通过如下方式引用标注字段,例如:

告警标题: {{ alert.annotations.title }}
告警描述: {{ alert.annotations.desc }}

自动添加标注

除了自定义标注,还可以使用自动添加标注功能,例如:

它本质上相当于:

fire_results

fire_results 表示的是满足条件的告警记录。例如告警查询语句的结果如下:

当告警规则中触发条件配置为 cnt > 0 的时候:

触发的告警会有如下属性:

{
"fire_results": [
        { "status": "401", "ip": "127.0.0.1", "cnt": "3" },
        { "status": "400", "ip": "127.0.0.1", "cnt": "7" },
        { "status": "501", "ip": "127.0.0.1", "cnt": "4" },
        { "status": "404", "ip": "127.0.0.1", "cnt": "4" },
        { "status": "402", "ip": "127.0.0.1", "cnt": "6" },
        { "status": "403", "ip": "127.0.0.1", "cnt": "8" }
    ]
}

当告警规则中触发条件配置为 cnt > 5 时:

触发的告警的 fire_results 如下:

{
"fire_results": [
        { "status": "400", "ip": "127.0.0.1", "cnt": "7" },
        { "status": "402", "ip": "127.0.0.1", "cnt": "6" },
        { "status": "403", "ip": "127.0.0.1", "cnt": "8" }
    ]
}

然后就可以在模板变量中引用 fire_results 字段,例如:

告警触发详情: {{ alert.fire_results|to_json }}

results

results 是告警查询最原始的数据,例如上面的例子,告警触发后 results 信息如下:

{
"results": [{
"store_type": "log",
"region": "cn-hangzhou",
"project": "test-alert",
"store": "nginx-access-log",
"query": "status >= 400 | select status, __source__ as ip, count(*) as cnt group by status, ip",
"start_time": 1640006894,
"end_time": 1640007014,
"dashboard_id": "",
"raw_results": [
            { "status": "401", "ip": "127.0.0.1", "cnt": "3" },
            { "status": "400", "ip": "127.0.0.1", "cnt": "7" },
            { "status": "501", "ip": "127.0.0.1", "cnt": "4" },
            { "status": "404", "ip": "127.0.0.1", "cnt": "4" },
            { "status": "402", "ip": "127.0.0.1", "cnt": "6" },
            { "status": "403", "ip": "127.0.0.1", "cnt": "8" }
        ],
"raw_result_count": 6,
"fire_result": {
"status": "401",
"ip": "127.0.0.1",
"cnt": "3"        },
"has_sql": true,
"truncated": false,
"role_arn": ""    }]
}

之后也可以通过如下方式来引用原始日志:

告警查询详情: {{ alert.results[0].raw_results|to_json }}

注意:

  • 如果一个告警规则有多个查询语句,那么 results 数组就会有多项,每一项对应一个查询语句。
  • results 表示的是查询语句的原始查询数据,fire_results 表示的是满足告警触发条件的数据,这两者可能会有所差别的。例如触发条件是满足 cnt > 5,那么 results[0].raw_results 结果可能是 6条,但是 fire_results 结果可能是 3条,因为只有3条记录满足 cnt > 5

模板变量引用

循环展示触发日志

上文中 {{ alert.fire_results | to_json }} 会将 fire_results 以 JSON 字符串的形式来进行展示。有时候为了展示更友好,我们会希望通过循环的方式,一行行展示触发日志,此时可以通过循环来实现,例如:

{%-forresultinalert.fire_results%}
-status: {{ alert.status }}, count: {{ alert.cnt }}
{%-endfor%}

更多相关信息,可以参考 内容模板语法(新版)

通过模板函数进行数据处理

如果需要对告警的字段进行一些格式化或者处理后再展示,可以通过内置函数来实现。具体可以参考:

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
10月前
|
运维 Prometheus 监控
基于阿里云可观测产品构建企业级告警体系的通用路径与最佳实践
本文围绕企业级告警体系构建展开,探讨了监控与告警在系统稳定性中的重要作用。通过梳理监控对象、分析指标、采集数据及配置规则等环节,提出告警体系建设的通用流程,并针对多平台告警、误报、告警风暴等问题提供解决思路。结合阿里云可观测产品,分享了某电商企业的实践案例,展示了如何通过标签规范、日志标准和统一管理平台实现高效告警处置,为构建全面且实用的告警体系提供了参考指南。
1019 1
|
5月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
533 1
日志收集和Spring 微服务监控的最佳实践
|
5月前
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
346 1
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
956 54
|
11月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
521 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
10月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
268 0
优化 Apache 日志记录的 5 个最佳实践
|
11月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1255 13
|
11月前
|
缓存 Java 编译器
|
11月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1332 0

热门文章

最新文章

相关产品

  • 日志服务