如果您从事软件开发、 SRE或DevOps工作,您可能听说过可观察性、遥测和跟踪等术语。这些概念对于理解应用程序在生产环境中的行为至关重要,并且它们是现代软件开发实践的重要组成部分。

您可能还听说过在可观测性方面提到过 OpenTelemetry。在本文中,我们将介绍 OpenTelemetry 101:它是什么、它如何工作以及为什么它对现代软件开发很重要。您将获得有关如何开始使用 OpenTelemetry 及其关键组件的高级概述。

本文翻译自:https://www.dynatrace.com/news/blog/opentelemetry-101-guide-for-enthusiasts/

什么是 OpenTelemetry?

OpenTelemetry是一个开源可观测性项目,包含一组 API、库、代理和埋点标准。使用 OpenTelemetry,开发人员可以收集和处理来自应用程序、服务和系统的遥测数据。

为了理解这意味着什么,我们首先看一下两个核心概念:可观测性和遥测。

可观测性

可观测性是通过分析系统生成的数据(例如日志、指标和跟踪)来确定系统运行状况的能力。

与传统监控不同,传统监控侧重于在没有整体背景的情况下观察系统运行状况的各个指标,可观察性更深入,分析遥测数据以在更广泛的系统背景下全面了解系统的内部状态。

Telemetry 遥测

遥测涉及收集和分析来自分布式来源的数据,以深入了解系统的运行情况。遥测数据主要分为三种类型:

  • 指标。跟踪系统随时间变化的性能和运行状况的定量测量。指标通常会聚合并存储在时间序列数据库中,以用于监控和警报目的。
  • 日志。由应用程序和基础设施组件生成的基于文本的事件和活动记录。日志用于调试、故障排除和审核目的。
  • 追踪。通过分布式系统的请求流的详细记录,包括计时信息和上下文数据。跟踪用于性能分析、延迟优化和根本原因分析。

OpenTelemetry 101

在此背景下,OpenTelemetry 的统一的平台无关 API、库、代理和埋点标准集允许开发人员收集、处理和可视化来自应用程序的遥测数据。开放遥测协议 (OTLP)在此框架中发挥着关键作用,它标准化了系统格式化和传输遥测数据的方式,确保数据可互操作和高效传输。反过来,这种标准化通过集成数据以获得整体视角并实现主动问题解决,从而实现全面的可观察性。

总体而言,OpenTelemetry 具有以下优势:

  • 标准化数据收集。它通过提供用于收集、处理和导出指标、日志和跟踪的标准化工具和 API 来增强可观察性。
  • 互操作性和供应商中立性。一组通用的 API 和数据格式可确保不同工具和平台之间的互操作性。这种互操作性使组织能够避免供应商锁定,并在多个可观察性工具之间切换或集成,而无需重新检测其应用程序。
  • 增强上下文和相关性。它丰富了遥测数据的相关属性,有助于指标、日志和跟踪的关联,以全面了解系统行为。
  • 与现有工具集成。它与现有的可观测性工具集成,增强数据收集和分析,同时提供标准化数据格式,以实现更深入的洞察并提高互操作性。例如,使用日志聚合工具的公司可以使用 OpenTelemetry 来获取额外的跟踪数据,而无需中断其设置,从而实现从遗留系统到现代可观测性的逐步平稳过渡。
  • 面向未来的可观察性。它通过充满活力的社区的贡献和主要科技公司的支持不断发展,这确保了它与最新的行业标准、技术进步和最佳实践保持一致。

OpenTelemetry 组件

OpenTelemetry 由几个关键组件组成,包括跟踪器、埋点库和 OpenTelemetry Collector。

追踪和埋点

OpenTelemetry 中的跟踪器跟踪应用程序不同部分的请求流,类似于跟踪包裹从一个邮政中心到另一个邮政中心。他们记录数据通过服务的过程,以帮助确定延迟或问题发生的位置。

埋点涉及向应用程序添加代码以收集跟踪信息,类似于在商店中安装安全摄像头以监控客户的移动和行为。根据应用程序的语言和框架,您将使用许多不同的埋点库。

