OpenTelemetry:新一代的开源可观测性标准

news2024/12/27 11:46:18

OpenTelemetry是由OpenTracing和OpenCensus两个开源项目合并而成,由云原生计算基金会(CNCF)托管。该项目旨在提供一套标准化的、跨语言的观测性工具,帮助开发人员和运维人员更好地理解和管理分布式系统的性能和行为。通过统一的Metrics(指标)、Logs(日志)和Traces(追踪)数据模型,OpenTelemetry使得数据收集、处理和分析变得更加高效和便捷。

OpenTelemetry的核心组成部分

1.日志(Logs)

日志是系统运行时事件的记录,包含了丰富的上下文信息,对于理解和调试应用程序的行为至关重要。OpenTelemetry的Log API定义了一种标准方式来记录和导出这些事件,确保了日志数据的一致性和可读性。

OpenTelemetry日志的标准格式通常包括以下几个部分:资源、日志记录、时间戳和日志内容。以下是一个示例,展示了如何使用OpenTelemetry收集和导出日志数据。

示例数据样例

{
  "resource": {
    "attributes": {
      "service.name": "example-service",
      "service.instance.id": "instance-1",
      "host.name": "host1"
    }
  },
  "instrumentationLibraryLogs": [
    {
      "instrumentationLibrary": {
        "name": "example-instrumentation",
        "version": "1.0.0"
      },
      "logs": [
        {
          "timeUnixNano": "1633046460000000000",
          "severityText": "INFO",
          "name": "example-log",
          "body": "This is an example log message",
          "attributes": {
            "http.method": "GET",
            "http.status_code": "200"
          }
        },
        {
          "timeUnixNano": "1633046465000000000",
          "severityText": "ERROR",
          "name": "example-error-log",
          "body": "This is an example error log message",
          "attributes": {
            "http.method": "POST",
            "http.status_code": "500"
          }
        }
      ]
    }
  ]
}

字段解释

resource: 描述了生成这些日志的资源信息,如服务名称、实例ID和主机名。

instrumentationLibraryLogs: 包含了仪表库的信息和相关的日志数据。

instrumentationLibrary: 描述了仪表库的名称和版本。

logs: 包含了具体的日志数据。

timeUnixNano: 日志记录的时间戳(纳秒)。

severityText: 日志的严重性级别(如INFO、ERROR等)。

name: 日志的名称。

body: 日志的内容。

attributes: 日志的属性,如HTTP方法和状态码。

2.指标(Metrics)

指标是对系统性能、资源使用情况等量化数据的度量。OpenTelemetry Metrics API使开发者能够计量特定事件的发生频率或资源的消耗量,并以标准格式暴露给监控系统,支持实时性能监控和趋势分析。

OpenTelemetry指标的标准格式通常包括以下几个部分:资源、仪表、时间序列和数据点。以下是一个示例,展示了如何使用OpenTelemetry收集和导出指标数据。

示例数据样例

{
  "resource": {
    "attributes": {
      "service.name": "example-service",
      "service.instance.id": "instance-1",
      "host.name": "host1"
    }
  },
  "instrumentationLibraryMetrics": [
    {
      "instrumentationLibrary": {
        "name": "example-instrumentation",
        "version": "1.0.0"
      },
      "metrics": [
        {
          "name": "http_requests_total",
          "description": "Total number of HTTP requests",
          "unit": "1",
          "data": {
            "sum": {
              "dataPoints": [
                {
                  "attributes": {
                    "http.method": "GET",
                    "http.status_code": "200"
                  },
                  "startTimeUnixNano": "1633046400000000000",
                  "timeUnixNano": "1633046460000000000",
                  "value": 100
                },
                {
                  "attributes": {
                    "http.method": "POST",
                    "http.status_code": "500"
                  },
                  "startTimeUnixNano": "1633046400000000000",
                  "timeUnixNano": "1633046460000000000",
                  "value": 5
                }
              ]
            }
          }
        }
      ]
    }
  ]
}

