Comparthing Logo
监测可观测性云基础设施DevOps日志记录指标

基于日志的监控与基于指标的监控

基于日志的监控会捕获详细的事件记录,以便进行深度故障排除;而基于指标的监控则会跟踪一段时间内的数值数据点,从而提供实时性能洞察。这两种方法在现代可观测性架构中各有侧重,大多数团队会发现,将两者结合使用比选择其中一种更为有利。

亮点

  • 日志保留事件上下文以供取证调查,而指标则概括系统状态以供快速查询。
  • 指标可以实现近乎即时的基于阈值的警报,而日志警报则需要解析和模式匹配。
  • 日志存储成本随事件量和详细程度而增加,而指标存储则保持紧凑和可预测。
  • 结合这两种方法,可以提供现代分布式系统所需的完整可观测性图景。

基于日志的监控是什么?

记录具有上下文细节的离散事件,从而能够对分布式系统进行取证分析和根本原因调查。

  • 日志是应用程序、服务器和基础设施组件生成的事件的结构化或非结构化时间戳记录。
  • 每条日志条目通常包含时间戳、严重级别、来源标识符以及有关所发生事件的描述性消息。
  • ELK Stack(Elasticsearch、Logstash、Kibana)、Splunk 和 Loki 等工具通常用于聚合和搜索日志数据。
  • 基于日志的监控能够很好地回答“为什么会发生这种情况”,因为它保留了单个事件的完整上下文。
  • 日志的存储成本往往高于指标,因为每个事件可能包含数百字节的详细信息。

基于指标的监控是什么?

收集数值时间序列数据点,以实时跟踪系统健康状况、性能趋势和资源利用率。

  • 指标是定期采样的数值测量值,例如 CPU 使用率、请求延迟或内存消耗。
  • 像 Prometheus、InfluxDB 和 Graphite 这样的时间序列数据库是专门为高效地存储和查询指标数据而构建的。
  • 基于指标的监控通过仪表盘、警报和基于阈值的通知来回答“现在正在发生什么”。
  • 单个指标数据点通常比日志条目小得多,通常只有名称、时间戳和值。
  • 常用的可视化工具包括 Grafana、Datadog 仪表板和 CloudWatch 指标视图。

比较表

功能 基于日志的监控 基于指标的监控
数据类型 包含丰富上下文的事件记录 数值时间序列数据点
主要用例 根本原因分析和调试 实时警报和趋势分析
存储占地面积 单次进货量更大,存储成本更高 数据点精简,存储成本更低
查询方法 全文搜索和筛选 聚合、数学函数、时间窗口查询
响应时间 大规模查询速度较慢 仪表板查询几乎是瞬时的
最适合回答 为什么会发生这件事? 当前系统状态是什么?
常用工具 ELK Stack、Splunk、Loki、Fluentd 普罗米修斯、Grafana、Datadog、CloudWatch
警报功能 功能有限,通常需要日志解析规则 原生阈值和异常警报

详细对比

数据粒度和上下文

基于日志的监控会捕获每个离散事件及其上下文信息,包括用户 ID、请求负载、错误堆栈跟踪和环境变量。这使得日志在需要精确还原特定事件发生过程时至关重要。相比之下,基于指标的监控将系统行为概括为数值,牺牲了单个事件的细节,换取了一种紧凑、易于查询的格式,这种格式在较长的时间跨度内都能很好地工作。

性能和可扩展性

指标数据库针对高写入吞吐量和快速聚合进行了优化,因此像 Prometheus 这样的平台可以轻松地每隔几秒钟抓取数千个目标。日志系统需要更高的计算开销,因为它们索引自由格式的文本并支持复杂的搜索查询。随着日志量增长到每天数 TB 级别,团队通常需要投资于分层存储、采样策略或保留策略,以控制成本。

警报和实时可见性

在实时告警方面,指标的优势显而易见,因为将数值阈值与时间序列进行比对的计算量非常小。您可以设置诸如“CPU 使用率超过 90% 持续 5 分钟”之类的告警,而开销极小。虽然基于日志的告警也是可行的,但通常需要解析规则或日志查询引擎来检测模式,这会增加延迟和复杂性。对于系统健康状况的即时通知,指标通常是更快捷的方式。

调试和取证分析

当系统出现故障时,工程师通常会首先查看日志,因为日志能够完整地记录事件经过。一条日志条目就能揭示具体的错误信息、受影响的用户以及触发故障的代码路径。指标可以告诉你错误率在下午 2:34 出现峰值,但很少能解释原因。因此,成熟的工程团队会将日志作为调查工具,将指标作为预警系统。

成本和存储方面的考虑

存储日志通常比存储指标成本更高,因为每条日志条目包含更多数据,而且出于合规性或审计原因,日志的保留期限通常更长。一个中等规模的应用程序每天可能会生成数百万条日志,而仅产生几百个不同的指标序列。许多组织通过实施日志采样、源端过滤或分层存储来控制成本,而指标的保留期限通常可以低成本地延长至数月甚至数年。

现代可观测性中的集成

可观测性的三大支柱是日志、指标和追踪,大多数生产级系统都依赖于这三者。指标提供高层次的健康状况概览,日志提供深入的诊断细节,而分布式追踪则通过展示跨服务的请求流将两者连接起来。在基于日志的监控和基于指标的监控之间进行选择很少是二选一的问题;相反,团队会根据自身的运营需求和预算来决定如何在两者之间进行平衡投入。

优点与缺点

基于日志的监控

