菜单

可观测性和监控

相关源文件

本文介绍了 DevOps 环境中可观测性与监控的核心概念,包括这些实践之间的关系、监控数据类型以及用于实现可观测性的工具。它探讨了监控工具如何集成到更广泛的 DevOps 生态系统中,特别是在容器化和 Kubernetes 环境中。

来源: topics/observability/README.md10-13

什么是可观测性?

可观测性是指收集、分析和利用有关程序执行、模块内部状态以及分布式系统中组件之间通信的数据的能力。可观测性源于控制理论,在软件工程中是指从外部输出来理解系统内部状态的程度。

与关注预定义指标和警报的传统监控不同,可观测性提供了一种更全面的方法,使运维人员能够在不添加新仪器的情况下询问系统行为的新问题。

可观测性是站点可靠性工程 (SRE) 的基础,因为它是诊断和分类服务中断或性能下降的关键第一步。

可观测性的三大支柱

来源: topics/observability/README.md10-13

监控 vs. 可观测性

虽然监控和可观测性相关,但它们在维护可靠系统方面服务于不同的目的。

谷歌将监控定义为“服务所有者跟踪系统运行状况和可用性的主要手段之一”。它通常涉及收集预定义的指标并根据阈值设置警报。

可观测性通过以下方式在监控的基础上进行扩展

  • 提供监控数据的上下文
  • 实现超越预定义指标的调查
  • 通过不同数据类型的相关性支持更广泛的系统理解

来源: topics/observability/README.md19-23

监控数据类型

监控什么

在现代 DevOps 环境中,堆栈的不同层都需要进行监控

监控示例
硬件CPU 使用率、内存利用率、磁盘 I/O
基础设施磁盘容量、网络吞吐量、延迟
应用程序HTTP 状态码、错误率、业务指标
用户体验页面加载时间、事务完成率

来源: topics/observability/README.md36-41

时间序列数据

时间序列数据是按连续时间间隔测量的、一系列数据点。这种数据格式对于监控至关重要,因为它允许跟踪指标如何随时间变化。

CPU 利用率作为时间序列数据的示例

08:00   17%
09:00   22%
10:00   91%

时间序列数据库经过专门优化,可以处理此类数据,其功能支持

  • 高效存储时间戳-值对
  • 对特定时间段进行快速范围查询
  • 降采样和聚合函数

来源: topics/observability/README.md44-54 topics/databases/README.md183-185

数据聚合

在监控场景下,数据聚合是指将多个数据点组合起来以得出有意义的见解。常见的聚合方法包括

  • 平均值:一段时间内的平均值
  • 总和:所有值的总和(对计数器有用)
  • 计数:事件发生的频率
  • 百分位数:分布分析(例如 p95、p99)
  • 最小值/最大值:一组中的极端值

数据聚合可以实现更有效率的存储和分析,特别是对于生成大量遥测数据的系统。

来源: topics/observability/README.md58-61

应用性能管理 (APM)

应用性能管理 (APM) 将 IT 指标转化为业务洞察。它包含用于监控应用程序以提高性能、减少问题和改善用户体验的实践。

APM 监控什么

APM 系统通常会收集和监控

来源: topics/observability/README.md68-93

监控工具和平台

DevOps 生态系统中通常会使用多种工具和平台来实现可观测性与监控

Grafana

Grafana 是一个开源的可视化和分析平台,允许您查询、可视化和警报指标,无论它们存储在哪里。它通常与 Prometheus 等时间序列数据库配合使用。

来源: images/logos/grafana.png

Datadog

Datadog 是一个用于云应用程序的监控和安全平台,通过基于 SaaS 的数据分析平台提供服务器、数据库、工具和服务的监控。

Datadog 的主要功能包括

  • 基于代理的收集:Datadog 代理从主机收集指标、日志和跟踪
  • 集成:与许多服务和平台内置集成
  • 标签:强大的标签系统,用于分类和过滤数据

来源: topics/datadog/README.md15-29 topics/datadog/README.md45-48

Kubernetes 环境中的可观测性

Kubernetes 增加了可观测性的复杂性,但也提供了内置机制来支持监控。

Kubernetes 监控架构

监控部署策略

在实施蓝绿部署或灰度部署等高级部署策略时,可观测性至关重要。这些策略可以使用 Argo Rollouts 等工具实现,需要仔细监控以确保成功部署。

监控 Argo Rollouts

在使用 Argo Rollouts 进行灰度部署时,您可以监控

  • 稳定版和灰度版之间的流量权重分配
  • 两个版本的 Pod 健康状况指标
  • 错误率和性能差异

对于蓝绿部署,监控侧重于

  • 在流量切换前新部署的就绪状态
  • 完整的流量切换性能
  • 如果检测到问题,能够快速回滚

来源: topics/argo/exercises/canary_rollout/solution.md27-66 topics/argo/exercises/blue_green_rollout/solution.md27-54

使用 Kustomize 进行监控配置

Kustomize 可用于在 Kubernetes 中的应用程序之间管理一致的监控配置。例如,您可以为所有资源添加通用的监控标签

这使得监控工具可以根据标签自动发现并抓取应用程序的指标。

来源: topics/kubernetes/exercises/kustomize_common_labels/solution.md17-29

可观测性的最佳实践

1. 定义服务水平目标 (SLO)

  • 为服务可靠性设定清晰、可衡量的目标
  • 使用 SLO 来确定最重要的监控指标
  • 将监控策略与业务目标对齐

2. 实施 USE 方法

用于资源监控

  • 利用率:资源繁忙的时间百分比
  • 饱和度:资源必须执行的工作量(队列长度)
  • 错误:错误事件的数量

3. 遵循 RED 方法

用于服务监控

  • 速率:每秒请求数
  • 错误:每秒失败的请求数
  • 持续时间:请求延迟的分布

4. 设计有效的警报

  • 根据症状而非原因进行警报
  • 通过减少非可操作的警报来最大程度地减少警报疲劳
  • 实施适当的警报严重级别
  • 在可能的情况下,在警报中包含运行手册

5. 实施分布式跟踪

  • 使用唯一的跟踪 ID 来跟踪跨服务的请求
  • 检测代码以传播跟踪上下文
  • 分析跟踪数据以识别瓶颈

来源: topics/observability/README.md86-92

结论

可观测性和监控是现代 DevOps 环境中的基本实践。通过实施包含指标、日志和跟踪的全面可观测性策略,组织可以更深入地了解其系统,更有效地解决问题,并提高整体可靠性。

本文介绍的工具和技术为构建可观测系统提供了基础,但请记住,可观测性是一个持续的旅程,会随着您的系统和组织需求而发展。