OpenTelemetry系列 - 第1篇 相关概念

目录

    • 一、背景
    • 二、概念
      • 2.1 Traces & Span
      • 2.2 Metrics
      • 2.3 Logs
      • 2.4 Baggage
      • 2.5 OTel
      • 2.6 OTLP
      • 2.7 Resources
      • 2.8 Instrumentation Scope
      • 2.9 Sampling
    • 三、核心组件

一、背景

OpenTelemetry是一个可观察性框架和工具包,旨在创建和管理遥测数据,如跟踪、指标和日志。至关重要的是,OpenTelemetry与供应商工具无关,这意味着它可以与各种各样的可观察性后端一起使用,包括Jaeger和Prometheus等开源工具,以及商业产品。OpenTelemetry是一个云原生计算基金会(CNCF)项目。

随着云计算、微服务架构和越来越复杂的业务需求的兴起,对可观察性的需求从未如此之大。可观察性是通过检查系统的输出来了解系统内部状态的能力。在软件的上下文中,这意味着能够通过检查遥测数据(包括跟踪、度量和日志)来了解系统的内部状态。

为了使一个系统可观察,它必须被检测。也就是说,代码必须发出跟踪、监控指标和日志。然后,测量的数据必须被发送到可观察性后端。

OpenTelemetry做了两件重要的事情:

  • 允许您拥有自己生成的数据,而不是被专有的数据格式或工具所困。
  • 允许你学习一套api和约定

这两者的结合使团队和组织在当今的现代计算世界中具有所需的灵活性。

OpenTelemetry是之前两个项目OpenTracing和OpenCensus合并的结果。这两个项目都是为了解决同一个问题而创建的:缺乏如何检测代码并将遥测数据发送到可观察性后端的标准。然而,两个项目都不能完全独立解决这个问题,所以两个项目合并形成OpenTelemetry,这样它们就可以结合各自的优势,真正提供一个统一的标准。

项目维度
OpenTracingtraces
OpenCensustraces, metrics
OpenTelemetrytraces, metrics, logs

OpenTelemetry不是一个像Jaeger、Prometheus或商业供应商那样的可观察性后端。OpenTelemetry专注于遥测数据的生成、收集、管理导出。数据的存储和可视化有意留给其他工具。

二、概念

2.1 Traces & Span

trace由一个或多个span组成。第一个span表示root span。每个root span代表一个从开始到结束的请求。
父级下面的span提供了请求期间发生的事情(或者组成请求的步骤)的更深入的上下文。
在这里插入图片描述

  • Tracer - trace由一个或多个span组成,表示一条完整的追踪链路,由traceId唯一标识。
  • Context Propagation
    • Context: trace_id, span_id, trace Flags, Trace State
    • Propagation
  • Span - 工作单元、操作 - 时间跨度(一段时间,起始时间)
    • Name
    • Parent span ID (empty for root spans)
    • Start and End Timestamps
    • Span Context - 跨Span关联关系
    • Attributes: key-value pairs, contain metadata - Span携带的信息,如下单span携带Attrs: userId, itemId, cartId…
      • key/value non-null,
      • key: string
      • value: string, boolean float, integer, or array of these values
      • 语义Attr(系统保留的通用属性):Semantic Attributes
    • Span Events - 时间点上的事件信息(记录日志)
    • Span Links
    • Span Status
      • Unset
      • OK
      • Error
    • Span Kind
      • Client/Server - 同步调用
      • Producer/Consumer - 异步队列、消息队列
      • Internal - 不跨进程的操作(内部处理)

2.2 Metrics

metric是对运行时捕获的服务的measurement度量。捕获测量数据measurement的时刻称为度量事件(metrics event),它不仅包括测量数据本身,还包括捕获测量数据的时间和相关的元数据。应用程序和请求度量是可用性和性能的重要指标。自定义指标可以洞察可用性指标如何影响用户体验或业务。收集到的数据可用于警报中断触发调度决策,以在高需求时自动扩展部署。

metric

  • 名称
  • 元数据(label或attr)
  • 测量数据measurement(如float 64)
  • 时间

