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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个用c#瞎写的sftp工具

0.下载地址 https://wwus.lanzouj.com/iOZUv1gkgpze 密码:123456 1.能进行单个和批量下载, 没有弄上传 2.速度奇差,可能是某些地方没弄好.有一定的进度显示,但是不太准. 3.很多地方没弄好,有能力的自己弄一下 4.在app.config文件配置sftp

深度学习第4天:感知机模型

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 ​ 文章目录 感知机模型介绍 神经网络搭建感知机 结构 准备训练数据 感知机的损失函数与优化方法 测试结果 完整代码 多层感知机 结语 感知机模…

火车头插件-最全火车头伪原创图片存储等插件

火车头插件。作为一个功能强大的工具,火车头插件以其众多特色引起了广大用户的关注。而其中,火车头采集器更是备受瞩目。我们将分享火车头插件的安装教程,还会深入了解火车头伪原创插件的应用。 火车头插件安装教程 我们来安装火车头插件&a…

JavaScript 内存泄漏的检测与防范:让你的程序更稳定

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

HT7713 3A同步降压变换器 快速瞬态响应

HT7713 是一款 3A 降压转换器,具有Z少的外部元件和低关断电流。HT7713具有快速瞬态响应的特点,输出电容器采用低 ESR (聚合物)或超低 ESR(陶瓷),无需外部补偿。 HT7713在轻载时以脉冲跳跃模式工…

Spring Security 6.x 系列(8)—— 源码分析之配置器SecurityConfigurer接口及其分支实现

一、前言 本章主要内容是关于配置器的接口架构设计,任意找一个配置器一直往上找,就会找到配置器的顶级接口:SecurityConfigurer。 查看SecurityConfigurer接口的实现类情况: 在 AbstractHttpConfigurer 抽象类的下面可以看到所有…

HT81298 集成免滤波器调制D类音频功放

HT81298是一款内置升压的立体声D类音频功率放大器,HT81298内部集成免滤波器调制技术, 能够直接驱动扬声器,内置的关断功能使待机 电流Z小化,还集成了输出端过流保护、片内 过温保护、输入电源欠压异常保护、升压电压 过压保护等功…

Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

Guns快速开发平台 Shiro反序列化漏洞复现

0x01 产品简介 Guns是一个现代化的 Java 应用开发框架,基于主流技术Spring Boot 2 Vue3,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本。 0x02 漏洞概述 Guns v5.1 及之前的版本存在 shiro 反序列化漏洞,…

1.0 十大经典排序算法

分类 算法 本系列算法整理自:https://github.com/hustcc/JS-Sorting-Algorithm 同时也参考了维基百科做了一些补充。 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序&#…

Google Chrome 下载 (离线版)

1 访问网址 Google Chrome 网络浏览器 2 点击 下载Chrome 3 直接运行 ChromeStandaloneSetup64.exe 其他: ####################### 谷歌浏览器 (Google Chrome) 最新版离线安装包下载 https://www.iplaysoft.com/tools/chrome/#google_vignette Google Chrome …

SpringBoot整合Activiti7——消息事件(十)

文章目录 消息事件开始事件中间事件边界事件代码实现xml文件测试流程流程执行步骤 消息事件 消息事件只有一个接收者&#xff0c;消息具有名字与载荷。 信息会储存在 act_ru_event_subscr 表中。 <!-- 定义消息 --> <message id"msgId1" name"msgName…

触控板绘画工具Inklet mac功能介绍

Inklet mac是一款触控板绘画工具&#xff0c;把你的触控板变成画画的板子&#xff0c;意思是&#xff0c;你点在触控板的哪里&#xff0c;鼠标就会出现载相应的地方。例如&#xff0c;但你把手指移动到触控盘左下角&#xff0c;那么鼠标也会出现在左下角&#xff0c;对于用户而…

富文本内容回显

<el-card><h7>正文内容</h7><template><div v-html"inputForm.bulletinData"></div></template></el-card> 通过 v-html 来回显数据

MidJourney笔记(6)-Niji模式

Niji模式 回顾一下,在讲解settings命令时,我们可以看到一个Niji字眼。 而且是在Midjourney V4之后才有的,那Niji到底是什么? Niji是MidJourney中用于绘制二次元/动漫风格的模型,那Niji的V4和V5有什么区别呢?

Docker Compose及Docker 知识点整理

目录 1、Docker Compose 简介 2、为什么要使用Docker Compose 3、Docker Compose安装使用&#xff08;Linux&#xff09; 3.1 下载 3.2 mkdir docker 文件夹目录 3.3 上传docker-compose到docker文件夹 3.4 移动到 /usr/local/bin 目录下 3.5 添加执行权限 3.6 修改文…

spring boot 3.2.0 idea从零开始

spring boot 3.2.0 idea从零开始 最新的spring initilizer 不再支持低版本java&#xff0c;只能选择17、21 。 我也被迫尝试下最新版本的java。 jdk下载地址 自定义好artifact和group之后点击下一步。 在这里选择需要的组件&#xff0c;我准备做web项目所以只选择spring web …

阿里云开源通义千问720亿参数模型,性能超越大部分商用闭源大模型

12月1日&#xff0c;阿里云举办通义千问发布会&#xff0c;开源通义千问720亿参数模型Qwen-72B。Qwen-72B在10个权威基准测评创下开源模型最优成绩&#xff0c;成为业界最强开源大模型&#xff0c;性能超越开源标杆Llama 2-70B和大部分商用闭源模型。未来&#xff0c;企业级、科…

周报:浅谈对豆瓣网页实战的注意事项

制作整体网页时HTML代码和CSS代码的常用处理方法&#xff1a; 分开HTML代码和CSS代码&#xff0c;专门制作一个CSS文件专门来放置css代码&#xff0c;css文件里一般有作者样式(XXX.css)和通用样式(common.css)。这样会使代码更易维护&#xff0c;且整齐美观。 写代码前的注意…

用100ask 6ull配合 飞凌 elf1的教程进行学习的记录

启动方式 百问网 elf1: 固件 emmc-otg 串口 网络 改eth0, 网线接在右边的网口eth2上