跟踪器和埋点库都是收集和记录应用程序性能见解的重要组件。当跟踪主动记录并跟踪应用程序中的数据路径时,埋点库提供了必要的代码,可以轻松地将这些跟踪器和其他遥测数据收集机制集成到应用程序中。

指标和日志

指标是衡量应用程序性能的数字数据点。将指标视为应用程序的生命体征,例如健康检查中的心率或血压。它们会告诉您有多少用户正在访问该服务、请求需要多长时间或应用程序使用了多少内存等信息。

日志是应用程序内发生的事件的详细记录。这类似于记日记,记下一天中的每一个重要事件。日志通过记录错误、事务和其他重要操作来为应用程序实现此目的。它们提供上下文和详细信息,帮助您在出现问题时诊断问题。

OpenTelemetry Collector

OpenTelemetry Collector 是一种集中式服务,用于收集应用程序的遥测数据(指标、日志和跟踪)。它就像一个邮政分拣中心,从不同的地方收集邮件,进行整理,然后将其发送到正确的目的地。收集器可以处理这些数据,过滤掉不必要的信息,并将有用的见解发送到各种监控和分析工具。

监控、可观测性领域的内容确实极为驳杂,如果想找靠谱的供应商来建设整套体系,欢迎和我们交流产品技术。我们专注在这个领域十年有余了。

OpenTelemetry 入门

OpenTelemetry 入门涉及为您的编程语言和环境安装适当的库和代理。 OpenTelemetry 支持多种语言,包括 Java、Python、JavaScript 等,使其可供大多数应用程序使用。受支持的框架和语言的完整列表可以在 OpenTelemetry 注册表 中找到。

安装过程通常包括将 OpenTelemetry 依赖项添加到项目中并初始化 OpenTelemetry 软件开发工具包 (SDK)。 OpenTelemetry 网站提供每种语言的详细文档,指导您完成设置环境的必要步骤。

为您的应用程序配置 OpenTelemetry

安装库后,下一步是配置 OpenTelemetry 以从应用程序收集遥测数据。这涉及设置工具来捕获指标、日志和跟踪。您可以通过向应用程序添加特定代码片段来手动设置检测,也可以使用 OpenTelemetry 自动检测代理自动设置检测。

您还需要配置导出器,它确定 OpenTelemetry 将其收集的数据发送到何处进行分析。常见的导出器包括用于指标的 Prometheus、用于跟踪的 Jaeger 和用于日志的 Elasticsearch。配置文件或环境变量通常用于设置这些参数,从而可以轻松地根据您的特定需求调整设置。

根据您的使用案例,您可以自定义采样率、过滤规则和其他设置以优化数据收集和分析。 OpenTelemetry 提供了大量的文档和示例,可帮助您微调配置以实现最大效率。

实施 OpenTelemetry 的最佳实践

为了最大限度地发挥 OpenTelemetry 的优势,请遵循下面概述的最佳实践。

从小规模和渐进开始

从试点项目或单个服务开始,以验证您的设置并了解正在收集的数据。这种方法允许您测试和完善配置、管理实施复杂性并向利益相关者展示价值。

关注相关遥测数据

通过关注特定用例和问题,确保您收集正确类型的遥测数据以实现有效的可观察性:

  • 确定关键指标。捕获关键性能指标,例如请求延迟、错误率和资源使用情况。
  • 将数据置于情境中。向遥测数据添加相关上下文,例如服务名称、环境标签和自定义属性。
  • 采用高效抽样。使用跟踪采样来管理数据量,而不会丢失重要的见解。

确保安全和数据隐私

为了避免通过遥测数据泄露敏感信息,您应该确保遥测数据在传输过程中和静态时使用 TLS 等协议进行加密。您还必须实施强大的访问控制,以限制谁可以查看和管理遥测数据,并在发送遥测数据之前对敏感信息进行匿名或编辑。这些做法不仅可以保护敏感信息,还可以保持对数据隐私法规的遵守。

实施高效的采样技术

实施有效的采样技术来管理数据量。例如,您可以使用跟踪采样来捕获具有代表性的跟踪子集,并收集足够的信息来有效地诊断问题。

源头聚合指标

通过在源处聚合指标来减少数据量和处理开销。在应用程序内或边缘聚合指标将最大限度地减少发送到可观察性后端的数据量。