Meter & Metric Instruments

  • Name
  • Kind
    • Counter - 累加计数
    • Asynchronous Counter - 异步计数
    • UpDownCounter - 升降计数器
    • Asynchoronous UpDownCounter - 异步升降计数器
    • Gauge - 实时数值(仪表)计数器
    • Histogram - 直方图,客户端聚合统计,例如请求延迟
  • Unit (optional)
  • Description (optional)
  • Views - 自定义指标输出、忽略、聚合、属性

聚合Aggregation
一段时间内分散于不同时间点的多个指标 ==>汇聚成==> 一个描述该时间段内的统计结果的指标

2.3 Logs

带有时间戳的信息,可内嵌到span或trace中,支持结构化(推荐)、非结构化,带有metadata。

对于traces和metrics,OpenTelemetry采用全新的设计方法,指定一个新的API,并在多个语言sdk中提供该API的完整实现。
OpenTelemetry处理日志的方法是不同的。因为现有的日志解决方案在语言和操作生态系统中广泛存在,OpenTelemetry充当了这些logs、tracing和metrics信号以及其他OpenTelemetry组件之间的“bridge”。事实上,由于这个原因,日志API被称为Logs Bridge API

  • Log Appender / Bridge
  • Logger Provider(日志框架作者需关注)
  • Logger(日志框架作者需关注)
  • Log Record Exporter
  • Log Record

日志记录表示对事件的记录。在OpenTelemetry中,日志记录包含两种字段:

  • 指定类型和含义的命名top-level字段
  • Resource和attributes任意值和类型的字段

top-level字段包括:

Field NameDescription
TimestampTime when the event occurred.
ObservedTimestampTime when the event was observed.
TraceIdRequest trace ID.
SpanIdRequest span ID.
TraceFlagsW3C trace flag.
SeverityTextThe severity text (also known as log level).
SeverityNumberNumerical value of the severity.
BodyThe body of the log record.
ResourceDescribes the source of the log.
InstrumentationScopeDescribes the scope that emitted the log.
AttributesAdditional information about the event.

2.4 Baggage

在OpenTelemetry中,Baggage是在span之间传递的上下文信息。它是一个与跟踪中的span上下文一起存在的键值存储,使得在跟踪中创建的任何span都可以访问值。
在这里插入图片描述

2.5 OTel

OpenTelemetry的缩写,OpenTelemetry的规范可参见:
https://opentelemetry.io/docs/specs/otel/

2.6 OTLP

The OpenTelemetry Protocol(OTLP)规范描述了遥测数据源、中间节点(如采集器和遥测后端)之间遥测数据的编码、传输和传递机制。OTLP是OpenTelemetry项目范围内设计的通用遥测数据传输协议。

OTLP定义了遥测数据的编码和用于在客户机和服务器之间交换数据的协议,该规范定义了如何在gRPCHTTP 1.1上实现OTLP传输,并规定了用于消息负载的Protocol Buffers schema定义。OTLP是一种请求/响应风格的协议:客户端发送请求,服务器用相应的响应进行应答。

OTLP协议可参见:
https://opentelemetry.io/docs/specs/otlp/

2.7 Resources

通过resource attrs表示产生telemetry的实体(如主机、Pod、Container等信息)

env OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production yourApp

2.8 Instrumentation Scope

插桩范围,即监控的代码范围,如请求URI、类名::方法名、框架名等。
在这里插入图片描述

2.9 Sampling

采样状态:

  • Sampled - 已采样
  • Not Sampled - 未采样

分类:

  • Head Sampling - 头部抽样是一种用于尽早做出抽样决策的抽样技术。抽样或删除跨度或跟踪的决定不是通过整体检查跟踪来做出的。例如consistent-probability-sampling基于概率的采样。

  • Tail Sampling - 尾部抽样是通过考虑跟踪中的全部或大部分跨度来决定对跟踪进行抽样的地方。尾部采样为您提供了基于从跟踪的不同部分派生的特定标准对跟踪进行采样的选项,这不是头部采样的选项。

如何使用Tail Sampling的一些例子包括:

  • 总是采样包含错误的跟踪
  • 基于总体延迟的采样跟踪
  • 根据迹线中一个或多个跨度上特定属性的存在或值对迹线进行采样;例如,对来自新部署的服务的更多跟踪进行采样
  • 根据一定的标准对迹线应用不同的采样率

