日志记录 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

日志记录

记录是保存有关系统中发生的事件数据的过程。日志可以包括问题、错误或有关当前操作的信息。日志可以分为不同的类型,例如:

  • 事件日志

  • 服务器日志

  • 系统日志

  • 授权和访问日志

  • 审核日志

开发者可以在日志中搜索特定的错误代码或模式,根据特定字段对其进行筛选,或者将其安全地存档以备将来分析。日志可以帮助开发人员对性能问题进行根本原因分析,并在系统组件之间进行关联。

构建有效的日志解决方案需要应用程序和基础架构团队之间的密切协调。除非有可扩展的日志基础架构来支持日志的解析、筛选、缓冲和关联等用例,否则应用程序日志将毫无用处。可以简化常见用例,例如生成关联 ID、记录关键业务方法的运行时间以及定义日志模式。

应用程序小组

应用程序开发人员必须确保生成的日志遵循日志记录最佳实践。最佳做法包括以下内容:

  • 生成关联 ID 以跟踪唯一请求

  • 记录关键业务方法所花费的时间

  • 在适当的日志级别上进行日志记录

  • 共享通用日志库

在设计与不同微服务交互的应用程序时,请使用这些日志设计原则来简化后端的筛选和日志提取。

生成关联 ID 以跟踪唯一请求

当应用程序收到请求时,它可以检查标头中是否已存在关联 ID。如果没有 ID,则应用程序应生成一个 ID。例如,Application Load Balancer 会添加一个名为的标头X-Amzn-Trace-Id。应用程序可以使用标头将来自负载均衡器的请求与应用程序关联起来。同样,traceId如果调用依赖的微服务,则应用程序应注入,以便请求流中不同组件生成的日志相互关联。

记录关键业务方法所花费的时间

当应用程序收到请求时,它会与其他组件进行交互。应用程序应以定义的模式记录关键业务方法所花费的时间。这样可以更轻松地在后端解析日志。它还可以帮助您从日志中生成有用的见解。您可以使用诸如面向方面的编程 (AOP) 之类的方法来生成此类日志,以便将日志问题与业务逻辑分开。

在适当的日志级别上进行日志记录

应用程序应写入包含大量有用信息的日志。使用日志级别按事件的严重性对事件进行分类。例如,对于需要调查的重要事件,使用WARNINGERROR关卡。使用INFODEBUG可进行详细的跟踪和高容量事件。将日志处理程序设置为仅捕获生产中必需的级别。在该INFO级别生成过多的日志记录无济于事,它会增加后端基础架构的压力。 DEBUG日志可能很有用,但应谨慎使用。使用DEBUG日志会生成大量数据,因此不建议在性能测试环境中使用日志。

共享通用日志库

应用程序团队应使用通用的日志库,例如 适用于 Java 的 AWS SDK,带有预定义的通用日志记录模式,开发人员可以在其项目中将其用作依赖项。

基础架构小组

DevOps 在后端筛选和提取日志时,工程师可以使用以下日志设计原则来减少工作量。基础架构团队必须设置和支持以下资源。

日志代理

日志代理(日志采集器)是一个从一个位置读取日志并将其发送到另一个位置的程序。日志代理用于读取存储在计算机上的日志文件,并将日志事件上传到后端进行集中化。

日志是非结构化数据,必须先对其进行结构化处理,然后才能从中获得有意义的见解。日志代理使用解析器来读取日志语句并提取相关字段,例如时间戳、日志级别和服务名称,并将这些数据结构化为 JSON 格式。在边缘安装轻量级日志代理很有用,因为它可以降低资源利用率。日志代理可以直接推送到后端,也可以使用中间日志转发器将数据推送到后端。使用日志转发器可以将工作从源头的日志代理中移开。

日志解析器

日志解析器将非结构化日志转换为结构化日志。日志代理解析器还可以通过添加元数据来丰富日志。数据解析可以在源端(应用程序端)完成,也可以集中完成。存储日志的架构应该是可扩展的,以便您可以添加新字段。我们建议使用标准日志格式,例如 JSON。但是,在某些情况下,必须将日志转换为 JSON 格式才能更好地进行搜索。编写正确的解析器表达式可以实现高效的转换。

日志后端

日志后端服务收集、提取和可视化来自各种来源的日志数据。日志代理可以直接写入后端或使用中间日志转发器。在进行性能测试时,请务必存储日志,以便日后可以对其进行搜索。将每个应用程序的日志分别存储在后端。例如,为应用程序使用专用索引,并使用索引模式搜索分布在不同相关应用程序中的日志。我们建议至少保存 7 天的日志搜索数据。但是,将数据存储更长的时间可能会导致不必要的存储成本。由于在性能测试期间会生成大量日志,因此日志基础架构必须扩展和调整日志后端的大小。

日志可视化

要从应用程序日志中获得有意义且可操作的见解,请使用专用的可视化工具处理原始日志数据并将其转换为图形表示。图表、图表和仪表板等可视化可以帮助发现趋势、模式和异常,这些趋势和异常在查看原始日志时可能不太明显。

使用可视化工具的主要好处包括能够关联多个系统和应用程序中的数据,以识别依赖关系和瓶颈。交互式仪表板支持以不同的粒度深入研究数据,以解决问题或发现使用趋势。专业的数据可视化平台提供分析、警报和数据共享等功能,可以增强监控和分析。

通过在应用程序日志上使用数据可视化的强大功能,开发和运营团队可以深入了解系统和应用程序的性能。得出的见解可用于多种用途,包括优化效率、改善用户体验、增强安全性和容量规划。最终结果是为各种利益相关者量身定制的仪表板,提供将日志数据汇总为可操作且有见地的信息的 at-a-glance 视图。

自动化日志基础架构

由于不同的应用程序有不同的要求,因此自动化日志基础架构的安装和操作非常重要。使用基础设施即代码 (IaC) 工具来配置日志基础架构的后端。然后,您可以将日志基础架构配置为共享服务,也可以作为特定应用程序的独立定制部署。

我们建议开发人员使用持续交付 (CD) 管道来自动执行以下操作:

  • 按需部署日志基础架构,并在不需要时将其拆除。

  • 在不同的目标上部署日志代理。

  • 部署日志解析器和转发器配置。

  • 部署应用程序仪表板。

日志工具

AWS 提供原生日志、警报和仪表板服务。以下是常 AWS 服务 用的日志记录资源: