OpenTelemetry系列 - 第1篇 相关概念

2023-12-02 12:04

本文主要是介绍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

这篇关于OpenTelemetry系列 - 第1篇 相关概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445268

相关文章

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言