Collector支持的采样处理器:

  • Probabilistic Sampling Processor
  • Tail Sampling Processor

三、核心组件

  • OTel规范
  • OTLP协议
  • Language SDKs - 支持不同语言的客户端实现
  • Library Ecosystem - 支持不同lib、框架的库生态系统
  • 自动Instrumentation组件 - 无需修改代码
  • Collector - 接收、处理、导出遥测数据的代理
  • 其他工具
    • OpenTelemetry Operator for Kubernetes
    • OpenTelemetry Helm Charts
    • community assets for FaaS
  • 40+ Vendors
    • Grafana Labs
    • Apache Skywalking
    • Jaeger
OrganizationOSSCom­mer­cialDistri­butionNative OTLPLearn more
Apache SkyWalkingYesNoNo Yes https://skywalking.apache.org/docs/main/v9.0.0/en/setup/backend/opentelemetry-receiver/
Fluent BitYesNoNo Yes https://docs.fluentbit.io/manual/pipeline/inputs/opentelemetry/
JaegerYesNoNo Yes https://www.jaegertracing.io/docs/1.47/getting-started/
TeletraceYesNoYes Yes https://docs.teletrace.io/
ClickHouseYesYesNo No https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/clickhouseexporter
Grafana LabsYesYesYes Yes https://grafana.com/oss/opentelemetry/
GreptimeDBYesYesYes Yes https://docs.greptime.com/user-guide/clients/otlp
HighlightYesYesYes Yes https://www.highlight.io/docs/general/company/open-source/contributing/adding-an-sdk/
observIQYesYesYes Yes https://docs.bindplane.observiq.com
qrynYesYesYes Yes https://qryn.metrico.in/#/support?id=tempo-api
SigNozYesYesYes Yes https://signoz.io
AppDynamics (Cisco)NoYesYes Yes https://docs.appdynamics.com/latest/en/application-monitoring/appdynamics-for-opentelemetry
Aria by VMware (Wavefront)NoYesNo Yes https://docs.wavefront.com/opentelemetry_tracing.html
AspectoNoYesYes Yes https://www.aspecto.io
AWSNoYesYes No https://aws-otel.github.io
AzureNoYesYes No https://docs.microsoft.com/azure/azure-monitor/app/opentelemetry-overview
CoralogixNoYesYes Yes https://coralogix.com/docs/opentelemetry/
CriblNoYesNo Yes https://docs.cribl.io/stream/sources-otel
DaoCloudNoYesYes Yes https://docs.daocloud.io/en/insight/06UserGuide/01quickstart/otel/otel/
DatadogNoYesYes Yes https://docs.datadoghq.com/tracing/setup_overview/open_standards
DynatraceNoYesYes Yes https://www.dynatrace.com/support/help/how-to-use-dynatrace/transactions-and-services/service-monitoring-settings/opentelemetry/
ElasticNoYesYes Yes https://www.elastic.co/guide/en/apm/get-started/current/open-telemetry-elastic.html
F5NoYesNo Yes https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/f5cloudexporter
Google Cloud PlatformNoYesNo Yes https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/googlecloudexporter
HeliosNoYesYes Yes https://gethelios.dev/
HoneycombNoYesYes Yes https://docs.honeycomb.io/getting-data-in/
InstanaNoYesNo Yes https://www.ibm.com/docs/en/obi/current?topic=apis-opentelemetry
ITRSNoYesYes Yes https://docs.itrsgroup.com/docs/geneos/data-collection/opentelemetry/current/opentelemetry.html
KloudFuseNoYesNo Yes https://kloudfuse.atlassian.net/wiki/spaces/EX/pages/753860609/APM#Sending-traces-to-Kloudfuse-data-plane%3A
KloudMateNoYesNo Yes https://docs.kloudmate.com/using-opentelemetry-collector
LogicMonitorNoYesYes Yes https://www.logicmonitor.com/support/tracing/getting-started-with-tracing
LogScale by Crowdstrike (Humio)NoYesNo Yes https://library.humio.com/falcon-logscale/log-shippers-opentelemetry.html
Logz.ioNoYesYes No https://docs.logz.io/shipping/tracing-sources/opentelemetry.html#overview
LumigoNoYesYes Yes https://docs.lumigo.io/docs/opentelemetry
New RelicNoYesNo Yes https://newrelic.com/solutions/opentelemetry
Observe, Inc.NoYesYes Yes https://docs.observeinc.com/en/latest/content/integrations/otel/opentelemetry.html
ObserveAnyNoYesNo Yes https://www.observeany.com/learn/opentelemetry-receiver
OracleNoYesNo Yes https://docs.oracle.com/en-us/iaas/application-performance-monitoring/doc/configure-open-source-tracing-systems.html#GUID-4D941163-F357-4839-8B06-688876D4C61F
SentryNoYesYes No https://sentry.io/for/opentelemetry/
Sentry SoftwareNoYesYes Yes https://www.sentrysoftware.com/products/hardware-sentry-opentelemetry-collector.html
ServiceNow Cloud Observability (Lightstep)NoYesYes Yes https://github.com/lightstep?q=launcher
ServicePilotNoYesNo Yes https://www.servicepilot.com/en/doc/apm#opentelemetry
SolarWindsNoYesYes Yes https://documentation.solarwinds.com/en/success_center/observability/default.htm#cshid=third-otel-integration
SplunkNoYesYes Yes https://docs.splunk.com/Observability/gdi/opentelemetry/opentelemetry.html
Sumo LogicNoYesYes Yes https://help.sumologic.com/docs/send-data/opentelemetry-collector/
TelemetryHubNoYesNo Yes https://app.telemetryhub.com/docs
TingYunNoYesNo Yes https://wukongdoc.tingyun.com/apm/userguide/deploy_manage/opentelemetry.html
TraceloopNoYesNo Yes https://www.traceloop.com
UptraceNoYesYes Yes https://uptrace.dev

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Monocle 3 | 太牛了!单细胞必学R包!~(五)(差异分析之聚类比较与模块鉴定)