利用现有工具

将 OpenTelemetry 与现有日志记录和跟踪工具集成,以增强您当前的监控基础设施。 OpenTelemetry 可以补充和扩展您现有的可观测性工具,以确保统一且有效的策略。

OpenTelemetry 用例

OpenTelemetry 有多个用例,包括:

  • 分布式系统的监控和故障排除。 OpenTelemetry 通过捕获跨多个服务的请求的详细跟踪,提供分布式系统中的端到端可见性。例如,如果用户在电子商务应用程序中遇到响应时间缓慢的情况,OpenTelemetry 可以通过各种微服务跟踪请求,以查明导致延迟的服务。这种可视性简化了故障排除,并使 IT 团队能够快速识别和解决问题,从而最大限度地减少停机时间并提高系统可靠性。
  • 性能优化。通过收集和分析指标和跟踪,OpenTelemetry 有助于识别系统效率低下的地方。例如,如果应用程序遇到高延迟,OpenTelemetry 可以显示特定数据库查询执行时间过长。这种数据驱动的方法使 IT 团队能够优化性能缓慢的组件,从而提高应用程序效率和用户体验。
  • 与现有工具集成。 OpenTelemetry 与现有的可观测性工具无缝集成,将遥测数据导出到监控和分析平台。例如,使用 Prometheus 进行监控的组织可以合并 OpenTelemetry 来获取额外的跟踪数据,以丰富其可观测性策略。这种互操作性使组织能够利用全面的遥测数据增强其当前的监控基础设施,从而确保统一且有效的可观测性策略。

OpenTelemetry 的未来

OpenTelemetry 正在迅速发展,不断更新、增强,以及充满活力的开发人员和组织社区的贡献,更重要的是,它不断得到更广泛的采用。

了解 OpenTelemetry 最新动态的最佳方式是遵循该项目的公共路线图,其中概述了即将推出的功能、改进和计划。

也就是说,最令人兴奋的功能之一将是客户端检测项目,该项目将使开发人员能够真正了解其应用程序延迟和性能的端到端可见性。通过传统的监控和日志记录,您通常会获得应用程序性能的孤立视图,但这种开发将使您能够从浏览器交互一直到系统后端查看应用程序性能。

OpenTelemetry 101:灵活、可定制的遥测收集,可实现全面的可观测性

OpenTelemetry 是组织创建、收集和自定义指标、跟踪和日志的标准方法,以便更全面地了解系统行为。使用这种标准化的遥测数据方法,开发人员可以更好地观察其系统,并且可以通过持续分析系统行为并在异常问题出现之前识别异常来变得更加主动。

此外,由于 OpenTelemetry 是开源的,因此您可以避免供应商锁定。当开发人员创建新的工具和库时,这种供应商中立性使得 OpenTelemetry 能够面向未来。最重要的是,它是一种跨各种可观察性后端进行分析的有效方法。

总结

OpenTelemetry 是一个开源项目,旨在标准化遥测数据的收集和处理。通过提供一组 API、库和代理,OpenTelemetry 使开发人员能够收集、处理和可视化来自应用程序、服务和系统的遥测数据。这种标准化方法提供了一种灵活、可定制的方法,可以实现全面的可观察性,从而帮助开发人员更好地了解其系统的行为。