字段解释

resource: 描述了生成这些指标的资源信息,如服务名称、实例ID和主机名。

instrumentationLibraryMetrics: 包含了仪表库的信息和相关的指标数据。

instrumentationLibrary: 描述了仪表库的名称和版本。

metrics: 包含了具体的指标数据。

name: 指标的名称。

description: 指标的描述。

unit: 指标的单位。

data: 指标的数据类型,这里使用的是sum类型。

dataPoints: 包含了具体的数据点。

attributes: 数据点的属性,如HTTP方法和状态码。

startTimeUnixNano: 数据点的开始时间(纳秒)。

timeUnixNano: 数据点的结束时间(纳秒)。

value: 数据点的值。

3.调用链(Traces)

调用链追踪是理解分布式系统中请求流经各服务的路径和耗时的关键。OpenTelemetry Traces API提供了一套机制,用于捕获和记录服务间的调用关系,形成了服务调用的完整视图,极大地提升了故障排查的效率。

OpenTelemetry Trace的标准格式通常包括以下几个部分:资源、Span、时间戳和属性。以下是一个示例,展示了如何使用OpenTelemetry收集和导出Trace数据。

示例数据样例

{
  "resource": {
    "attributes": {
      "service.name": "example-service",
      "service.instance.id": "instance-1",
      "host.name": "host1"
    }
  },
  "instrumentationLibrarySpans": [
    {
      "instrumentationLibrary": {
        "name": "example-instrumentation",
        "version": "1.0.0"
      },
      "spans": [
        {
          "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
          "spanId": "00f067aa0ba902b7",
          "parentSpanId": "b9c7c989f97918e1",
          "name": "example-span",
          "kind": "SPAN_KIND_INTERNAL",
          "startTimeUnixNano": "1633046400000000000",
          "endTimeUnixNano": "1633046460000000000",
          "attributes": {
            "http.method": "GET",
            "http.status_code": "200"
          },
          "status": {
            "code": "STATUS_CODE_OK"
          }
        },
        {
          "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
          "spanId": "f2cda95b0b1c4a3a",
          "parentSpanId": "00f067aa0ba902b7",
          "name": "example-child-span",
          "kind": "SPAN_KIND_CLIENT",
          "startTimeUnixNano": "1633046410000000000",
          "endTimeUnixNano": "1633046450000000000",
          "attributes": {
            "db.system": "mysql",
            "db.statement": "SELECT * FROM users"
          },
          "status": {
            "code": "STATUS_CODE_OK"
          }
        }
      ]
    }
  ]
}

字段解释

resource: 描述了生成这些Trace的资源信息,如服务名称、实例ID和主机名。

instrumentationLibrarySpans: 包含了仪表库的信息和相关的Span数据。

instrumentationLibrary: 描述了仪表库的名称和版本。

spans: 包含了具体的Span数据。

traceId: Trace的唯一标识符。

spanId: Span的唯一标识符。

parentSpanId: 父Span的标识符(如果有)。

name: Span的名称。

kind: Span的类型(如INTERNAL、CLIENT等)。

startTimeUnixNano: Span的开始时间(纳秒)。

endTimeUnixNano: Span的结束时间(纳秒)。

attributes: Span的属性,如HTTP方法和状态码。

status: Span的状态码。

OpenTelemetry的优势

1.标准化:

OpenTelemetry通过提供统一的数据模型和接口,打破了不同厂商和平台之间的壁垒,使得遥测数据可以在不同系统间无缝流动。这大大降低了数据迁移和集成的难度,提高了系统的可观测性和可维护性。

2.跨语言支持:

OpenTelemetry支持多种编程语言,如Java、Python、Go等。这使得开发人员可以在不同语言编写的应用程序中使用OpenTelemetry进行分布式追踪和性能监控,实现跨语言追踪和统一观测。

image.png

3.易于集成和扩展:

OpenTelemetry提供了丰富的SDK和Collector实现,使得它可以轻松集成到现有的应用程序和服务中。同时,OpenTelemetry还支持自定义数据收集器和处理器,满足特定需求的数据收集和处理。

image.png

4.强大的社区支持:

作为CNCF的孵化项目,OpenTelemetry得到了广泛的社区支持和持续的更新。这使得OpenTelemetry能够不断迭代和优化,为开发人员和运维人员提供更好的观测性体验。

5.与现有标准的兼容性:

兼容现有的监控和追踪标准,如 OpenTracing 和 OpenCensus,确保了向新标准的平滑过渡。

OpenTelemetry的应用场景

通过集成OpenTelemetry SDK,应用可以自动收集详细的性能数据和调用链路信息,这些数据随后被导出至Prometheus、Jaeger或Elasticsearch等后端存储与分析系统。

在微服务架构中,OpenTelemetry可以用于追踪一个请求经过的所有服务,帮助开发者快速定位问题所在。

在云原生应用中,OpenTelemetry可以监控容器化应用的性能和资源使用情况,及时发现潜在问题。

在物联网设备中,OpenTelemetry可以收集远程设备的运行状态信息,为设备的维护和优化提供数据支持。

结论

OpenTelemetry作为新一代的开源观测性标准,为开发人员和运维人员提供了一种统一、高效、跨语言的观测性解决方案。通过标准化的数据模型和接口、跨语言支持、易于集成和扩展以及强大的社区支持等优势,OpenTelemetry正在逐步成为分布式追踪、日志收集和性能指标监控的主流方案。随着OpenTelemetry的不断发展和完善,相信它将在未来的软件开发和运维领域发挥更加重要的作用。

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

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

相关文章

html5宠物网站模板源码

文章目录 1.设计来源1.1 主界面1.2 主界面菜单1.3 关于我们界面1.4 宠物照片墙界面1.5 宠物博客界面1.6 宠物服务界面1.7 宠物团队界面1.8 联系我们界面 2.效果和源码2.1 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 【博主推荐】&a…

微信小程序同城信息共享

前端uniapp 后端thinkphp 热乎的纯手工代码

机械学习—零基础学习日志(如何理解线性代数3)

零基础为了学人工智能,正在快乐学习,每天都长脑子 行列式 最早行列式,是莱布尼茨用于判断,一个方程有没有解。例如,三元一次方程,如果有解,对应行列式就有值,但是如果无解&#xf…

一篇文章理清Java持久化脉络(关于JDBC、JPA、Hibernate、Spring Data JPA)

Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC(古老的东西,只需简单知道是啥)1.1 JDBC概念1.2 JDBC示例 三、JPA(第二代持久化,代表是Hibernate等框架)3.1 JPA概念3.2 JPA示例 四、Spri…

GB/T 38082-2019 生物降解塑料购物袋检测

生物降解塑料购物袋是指以生物降解树脂为主要原料制得的,具有提携结构的,在销售、服务等场所用于盛装及携提商品的袋制品。 GB/T 38082-2019 生物降解塑料购物袋检测项目: 检测项目 测试标准 尺寸偏差 GB/T 38082 感官 GB/T 38082 提掉…

html+css+js网页设计 大一电商6个页面 带js 有轮播图,增删改查等功能

htmlcssjs网页设计 大一电商6个页面 带js 有轮播图,增删改查等功能 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等…

JTAG标准笔记:IEEE1149.1、IEEE1149.4、IEEE1149.5、IEEE1149.6、 IEEE1500等协议之前的发展和联系