1写在前面 准备出去玩耍了,今天就不废话了,直接上主题吧。🥳 monocle3做差异分析也是牛的一米!~🌾 2用到的包 rm(list ls())library(tidyverse)library(monocle3) 3示例数据 我们还是载入之前用过的一个数据集吧。&am…

HarmonyOs 4 (三) ArkTS语言

目录 一 认识ArkTs语言1.1 ArkTs1.2 基本结构 二 基本语法2.1 声明式UI2.1.1 创建组件2.1.1.1 无参数2.1.1.2 有参数2.1.1.3 组件样式2.1.1.4 组件方法2.1.1.5 组件嵌套 2.1.2 自定义组件2.1.2.1 基本结构2.1.2.2 成员函数/变量2.1.2.3 自定义组件的参数规定2.1.2.4 Build函数2…

高效转码工具Compressor for Mac,让视频处理更轻松

在现如今的数字时代,视频内容已经成为人们生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴,还是在工作中制作专业的营销视频,我们都希望能够以高质量、高效率地处理和传输视频文件。而Compressor for Mac作为一款强大的视频转码工具…

vivado实现分析与收敛技巧6-策略建议

典型时序收敛策略需运行大量实现策略并选取其中最佳的策略以供在实验室内应用。 ML 策略同样可选 , 且只需您运行3 项策略即可达成类似的 QoR 收益。这些策略使用机器学习来检验布线后设计的各项功能特性 , 以便预测相同设计上不同策略的性能。在 repo…

unity3d c#代码变更文本颜色,可选多参数,委托invoke延迟调用函数

