首页 > 其他分享 >一文Get火热的OpenTelemetry 架构

一文Get火热的OpenTelemetry 架构

时间:2023-03-06 22:36:23浏览次数:34  
标签:架构 遥测 Get Collector OpenTelemetry API 数据 插桩

OpenTelemetry 简称 OTel, 是 CNCF ( Cloud Native Computing Foundation,云原生计算基金会,是一个开源软件基金会,致力于云原生技术的普及和可持续发展) 的一个可观测性项目。

OpenTelemetry 旨在提供可观测性领域的标准化方案,解决遥测数据的数据建模、采集、处理、导出等标准化问题,并能够将这些数据发送到你选择的后端(开源或商业均可)。这样你就可以建立不被供应商锁定的可观测,灵活地更改后端,不需要再次更改代码,重新进行插桩(Instrument)了。

OpenTelemetry 架构

OpenTelemetry 主要包括了下面三个部分:

1、跨语言规范

跨语言规范描述了所有实现的跨语言要求和数据模型,包括遥测客户端内部实现所需要的标准和定义,也包含与外部通信时需要实现的协议规范。跨语言规范主要包含了下面几类。

  • API:定义用于生成和关联追踪、指标和日志的数据类型和操作。
  • SDK:定义 API 特定语言实现的要求,同时还定义配置、数据处理和导出等概念。
  • 数据:定义遥测后端可以提供支持的 OpenTelemetry 协议 (OTLP) 和与供应商无关的语义约定。

只有 OTLP 是 OpenTelemetry 官方原生支持的格式。OTLP 的数据模型定义是基于 ProtoBuf 完成的。

2、API / SDK

API 可以让开发者对应用程序代码进行插桩(Instrument),而 SDK 是 API 的具体实现,是和开发语言相关的。

在软件业内,在应用中进行插桩是指将系统状态数据发送到后端,例如日志或者监控系统。发送的数据叫做 Telemetry,也就是遥测数据,包括日志、指标以及追踪等。这些数据记录了处理特定请求时的代码行为,可以对应用系统的状态进行分析。

插桩有两种方式,一是通过手动增加代码生成遥测数据,二是以探针的方式自动收集数据。

每种方案都有特定的、自定义的步骤来产生和转移符合产品后端存储的遥测数据,这就带来了工具或者厂商的绑定性,如果想把遥测数据发送到其他产品,就不得不使用其他的插件库重复整个插桩过程。而这正是 OpenTelemetry 想要解决的问题。

OpenTelemetry 为每种语言提供了基础的监测客户端 API 和 SDK。这些包一般都是规范里的定义,又结合了语言自身的特点,实现了在客户端采集遥测数据的基本能力。

3、OpenTelemetry Collector

OpenTelemetry 架构的第三部分是接收、转换和导出遥测数据的工具(OpenTelemetry Collector),这是 OpenTelemetry 组件中最重要的部分,将其简称为 Collector。

Collector 针对如何接收、处理和导出遥测数据提供了与供应商无关的实现,消除了运行、操作和维护多个代理 / 收集器的需要,它支持将开源可观测性数据格式(例如 Jaeger、Prometheus 等)发送到一个或多个开源或商业后端。

在 Collector 的内部,有一套负责接收、处理和导出数据的流程被称为 Pipeline。 每个 Pipeline 由下面三部分组件组合而成。

  • Receiver:负责按照对应的协议格式监听和接收遥测数据,并把数据转给一个或者多个 Processor。
  • Processor:负责加工处理遥测数据,如丢弃数据、增加信息、转批处理等,并把数据传递给下一个 Processor 或者一个或多个 Exporter。
  • Exporter:负责把数据发送给下一个接收端(一般是指后端),比如将指标数据存储到 Prometheus 中。

一文Get火热的OpenTelemetry 架构_OpenTelemetry

从部署的角度来说,Collector 有下面两种模式。

  • 第一种模式可以统称为 Agent 模式。它是把 Collector 部署在应用程序所在的主机内(在 Kubernetes 环境中,可以使用 DaemonSet),或者是在 Kubernetes 环境中通过边车(Sidecar)的方式进行部署。这样,应用采集到的遥测数据可以直接传递给 Collector。
  • 另一种模式是 Gateway 模式。它把 Collector 当作一个独立的中间件,应用会把采集到的遥测数据往这个中间件里传递。


标签:架构,遥测,Get,Collector,OpenTelemetry,API,数据,插桩
From: https://blog.51cto.com/key3feng/6104048

相关文章

  • 6 fields_view_get 方法的使用
    odoo的可视化界面高度定制,这导致了一些灵活的较高的xml调整无法实现。这时我们可以使用fields_view_get来实现例如:动态调整domian、动态增加field字段的显示、修改field......
  • 掌握4C原则,设计高效的系统架构
    hi,我是熵减,见字如面。在软件开发中,设计一个好的架构是非常重要的,好架构能够影响整个系统的质量和可维护性。而要设计出好架构,就需要遵循一些设计原则。其中,架构设计的4C......
  • 【愚公系列】2022年03月 .NET架构班 020-ABP vNext 虚拟文件系统
    【摘要】前言虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文件。它主要用于将(js,css,image,cshtml…)文件嵌入到程序集中,并在运行时将它们用作物理文件。一、集成虚拟......
  • 前端老赵一次给你讲透“微前端”架构
     一、引言:随着Web应用程序的规模和复杂度的不断增加,前端技术也在不断发展和演进。微前端是近年来兴起的一种前端架构模式,通过将大型Web应用程序拆分为小型、可独立开发......
  • RESTful架构的一些理解
    网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(highlatency)、高并发等特点。网站开发,完全可以采......
  • 信息架构与数据建模
    一、信息架构概念1、企业架构的产生:企业管理体系的信息化建设驱动了EA的产生和发展没有IT技术时,流程和管理体系已经存在(Taylor科学管理);随着IT技术的发展并在企业中得......
  • ECS架构分析
    概述ECS全称Entity-Component-System,即实体-组件-系统。是一种面向数据(Data-OrientedProgramming)的编程架构模式。这种架构思想是在GDC的一篇演讲《OverwatchGamepla......
  • Solon2 在微服务架构下,如何安全的停止服务?
    所谓“安全的停止服务”是指:在一个集群内,一个服务停止时,即不影响已有请求,也不影响别人调用。Solon在内核层面已提供了停全停止的机制:1、操作说明(通过配置启用)或者用启动......
  • 控制台报错TypeError: Cannot read properties of null (reading ‘getAttribute‘)
    其实是echarts属性报错:获取不到属性名,初始化echarts的时候是在created钩子函数里面,那时候dom还没有生成,所以找不到id就会报错。其实很简单,只要在mounted钩子函数里面去初......
  • C# Get 带body
    try{    //System.GC.Collect();    HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(URL);    request.Proxy= null;    request.Ke......