在当今快速发展的软件开发环境中,高效的日志管理对于维护系统可靠性和性能至关重要。随着基础设施和应用程序组件的扩展和复杂化,运维和开发团队的职责也在不断增加和多样化。本文概述了有效日志管理的最佳实践,解决了日益增长的数据量、复杂的基础设施以及快速解决问题的需求所带来的挑战。
了解日志及其重要性
日志是记录基础设施中发生的事件的记录,通常包括时间戳、详细描述事件的消息以及标识来源的元数据。它们对于诊断问题、提供早期警告和加快问题解决速度非常宝贵。日志通常是开发人员启用的主要信号,为调试、性能分析、安全性和合规性管理提供了重要细节。
日志记录之旅
日志记录之旅包括三个基本步骤:收集和摄取、处理和丰富以及分析和合理化。让我们详细探讨每个步骤,涵盖每个部分的一些最佳实践。
1. 日志收集和摄取
收集所有相关且可操作的内容
第一步是将所有日志收集到一个中心位置。这包括识别所有应用程序和系统并收集其日志。全面的数据收集可确保不会遗漏任何关键信息,从而提供系统行为的完整视图。在发生事件时,将所有日志放在一个位置可以显着缩短解决问题的时间。通常最好收集比您需要的更多的数据,因为您可以稍后过滤掉不相关的信息,并更快地删除不再需要的日志。
利用集成
Elastic 提供了 300 多个集成,简化了数据载入。这些集成不仅可以收集数据,还带有仪表板、保存的搜索和管道来解析数据。利用这些集成可以显着减少人工工作并确保数据一致性。
考虑摄取容量和成本
日志收集的一个重要方面是确保您拥有足够的摄取容量,且成本可控。在评估解决方案时,请谨慎对待那些对高基数数据收费过高的解决方案,因为这可能会导致可观测性解决方案的成本意外升高。我们将在本文后面讨论更具成本效益的日志管理。
大型项目使用 Kafka
对于较大的组织,实施 Kafka 可以改进日志数据管理。Kafka 充当缓冲区,使系统更可靠且更易于管理。它允许不同的团队将数据发送到中心位置,然后可以将其摄取到 Elastic 中。
2. 处理和丰富
采用 Elastic 通用模式 (ECS)
日志收集的一个关键方面是让所有应用程序和基础设施之间具有最大程度的标准化。拥有通用的语义模式至关重要。Elastic 将 Elastic 通用模式 (ECS) 贡献给了 OpenTelemetry (OTel),帮助加速了基于 OTel 的可观测性和安全性的采用。这种朝着更加标准化的方式来定义和摄取日志(包括指标和跟踪)的转变对行业有利。
使用 ECS 有助于标准化字段名称和数据结构,使数据分析和关联更容易。此通用模式可确保您的数据以可预测的方式组织,从而促进更高效的查询和报告。在此处了解有关 ECS 的更多信息:此处。
优化高容量数据的映射
对于高基数字段或很少使用的字段,请考虑优化或将其从索引中删除。这可以通过减少需要索引和搜索的数据量来提高性能。我们的文档中有用于调整设置以适应磁盘使用率、搜索速度和索引速度的部分。
管理结构化日志与非结构化日志
结构化日志通常更受欢迎,因为它们提供更多的价值并且更易于使用。它们具有预定义的格式和字段,简化了信息提取和分析。对于没有预构建集成的自定义日志,您可能需要定义自己的解析规则。
对于非结构化日志,全文搜索功能可以帮助缓解限制。通过索引日志,全文搜索允许用户有效地搜索特定的关键字或短语,即使在大量非结构化数据中也是如此。这是 Elastic 可观测性解决方案的主要区别之一。您可以简单地搜索任何关键字或短语并实时获得结果,而无需在查询时编写复杂的正则表达式或解析规则。
读取时模式与写入时模式
处理日志数据有两种主要方法
-
读取时模式:一些可观测性仪表板功能可以执行运行时转换,以从非解析源动态提取字段。这在处理可能未以标准化格式记录数据的遗留系统或自定义应用程序时很有帮助。但是,运行时解析可能很耗时且资源密集,尤其是在处理大量数据时。
-
写入时模式:此方法提供更好的性能和对数据的更多控制。模式是预先定义的,并且数据在写入时进行结构化和验证。这允许更快地处理和分析数据,这对丰富很有帮助。
3. 分析和合理化
全文搜索
Elastic 的全文搜索功能由 Elasticsearch 提供支持,可让您快速查找相关日志。Kibana 查询语言 (KQL) 提高了搜索效率,使您能够过滤和深入挖掘数据以快速识别问题。
以下是 KQL 查询的一些示例
// Filter documents where a field exists
http.request.method: *
// Filter documents that match a specific value
http.request.method: GET
// Search all fields for a specific value
Hello
// Filter documents where a text field contains specific terms
http.request.body.content: "null pointer"
// Filter documents within a range
http.response.bytes < 10000
// Combine range queries
http.response.bytes > 10000 and http.response.bytes <= 20000
// Use wildcards to match patterns
http.response.status_code: 4*
// Negate a query
not http.request.method: GET
// Combine multiple queries with AND/OR
http.request.method: GET and http.response.status_code: 400
机器学习集成
机器学习可以自动检测日志数据中的异常和模式。Elastic 提供日志速率分析等功能,可自动识别与正常行为的偏差。通过利用机器学习,您可以主动解决潜在问题,避免它们升级。
建议组织利用多种机器学习算法和技术,以有效地发现日志文件中未知的未知项。应将无监督机器学习算法用于对实时数据进行异常检测,并根据严重性进行速率控制的警报。
通过自动识别影响因素,用户可以获得有价值的上下文,从而进行自动根本原因分析 (RCA)。日志模式分析为非结构化日志带来分类,而日志速率分析和变化点检测有助于识别日志数据峰值的根本原因。
请查看文档以开始使用 Elastic 中的机器学习。
仪表板和警报
构建仪表板和设置警报可帮助您实时监控日志。仪表板提供了日志的可视化表示,使您更容易识别模式和异常。当特定事件发生时,警报可以通知您,使您可以快速采取行动。
具有成本效益的日志管理
使用数据层
实施索引生命周期管理,将数据在热、温、冷和冻结层之间移动,可以显著降低存储成本。这种方法确保只有最频繁访问的数据存储在昂贵的高性能存储上,而较旧的数据则移动到更具成本效益的存储解决方案中。
我们的文档解释了如何设置索引生命周期管理。
压缩和索引排序
应用最佳压缩设置和使用索引排序可以进一步减少数据占用空间。优化数据在磁盘上的存储方式可以显著节省存储成本并提高检索性能。从 8.15 版本开始,Elasticsearch 提供了一种名为“logsdb”的索引模式。这是一种高度优化的日志数据存储方式。这种新的数据索引方式比默认模式节省 2.5 倍的磁盘空间。您可以在这里阅读更多相关信息。此模式会自动应用最佳的压缩设置、索引排序和其他以前用户无法访问的优化的组合。
快照生命周期管理 (SLM)
SLM 允许您备份数据并将其从主集群中删除,从而释放资源。如果需要,可以快速恢复数据进行分析,确保您能够在不产生高存储成本的情况下保持调查历史事件的能力。
在文档中了解有关 SLM 的更多信息。
处理大量日志数据
管理大量日志数据可能具有挑战性。以下是一些优化日志管理的策略
- 制定日志删除策略。评估要收集哪些数据以及何时删除数据。
- 考虑更早地丢弃 DEBUG 日志,甚至 INFO 日志,并更快地删除开发和暂存环境日志。
- 聚合短时间内相同的日志行,这对于 TCP 安全事件日志记录尤其有用。
- 对于您控制的应用程序和代码,请考虑将一些日志移动到跟踪中,以减少日志量,同时保持详细信息。
集中式与分散式日志存储
在管理日志数据时,数据局部性是一个重要的考虑因素。摄取和输出大量日志数据的成本可能非常高,尤其是在与云提供商打交道时。
在没有区域冗余要求的情况下,您的组织可能不需要将所有日志数据发送到中心位置。考虑将日志数据保留在生成它的数据中心本地,以降低摄取和输出成本。
跨集群搜索功能允许用户同时搜索多个日志记录集群,从而减少需要通过网络传输的数据量。
跨集群复制对于在发生灾难时保持业务连续性非常有用,即使在一个数据中心发生中断,也能确保数据的可用性。
监控和性能
监控您的日志管理系统
使用专用的监控集群可以帮助您跟踪 Elastic 部署的性能。堆栈监控提供有关搜索和索引活动的指标,帮助您识别和解决性能瓶颈。
调整批量大小和刷新间隔
优化这些设置可以平衡性能和资源使用。增加批量大小和刷新间隔可以提高索引效率,尤其是在高吞吐量环境中。
日志记录最佳实践
调整日志级别
确保为所有应用程序正确设置日志级别。自定义日志格式以方便摄取和分析。正确配置的日志级别可以减少干扰,并更容易识别关键问题。
使用现代日志记录框架
实施支持结构化日志记录的日志记录框架。向日志添加元数据可以增强其用于分析的效用。结构化日志格式(如 JSON)允许轻松解析和查询日志,从而提高日志分析的效率。如果您完全控制应用程序并且已经在使用结构化日志记录,请考虑使用Elastic 版本的这些库,它可以自动将日志解析为 ECS 字段。
利用 APM 和指标
对于自定义构建的应用程序,应用程序性能监控 (APM) 可以提供对应用程序性能的更深入了解,从而补充传统的日志记录。APM 跟踪跨服务的事务,帮助您了解依赖关系并识别性能瓶颈。
考虑在收集日志的同时收集指标。指标可以提供对系统性能的深入了解,例如 CPU 使用率、内存使用率和网络流量。如果您已经从系统中收集日志,那么添加指标收集通常是一个快速的过程。
跟踪可以提供对特定事务或请求路径的更深入了解,尤其是在云原生环境中。它们提供更多上下文信息,并且擅长跟踪跨服务的依赖关系。但是,只有您可以拥有的应用程序才能实现跟踪,并且并非所有开发人员都已完全接受它。
建议采用结合日志记录和跟踪的策略,其中跟踪为较新的仪表化应用程序提供覆盖,而日志记录支持遗留应用程序和您不拥有源代码的系统。
结论
在当今复杂的软件环境中,有效的日志管理对于维护系统可靠性和性能至关重要。通过遵循这些最佳实践,您可以优化日志管理流程、降低成本并缩短问题解决时间。
主要收获包括
- 确保全面收集日志,重点关注规范化和通用模式。
- 使用适当的处理和丰富技术,在结构化日志和非结构化日志之间取得平衡。
- 利用全文搜索和机器学习进行高效的日志分析。
- 实施具有成本效益的存储策略和智能数据保留策略。
- 通过 APM、指标和跟踪增强您的日志记录策略,以实现完整的可观察性解决方案。
不断评估和调整您的策略,以跟上日志数据不断增长的容量和复杂性,您将有能力确保应用程序和基础设施的可靠性、性能和安全性。
查看我们的其他博客
- 从日志和指标构建更好的服务级别目标 (SLO)
- 在 Elastic 中使用 GenAI 分析 AWS VPC 流日志
- 将 10 亿条日志行从 OpenSearch 迁移到 Elasticsearch
- 使用 Elastic 削减传入的日志量
准备好开始了吗?在 Elastic Cloud 上使用 Elastic 可观测性 - 这是托管的 Elasticsearch 服务,其中包含所有最新功能。
本帖中描述的任何功能或特性的发布和时间安排均由 Elastic 自行决定。目前不可用的任何功能或特性可能不会按时或根本不会交付。