当前位置: 首页 > ai >正文

软件系统的可观测性 Observability

软件系统的 Observability(可观测性) 是指通过收集、分析和理解系统的运行状态数据,从而能够快速诊断问题、优化性能并理解系统行为的能力。它强调在复杂系统中(尤其是分布式架构或云原生环境)主动探索未知问题的能力,而不仅仅是监控已知指标。


Observability 的核心组成

通常基于三大核心数据源(称为“可观测性三大支柱”):

组件作用典型工具/技术
Metrics(指标)量化系统状态的数值数据(如 CPU 使用率、请求延迟、错误率)。Prometheus, Datadog, AWS CloudWatch
Logs(日志)记录系统事件的文本数据(如错误信息、用户操作记录)。ELK Stack(Elasticsearch, Logstash, Kibana), Splunk
Traces(链路追踪)记录请求在分布式系统中的完整流转路径(如微服务调用链)。Jaeger, Zipkin, OpenTelemetry

Observability vs. Monitoring(监控)

维度Monitoring(监控)Observability(可观测性)
目标关注已知问题,验证系统是否按预期运行。主动探索未知问题,理解复杂系统的行为。
数据范围基于预设的指标和阈值(如 CPU > 90% 触发告警)。结合指标、日志、追踪等多元化数据,提供上下文关联。
适用场景稳定、可预测的系统(如传统单体应用)。动态、复杂的系统(如微服务、Serverless 架构)。
灵活性被动响应,依赖预先定义的规则。主动探索,支持动态查询和关联分析。

为什么需要 Observability?

  1. 应对系统复杂性
    现代系统(如微服务、容器化架构)依赖众多组件,问题可能跨服务、跨节点发生,需通过链路追踪和上下文日志快速定位根源。

  2. 提升故障排查效率
    传统监控可能无法覆盖所有异常场景,Observability 允许通过数据关联(如“某时段错误率上升” + “相关日志” + “调用链瓶颈”)快速定位问题。

  3. 支持主动优化
    通过分析性能指标和用户行为数据,发现潜在瓶颈(如数据库慢查询、API 响应延迟)并优化。

  4. 适应动态环境
    在云原生环境中(如 Kubernetes),服务实例动态扩缩容,Observability 提供实时、细粒度的运行状态视图。


Observability 的实践要点

  1. 统一数据采集
    使用标准化协议(如 OpenTelemetry)统一收集指标、日志和追踪数据,避免工具碎片化。

  2. 上下文关联
    通过唯一标识(如 Trace ID)将同一请求的指标、日志和追踪关联,还原完整上下文。

  3. 分层监控策略

    • 基础设施层:CPU、内存、网络等硬件指标。
    • 应用层:服务吞吐量、错误率、JVM 状态等。
    • 业务层:订单量、用户活跃度等关键业务指标。
  4. 可视化与告警
    借助工具(如 Grafana)将数据可视化,并设置智能告警(如基于异常检测算法,而非固定阈值)。

  5. 成本控制
    避免过度收集数据(如全量日志),采用采样(Sampling)和聚合(Aggregation)减少存储与分析开销。


典型 Observability 技术栈

  1. 开源方案

    • Metrics: Prometheus + Grafana
    • Logs: ELK Stack(Elasticsearch + Logstash + Kibana)
    • Traces: Jaeger + OpenTelemetry
  2. 商业平台

    • Datadog, New Relic, Splunk(全功能集成)
    • AWS X-Ray(追踪) + CloudWatch(指标/日志)
  3. 云原生集成

    • Kubernetes 监控:Prometheus Operator + kube-state-metrics
    • 服务网格(如 Istio):内置指标和追踪支持

总结

  • Observability 是运维能力的进化:从“监控已知”到“探索未知”,适应现代系统的复杂性。
  • 核心价值:加速故障排查、优化系统性能、提升用户体验。
  • 实施关键:整合指标、日志、追踪,通过工具链和标准化协议实现数据关联与分析。
http://www.xdnf.cn/news/4468.html

相关文章:

  • 【AI】模型与权重的基本概念
  • 《Python星球日记》 第45天:KNN 与 SVM 分类器
  • 从电话到V信语音:一款App实现全场景社交脱身
  • 28.成功解决i2c_transfer返回-6的问题并linux驱动mpu6050(适合一切linux学习者)
  • OpenCV 中用于背景分割(背景建模)的一个类cv::bgsegm::BackgroundSubtractorCNT
  • 【HarmonyOS 5】鸿蒙中常见的标题栏布局方案
  • Oracle 开窗函数
  • 高组装导轨的特点
  • Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
  • 《Python星球日记》 第43天:机器学习概述与Scikit-learn入门
  • 旧版谷歌浏览器Chrome v116.0.5845.141下载
  • 38.机壳间接缝的处理
  • 27、移除元素
  • 加速页面加载的全流程优化策略
  • 日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)
  • 【Linux 系统调试】Linux 调试工具strip使用方法
  • Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系
  • C 语言网络编程问题:E1696 无法打开 源 文件 “sys/socket.h“
  • ubuntu安装Go SDK
  • linux 怎么把trex-core-2.65用 crosstool-ng-1.27.0/编译
  • chili调试笔记13 工程图模块 mesh渲染 mesh共享边显示实现
  • FlyEnv:优雅直观的跨平台开发环境管理工具
  • VUE+ElementUI 使用el-input类型type=“number” 时,取消右边的上下箭头
  • Nginx 搭建支持多版本和前端路由的静态网站
  • 高斯牛顿法 梯度下降法 LM算法的区别
  • 【ARM AMBA AHB 入门 3 -- AHB 总线介绍】
  • Postman中https和http的区别是什么?
  • Linux 下MySql主从数据库的环境搭建
  • 什么是回调 钩子 Hook机制 钩子函数 异步编程
  • 【Prometheus】业务指标与基础指标的标签来源差异及设计解析