JTAG (Joint Test Action Group) 是一种串行通信协议。对于典型的串行通信,总线较少,线路数通常为1到4条,数据是以位为单位依次传输的。笔记中大部分图片来自JTAG标准介绍UP的视频 IEEE 1149.1,通常称为JTAG(Joint Tes…

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

设计模式22-迭代器模式

设计模式22-迭代器模式 迭代器模式(Iterator Pattern)动机定义结构定义结构结构图解释注意事项 C代码推导多态属性(虚函数)实现迭代器1. **返回值问题**2. **对象切割问题**3. **内存管理问题**4. **迭代器生命周期问题**5. **接口…

static、extern,const关键字

1、static关键字 static关键字:延长生命周期,限制作用域 static修饰局部变量:静态局部变量 static修饰全局变量:静态全局变量 static修饰函数:静态函数 2、extern关键字 extern:引用其他文件 .c 中的全局…

对敲期权组合如何操作?

对敲期权组合按照你说的对沖敲出期权应该是一种期权套利行为,在买入的同时卖出一个执行价格不同的期权进行对冲,或者在卖出一张期权合约的时候同时买进一张执行价不动的同类期权进行对中,这样亏报有限,是种套利行为,下…

Java基础之进制转换

1 进制基础 概念: ​ 进制就是进位制,是人们规定的一种进位方法,二进制逢2进1,八进制是逢8进1,十进制逢10进1,十六进制逢16进1。 不同进制形式: 二进制 0b或0B开头,由0和1组成 八…

爬虫配置代理:保护隐私有效地抓取数据

爬虫配置代理的详细指南 在进行网络爬虫时,使用代理可以帮助我们更有效地抓取数据,避免IP被封禁,并提高隐私保护。本文将详细介绍如何在爬虫中配置代理,包括不同的代理类型、如何选择合适的代理以及在Python中实现代理的具体步骤…

中国软件评测中心:2024年最新人工智能大语言模型技术发展研究报告 (附文档)

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力,正在引发经济、社会、文化等领域的变革和重塑,2023 年以来,以 ChatGPT、GPT-4 为代表的大模型技术的出台,因其强大的内容生成及多轮对话能力,引…

python-A+B again

[题目描述] 小理有一个非常简单的问题给你,给你两个整数 A 和 B,你的任务是计算 AB。输入格式: 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数,然后 2∗T 行,分别表示 A 和 B 两个正整数。注意整数…

调研在深度学习中如何读代码

这里调研了四个up主的内容,对他们讲的内容摘了一下主要的内容。想要看原文的画可以看原篇。 1.如何学习别人的代码(代码量较大时)_怎么学习别人的代码-CSDN博客 想要掌握的好,光阅读是不够的,一定要动手写、训练模型…

k8s 部署RuoYi-Vue-Plus之minio搭建

1.直接部署一个pod 需要挂载存储款, 可参考 之前文章设置 https://blog.csdn.net/weimeibuqieryu/article/details/140183843 2.部署yaml 创建部署文件 minio-deploy.yaml apiVersion: v1 kind: PersistentVolume metadata:name: minio-pvnamespace: ruoyi #使用ns ruoyi s…

MyCAT读写分离实现

1. 添加一个新的虚拟主机,设置ip为10.1.1.60,主机名为 mycat.yuanyu.zhangmin.关闭防火墙 SELinux NetworkManager 2. 上传jdk和mycat安装包 3. 解压并且添加到指定的位置 4. 查看并且配置jdk环境 、5. 测试启动myca就可以了 6. 找到server.xml和schema.xml 7. 配…

Python酷库之旅-第三方库Pandas(081)

目录 一、用法精讲 336、pandas.Series.str.rpartition方法 336-1、语法 336-2、参数 336-3、功能 336-4、返回值 336-5、说明 336-6、用法 336-6-1、数据准备 336-6-2、代码示例 336-6-3、结果输出 337、pandas.Series.str.slice方法 337-1、语法 337-2、参数 …

RCE---eval长度限制绕过技巧

目录 题目源码 方法一&#xff1a;命令执行的利用 方法二&#xff1a;file_put_contents&#xff08;本地文件包含的利用&#xff09; 方法三&#xff1a;usort(…$_GET); 题目源码 <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($par…