[SerializeField] private Text warning; Color color ;warningOpen("注册成功", closeTime: 1.5f);warningOpen("登录成功", "green", 1.5f);public void warningOpen( string warn, string tmp"red", float closeTime5f ){warnin…

常用装备生产ERP有哪几种?有哪些作用

装备生产业务涉及原材料采购、车间排产、班组生产评估、派工单、接单报价、委外发料、库存盘点、设备台账、图纸设计等诸多环节,而各环节数据的共享问题普遍存在于装备生产企业内部,同时也直接影响企业的生产效率和整体效益等。 企业外部环境的变化和行…

探索意义的深度:自然语言处理中的语义相似性

一、说明 语义相似度,反应出计算机对相同内容,不同表达的识别能力。因而识别范围至少是个句子,最大范围就是文章,其研究方法有所区别。本文将按照目前高手的研究成绩,作为谈资介绍给诸位。 二、语义相似度简介 自然语言…

特种电源模块怎么测试?用电源模块测试系统测试需要哪些流程?

什么是特种电源? 特种电源即特殊种类的电源,是能够为各种特殊场合或应用提供稳定、可靠电力的电源设备。特种电源的特殊性主要体现在输出电压特别高,输出电流特别大,对稳定度、动态响应及纹波要求特别高等。 根据应用场景和功能,…

什么是Anaconda

Anaconda的安装也很方便。打开这个网站Anaconda下载,然后安装即可。 Anaconda可以帮助我们解决团队之间合作的包依赖管理问题。在没有使用Anaconda之前,如果你的Python程序想让你的同事运行,那么你的同事可能会遇到很多包依赖问题&#xff0…

景联文科技数据标注平台助力AI数据实现价值最大化

随着人工智能技术不断进步,应用领域不断拓宽,对于高质量、大规模标注数据的需求也在不断增加。 数据标注是人工智能行业的基石。机器学习需要运用海量的有效数据来做支撑,而这些数据就需要我们的标注员对其进行分析和处理,想要得到…

系列十七、理解SpringBoot中的starter 自定义一个starter

一、概述 作为后端Java程序员,基本上公司的日常开发都是基于SpringBoot进行的,我们使用SpringBoot也是沉醉于它的各种各样的starter带给我们的便利,这些starter为我们带来了众多的自动化配置,通过这些自动化配置,我们可…

c语言-快速排序

目录 一、实现快速排序三种方法 1、hoare法 2、挖坑法 3、双指针法 4、快速排序的优化 5、测试对比 结语: 前言: 快速排序作为多种排序方法中效率最高的一种,其底层原理被广泛运用,他的核心思想与二叉树结构中的递归逻辑相似…

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容,然后让这个内容变成你自己的私有知识库,并且还可以搭建一个基于私有知识库的问…

没有预装Edge浏览器的Windows系统安装Edge正式版的方法,离线安装和在线安装

一、在线安装 没有预装Edge浏览器的Windows系统安装Edge正式版的方法 二、离线安装 进入到下面这个目录 C:\Program Files (x86)

【Web】NISACTF 2022 个人复现

目录 ①easyssrf ②babyupload ③ level-up ④bingdundun~ 明天就新生赛了,练套题保持下手感吧 (文章只选取了一部分) ①easyssrf 输入/flag 输入file:///fl4g 访问/ha1x1ux1u.php ?filephp://filter/convert.base64-encode/resource/…

C++利剑string类(详解)

前言:大家都知道在C语言里面的有 char 类型,我接下来要讲的 string 类功能是使用 char 类型写的类,当然这个是C官方写的,接下来我们将会学会使用它,我们会发现原来 char 这种类型是还能这么好用,授人以…

【VerilogVCS仿真_2023.11.15】

HDL:硬件描述语言,并发,时序RTL:寄存器传输级语言 Verilog和VHDL的区别:VHDL侧重于系统级描述——系统级设计人员所采用,Verilog侧重于模块行为的抽象描述——电路级设计人员 前端:系统级、算法…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区:先写一个.c文件如下: 我们执行一下这个程序时&…

【产品应用】一体化伺服电机在摆轮分拣机中的应用

随着物流和制造业的快速发展,分拣机的应用越来越广泛。摆轮分拣机作为一种常见的分拣设备,具有高效、准确、灵活等特点,被广泛应用于各类物流分拣场景。而一体化伺服电机在摆轮分拣机中的应用,为分拣机的性能提升和优化提供了新的…

专业视频剪辑利器Final Cut Pro for Mac,让你的创意无限发挥

在如今的数字时代,视频内容已经成为人们生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴,还是在工作中制作专业的营销视频,我们都希望能够以高质量、高效率地进行视频剪辑和制作。而Final Cut Pro for Mac作为一款专业级的视频剪辑软…