优点

  • + 丰富的背景细节
  • + 非常适合调试
  • + 支持全文搜索
  • + 捕捉罕见事件

继续

  • 更高的仓储成本
  • 查询性能变慢
  • 复杂的警报设置
  • 需要解析规则

基于指标的监控

优点

  • + 快速实时警报
  • + 低存储成本
  • + 简易仪表盘
  • + 高效聚合

继续

  • 有限的事件背景
  • 错过罕见异常
  • 需要预定义的指标
  • 较少法医细节

常见误解

神话

运行一个可靠的系统只需要一种监控方式。

现实

大多数生产系统都能从这两种方法中获益。指标可以通过警报及早发现问题,而日志则可以帮助工程师在问题被发现后了解根本原因。仅仅依赖其中一种方法会留下盲点,从而延长停机时间。

神话

原木长期保存成本太高。

现实

虽然原始日志存储成本高昂,但分层存储策略、压缩和智能采样使得长期保留日志成为可能。许多合规框架实际上要求保留某些日志数月甚至数年,因此成本管理的关键在于策略而非规避。

神话

指标可以代替日志用于调试。

现实

指标可以告诉你某些东西发生了变化,但很少能解释原因。在调查特定用户投诉或罕见错误时,日志通常是找到真正原因的唯一途径。指标和日志在事件响应中发挥着互补作用。

神话

更多的日志数据意味着更好的监控。

现实

过多的日志记录会造成噪音、增加成本,甚至会减慢故障排除速度。有效的基于日志的监控应该侧重于使用结构化字段捕获有意义的事件,而不是将所有可能的细节都写入非结构化的文本中。

神话

基于指标的监控可以自动捕获所有异常情况。

现实

指标只能检测到你明确测量的内容。如果出现了一种新的故障模式,而没有人想到要跟踪它,指标将完全无法检测到。相比之下,只要应用程序在写入日志,日志就能捕获意外事件。

常见问题解答

基于日志的监控和基于指标的监控的主要区别是什么?
基于日志的监控会记录带有详细上下文的单个事件,因此非常适合调试和取证分析。基于指标的监控会收集一段时间内的数值数据点,因此非常适合实时警报和趋势可视化。日志回答“为什么”,而指标回答“是什么”和“多少”。
日志监控和指标监控,哪个更便宜?
指标监控通常成本较低,因为每个数据点都很小且紧凑。日志监控成本较高,因为日志条目数量庞大且内容冗长,尤其是在规模较大时。然而,成本很大程度上取决于保留策略、数据摄取速率以及具体的供应商定价模式。
能否利用基于日志的监控实现告警?
是的,但它比基于指标的告警要复杂得多。像 Elasticsearch、Splunk 和 Loki 这样的工具支持在特定日志模式出现时触发告警规则。与评估简单的数值阈值相比,这种方式的缺点是延迟更高,处理开销更大。
哪些工具最适合基于日志的监控?
常用的数据收集方案包括 ELK Stack(Elasticsearch、Logstash、Kibana)、Splunk、Grafana Loki 和 Fluentd。云服务提供商也为不愿自行搭建基础设施的团队提供托管服务,例如 AWS CloudWatch Logs、Google Cloud Logging 和 Azure Monitor Logs。
哪些工具最适合基于指标的监控?
Prometheus 是应用最广泛的开源工具,通常与 Grafana 配合使用进行可视化。Datadog、New Relic 和 Dynatrace 等商业平台提供托管指标收集和内置告警功能。云原生工具包括 AWS CloudWatch Metrics 和 Google Cloud Monitoring。
生产环境调试应该使用日志还是指标?
首先使用指标来检测问题,然后再查看日志来调查原因。指标可以缩小时间范围和受影响的系统,而日志则提供识别根本原因所需的详细事件描述。这种两步法是 SRE 和 DevOps 团队的标准做法。
在可观测性中,日志和指标如何协同工作?
它们与分布式追踪共同构成可观测性的三大支柱中的两大支柱。指标提供宏观的健康状况概览,日志提供深入的诊断细节,而追踪则将各个服务之间的请求关联起来。大多数现代平台,例如 Datadog、Honeycomb 和 Grafana 技术栈,都集成了这三者。
日志和指标应该分别保留多长时间?
通常的做法是将指标数据保留 13 个月或更长时间,因为存储成本低廉且有助于容量规划。日志通常在热存储中保留 30 至 90 天,较早的日志则会归档到冷存储或对象存储(例如 S3)中,以满足合规性要求或偶尔的调查需求。
对于监控而言,结构化日志比非结构化日志更好吗?
结构化日志(通常为 JSON 格式)更适合监控,因为它支持可靠的解析、过滤和聚合。非结构化日志需要使用正则表达式或人工审核,这会降低告警和调试速度。大多数现代应用程序默认都会生成结构化日志。
基于指标的监控能否检测到日志遗漏的问题?
是的,尤其是在性能逐渐下降或资源饱和的情况下。缓慢的内存泄漏可能不会在日志中留下记录,但随着时间的推移,会在内存使用指标中清晰地显现出来。此外,指标更擅长捕捉数千个请求的总体模式,而单个日志条目过于嘈杂,难以分析。

裁决

如果您的主要需求是深度调试、审计跟踪或了解特定事件背后的上下文,请选择基于日志的监控。如果您需要实时仪表盘、快速告警和大规模的长期趋势分析,请选择基于指标的监控。实际上,最有效的可观测性策略是将两者结合起来,利用指标进行早期检测,利用日志进行彻底调查。

相关比较