OpenTelemetry 101:面向 IT 领导者和爱好者的非技术指南的更多相关文章

  1. 面向中国 Azure 开发者发布开源解决方案指南

     发布于 2014-05-23 作者 刘 天栋 Azure 是一个开放.灵活的云平台,可支持大量且不断增长的开源应用程序.框架和语言.微软及微软开放技术通过与全球及中国本地的开源社区不懈地合作,将 ...

  2. 进阶篇:3)面向制造的设计DFM

    本章目的:正确认识面向制造的设计-DFM. 1.DFM概念 DFM有两种描述是作者比较认可的. ①面向制造的设计(design for manufacturing简称DFM):指产品设计需要满足产品制 ...

  3. 进阶篇:4)面向装配的设计DFA总章

    本章目的:理解装配的重要性,明确结构工程师也要对装配进行设计. 1.基础阅读 ①进阶篇:1)DFMA方法的运用: ②需要一台FDM3d打印机:请查看 基础篇:8)结构设计装备必备: 2.为什么要学习D ...

  4. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  5. CSSOM View Module

    就在8月份,也就是上次gf大姨妈来的时候,W3C出炉了CSSOM视图模块(CSS Object Model View)草案.CSSOM视图模块(CSSOM View Module)定义了一些 API, ...

  6. Spark学习资料共享

    链接相关 课件代码:http://pan.baidu.com/s/1nvbkRSt 教学视频:http://pan.baidu.com/s/1c12XsIG 这是最近买的付费教程,对资料感兴趣的可以在 ...

  7. [转] CSSOM视图模式(CSSOM View Module)相关整理

    以下就是一些API属性的相关内容,包括兼容性,使用,测试等. 一.Window视图属性 这些属性可以hold住整个浏览器窗体大小.微软则将这些API称为“Screenview 接口”.包括:inner ...

  8. Web安全学习图径——系列课程推荐

    本文作者:i春秋作家 大哥哥团长 说到Web安全必须要了解Web方面的一些基础知识做为铺垫的去的去学习这门技术,因为不是人人都可以直接先渗透在进行编程等方面学习的.所以为了更好的入门的Web安全必须要 ...

  9. 深度树匹配模型(TDM)

    深度树匹配模型(TDM) 算法介绍 Tree-based Deep Match(TDM)是由阿里妈妈精准定向广告算法团队自主研发,基于深度学习上的大规模(千万级+)推荐系统算法框架.在大规模推荐系统的 ...

  10. 如何为应用选择最佳的FPGA(下)

    如何为应用选择最佳的FPGA(下) How to select an FPGA board? FPGA板的选择在很大程度上受FPGA本身的影响,也受整个板的特性和性能的影响.们已经在上面的章节中讨论了 ...

随机推荐

  1. CSS – 实战 Spacing & Layout

    前言 这篇想整理一下在网页开发中, Spacing (间距) 和 Layout 排版是如果被处理的. Spacing 介绍 东西密密麻麻会给人一种很恐怖的感觉. 只要加上一点空间 (间距), 整体感觉 ...

  2. CSS – 冷知识 (新手)

    <img> extra 4px at the bottom 参考: Extra 4px at the bottom of html <img> The mysterious 4 ...

  3. CSS – z-index

    介绍 z-index 是用来设置 element 层次高低的 (当 element 重叠的时候) 参考: 4 reasons your z-index isn't working (and how t ...

  4. [Tkey] [IOI 2018] werewolf

    注意看,我耗时五个小时 AK 了 IOI 题意 给你一个图,每次给定若干询问 \((s,t,l,r)\),请你完成下述要求: 定义 \(S\) 为到 \(s\) 的最短路径不小于 \(l\) 的点构成 ...

  5. Android 基于 Choreographer 的渲染机制详解

    本文介绍了 App 开发者不经常接触到但是在 Android Framework 渲染链路中非常重要的一个类 Choreographer.包括 Choreographer 的引入背景.Choreogr ...

  6. Android Qcom USB Driver学习(十三)

    DPM Device Policy Manager deals with the USB Power Delivery resources used by one or more ports on t ...

  7. 小程序的三大API

    小程序的API有宿主环境提供的 : ps:浏览器的定义对象是 window 而微信中的顶级对象是wx :都是不用声明就能调用 : 1. 事件监听 以on开头,监听事件的触发 eg:onWindowRe ...

  8. 1. 说一下 vue 的父子传参 ?

    主要实现的方式: 1. 第一种方法 ,在子组件标签使用自定义属性="参数"和自定义事件,在子组件内使用 props 接受自定义属性 :如果子组件要修改参数,不能直接修改,因为 vu ...

  9. kotlin更多语言结构——>反射

    类引用 最基本的反射功能是获取 Kotlin 类的运行时引用.要获取对静态已知的 Kotlin 类的引用,可以使用 类字面值 语法 val c = MyClass::class 请注意,Kotlin ...

  10. 快速部署和测试ingress-nginx:1.9.6

    点击查看代码 下载deploy文件 https://github.com/kubernetes/ingress-nginx/blob/controller-v1.9.6/deploy/static/p ...