可觀測性、OpenTracing、OpenCensus、OpenTelemetry、Jaeger

監控與觀測

隨著軟件應用從單片架構向分布式微服務體系轉變,應用監控(Monitoring)和觀測(Observability)的需求也隨之提升。兩者存在相同的定義,目的都是為了發現應用程序中的問題。但還是有差別:

  • 監控:目的是為了捕獲已知的問題,并將其顯示在儀表盤上,用以了解其發生問題的原因和其發生的具體時間;
  • 觀測:采用更底層的方式,即開發人員通過調試代碼的方式從而了解程序的內部狀態。為了幫助監控應用程序的未知問題的最新發展。

在這里插入圖片描述
應用觀測的三大支柱:

  • 指標(metrics):指出是否存在問題,通常是通過告警「發現」
  • 調用鏈(traces):標明問題點在哪里,「定位」
  • 日志(logs):協助定位產生問題的根本原因,「分析」

在這里插入圖片描述
應用可觀測的好處:

  • 找出潛在隱患
  • 降低告警疲勞
  • 更快發布產品
  • 提高自動化程度
  • 提高開發生產力

OpenTracing

OpenTracing,制定一套無關廠商、無關平臺的協議標準,使開發人員只需要修改Tracer就可以更迅捷的添加或更換底層監控的實現。2016年CNCF正式接納OpenTracing,順利成為CNCF第三個項目,前兩個項目都已成為云原生及開源領域的事實標準:Kubernetes和Prometheus。由此也可以看到行業對于可觀測及統一標準的重視程度。GitHub。

OpenTracing由API規范、實現該規范的框架和庫,以及項目文檔組成,并進行以下努力:

  • 后臺無關的API接口標準化:被追蹤的服務只需要調用相關API接口,就可被任何實現這套接口的追蹤后臺支持;
  • 對跟蹤最小單位Span管理標準化:定義開始Span,結束Span和記錄Span耗時的API;
  • 進程間跟蹤數據傳遞方式標準化:定義API方便追蹤數據的傳遞;
  • 多語言應用支持;多跟蹤器支持,Zipkin、LightStep、Appdash;可輕松集成到gRPC、Flask、DropWizard、Django和Go Kit等框架中。

術語

包括:

  • Traces:記錄經過分布式系統的請求活動,一個Trace是Spans的有向無環圖;
  • Spans:一個Trace中表示一個命名的,基于時間的操作。Spans嵌套形成Trace樹。每個Trace包含一個根Span,描述端到端的延遲,其子操作也可能擁有一個或多個子Spans;
  • Metrics:在運行時捕獲的關于服務的原始度量數據。Observer支持通過異步API來采集數據,每個采集間隔采集一個數據;
  • Context:一個Span包含一個Span Context,它是一個全局唯一的標識,表示每個Span所屬的唯一請求,以及跨服務邊界轉移Trace信息所需的數據。OpenTelemetry也支持correlation context,可以包含用戶定義的屬性。correlation context不是必要的,組件可以選擇不攜帶和存儲該信息;
  • Context Propagation:表示在不同的服務之間傳遞上下文信息,通常通過HTTP首部。除Tracing外,還可用于執行A/B測試。支持通過多個協議的Context Propagation來避免可能發生的問題,但需要注意的是,在自己的應用中最好使用單一的方法;
  • References:Spans之間建立連接的描述,目前有兩種類型,ChildOf和FollowsFrom。

Maven

io.opentracing是官方核心庫,包含主要的接口和規范,如Tracer、Span、SpanContext等,其下的artifactId包括:

  • opentracing-api:定義OpenTracing的核心API;
  • opentracing-util:提供幫助工具,如GlobalTracer;
  • opentracing-noop:提供無操作的實現,用于無跟蹤時的默認行為。

最后發布日期停留在2019年5月份,Maven依賴如下:

<dependency><groupId>io.opentracing</groupId><artifactId>opentracing-api</artifactId><version>0.33.0</version>
</dependency>
<dependency><groupId>io.opentracing</groupId><artifactId>opentracing-noop</artifactId><version>0.33.0</version>
</dependency>

io.opentracing.contrib是OpenTracing社區貢獻的擴展庫組件,用于與各種第三方框架和工具進行集成。目的是簡化OpenTracing與常見工具和框架的集成,降低接入成本。

其下的artifactId包括:

  • opentracing-tracerresolver:幫助在運行時解析和加載具體的Tracer實現,如Jaeger或Zipkin;
  • opentracing-spring-cloud:為Spring Cloud應用提供OpenTracing集成;
  • opentracing-jdbc:為JDBC提供數據庫調用的自動跟蹤;
  • opentracing-kafka:用于跟蹤Kafka消息的生產和消費。

一張圖感受一下到底有多少個artifactId:
在這里插入圖片描述
最后發布日期停留在2019年6月份。

Jaeger和OpenTracing

Jaeger是最早實現OpenTracing API的分布式追蹤系統之一,由Uber開發,后來捐贈給CNCF。

Jaeger 1.x和2.x版本都支持OpenTracing API,可直接使用opentracing-api庫進行分布式追蹤開發。

OpenCensus

官網,其發起者是谷歌,也就是最早提出Tracing概念的公司,可理解為Google Dapper的社區版。和OpenTracing最大的不同在于除Tracing外,還包括Metrics指標監控;并不是單純的規范制定,還包括數據采集的Agent、Collector等。有眾多追隨者,如微軟。GitHub。

除沿用OpenTracing的相關術語之外,OpenCensus也定義一些新術語:

  • Tags:允許在記錄時將指標與維度相關聯。從而能夠從不同角度分析測量結果;
  • Stats:收集庫和應用記錄的可觀測結果,匯總、導出統計數據,并包括Recording、Views(聚合度量查詢)兩部分;
  • Trace:除Opentracing所提供的Span屬性之外,OpenCensus還支持Parent SpanId、Remote Parent、Attributes、Annotations、Message Events、Links等屬性;
  • Agent:OpenCensus Agent是一個守護進程,允許OpenCensus的多語言部署使用Exporter。與傳統上為每個語言庫和每個應用程序刪除和配置OpenCensus Exporter不同,使用OpenCensus Agent,只需為其目標語言單獨啟用OpenCensus Agent Exporter。對于運維團隊而言,實現單個Exporter管理并從多語言應用程序中獲取數據,將數據發送到所選擇的后端。與此同時,盡可能的減少反復啟動或部署對于應用的影響。Agent還附帶Receivers,使Agent直通后端,去接收可觀測數據并將其路由到所選擇的Exporter。如Zipkin、Jaeger或Prometheus。
  • Collector:OpenCensus的重要組成部分,由Go編寫,可從任何可用Receivers的應用中接受流量,而不用關注編程語言以及部署方式。對于提供Metrics和Trace的服務或應用而言,只需要一個Exporters導出組件,就能從多語言應用中獲取數據。對于開發者而言,只需要管理維護單個Exporter,所有應用都使用OpenCensus Exporter發送數據。開發人員自由選擇將數據發送到業務所需的后端,并隨時進行更好。為了解決通過網絡發送大量數據可能需要處理發送失敗的問題,Collector具有緩沖和重試功能,可確保數據完整性與可用性。
  • Exporters:OpenCensus 可通過各種 Exporter 實現將相關數據上傳到各種后端,比如:Prometheus for stats、OpenZipkin for traces、Stackdriver Monitoring for stats and Trace for traces、Jaeger for traces、Graphite for stats。

遵循OpenCensus協議的產品有Prometheus、SignalFX、Stackdriver和Zipkin。

OpenTelemetry

OpenTracing項目在2019年停止更新,后續其功能被OpenTelemetry,簡稱OTel,所取代。GitHub。

遙測數據(Telemetry Data)是跨科學領域的通用術語,描述一種從遠程位置收集數據集用于測量系統健康狀況的行為。在DevOps中,系統指的就是軟件應用,要收集的數據就是日志、調用鏈和指標。

架構簡圖
在這里插入圖片描述

在OpenTracing基礎上引入的術語:

  • Metrics:在運行時捕獲的關于服務的原始度量數據。Observer支持通過異步API來采集數據,每個采集間隔采集一個數據;

OpenTracing、OpenCensus和OpenTelemetry

特性OpenTracingOpenCensusOpenTelemetry
簡介最早的分布式追蹤標準,定義統一的接口和規范,允許用戶切換具體的追蹤器Google發起,支持Tracing,Metrics,并提供數據采集Agent和CollectorOpenTracing和OpenCensus合并后產物,目的是構建一個統一的、全面的可觀測性標準,支持分布式追蹤和指標采集
覆蓋范圍僅支持分布式追蹤,不涉及Metrics或Logs支持Traces、Metrics,但不包含Logs支持分布式追蹤、指標、日志;提供自動代碼注入和Collector(Agent/Gateway模式)
生態兼容性CNCF托管,被Jaeger、Zipkin等支持微軟等公司加入支持,生態較強;缺乏統一的CNCF支持成為CNCF的標準,可被更多工具支持;兼容OpenTracing和OpenCensus,提供平滑遷移路徑
標準化程度API標準SDK+采集架構統一API+SDK+協議
數據采集依賴第三方實現自帶Agent/Collector自帶OTLP Collector
當前狀態2019年停止發布Release,GitHub于2023年5月24日歸檔GitHub于2023年8月1日歸檔活躍開發中,逐步取代OpenTracing和OpenCensus

對應替代關系:

  • io.opentracing:opentracing-apiio.opentelemetry:opentelemetry-api
  • io.opentracing:opentracing-utilio.opentelemetry:opentelemetry-sdk
  • io.opentracing.contrib:opentracing-tracerresolver→無直接替代,OpenTelemetry提供標準化的SDK初始化方式;
  • 其他io.opentracing.contrib庫可被OpenTelemetry的自動檢測和集成工具替代。

遷移指南:OpenTelemetry項目提供從OpenTracing遷移到OpenTelemetry的官方指南,其中列舉關鍵變化和替代組件。

<dependency><groupId>io.opentelemetry.javaagent</groupId><artifactId>opentelemetry-javaagent-api</artifactId><version>0.16.1</version><scope>runtime</scope>
</dependency>

Jaeger和OpenTelemetry

互補:

  • OpenTelemetry:專注于數據采集和標準化,包括API、SDK、Collector;
  • Jaeger:Jaeger Exporter將數據從OpenTelemetry Collector或SDK導出到Jaeger后端;專注于追蹤數據的存儲、分析和可視化。

OTLP

OpenTelemetry Protocol,OpenTelemetry定義的標準數據格式。OTLP取代舊版協議(如Jaeger或Zipkin的專用協議),成為OpenTelemetry默認導出格式。

核心特性:

  • 多數據類型支持:統一傳輸跟蹤、指標和日志;
  • 多傳輸協議:默認使用gRPC,支持HTTP/JSON;
  • 高效編碼:基于Protocol Buffers的二進制編碼,減少帶寬占用;
  • 端到端可靠性:內置重試、隊列和批處理機制。

架構
在這里插入圖片描述

OTLP協議的關鍵優勢:

  • 統一三種遙測數據的傳輸方式;
  • 通過PB實現高性能序列化;
  • 靈活的傳輸層支持(gRPC/HTTP)。

Jaeger

版本

在這里插入圖片描述
版本1.*2.*,同時在更新release發布中。

版本區別:

在Jaeger 1.x中

  • 前端API:
    Jaeger提供完整的分布式追蹤生態,包括一個實現OpenTracing標準的客戶端(通過jaeger-client庫)。開發者可以直接調用Jaeger的API(如JaegerTracer)來生成和發送追蹤數據。
  • 后端處理:
    Jaeger同時作為追蹤系統的后端,包含以下組件:
    • Agent:接收應用程序發來的Span數據;
    • Collector:處理和存儲追蹤數據到數據庫;
    • Query:提供數據查詢和UI可視化。

Jaeger 1.x是全棧式分布式追蹤解決方案,包括前端API和后端功能。

在Jaeger 2.x中:

  • 前端API的弱化:不再專注于提供客戶端API,而是轉向支持OpenTelemetry的標準API和SDK。應用程序需要直接調用OpenTelemetry的API(如Tracer、Span),而不是依賴Jaeger的API。官方建議是使用OpenTelemetry SDK進行追蹤數據的采集。
  • 后端功能的強化:Jaeger 2.x專注于成為分布式追蹤的后端系統,處理追蹤數據的接收、存儲和可視化:
    • Collector:支持OpenTelemetry數據格式,兼容多種傳輸協議,如gRPC和HTTP;
    • 存儲:支持多種存儲后端,如ES、Cassandra、Kafka等;
    • Query和UI:繼續提供可視化和分析功能,讓開發者能查詢和分析追蹤數據。

Jaeger版本與OpenTracing、OpenTelemetry

1.x版本:

  • 支持OpenTracing API,用戶通過io.opentracingio.opentracing.contrib配置Jaeger作為追蹤器;
  • 完全依賴OpenTracing的規范和生態。

2.x版本:

  • 增加對OpenTelemetry的支持,同時兼容OpenTracing;
  • 提供新的組件和數據管道,集成OpenTelemetry Collector;
  • 主要作為分布式追蹤的后端使用(Collector、存儲、查詢等),不再專注于前端API的實現;
  • 推薦使用OpenTelemetry API,而不是繼續使用OpenTracing。

推薦閱讀

  • https://www.echo.cool/docs/category/opentelemetry-教程
  • 從Opentracing、OpenCensus到OpenTelemetry,看可觀測數據標準演進史
  • OpenTracing文檔中文版翻譯-吳晟
  • https://github.com/1046102779/opentracing

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下使用原始socket收發數據包

在Linux系統中&#xff0c;使用非原始的socket&#xff0c;可以收發TCP或者UDP等網絡層數據包。如果要處理網絡層以下的數據包&#xff0c;比如ICMP、ARP等&#xff0c;或者更底層&#xff0c;比如鏈路層數據包&#xff0c;就得使用原始socket了。 創建socket 創建socket要使用…

暑期自學嵌入式——Day05補充(C語言階段)

接續上文&#xff1a;暑期自學嵌入式——Day05&#xff08;C語言階段&#xff09;-CSDN博客 主頁點關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 主頁&#xff1a; 一位搞嵌入式的 genius-CSDN博…

.NET Core EFCore零基礎快速入門簡單使用

一、什么是 Entity Framework (EF) Core Entity Framework (EF) Core 是輕量化、可擴展和跨平臺版的對象關系映射程序 (O/RM)數據訪問技術&#xff0c;。 它將開發人員從編寫大量 SQL 語句中解放出來。 二、EF的相關程序包 Microsoft.EntityFrameworkCore 核心程序包&#x…

AAC音頻格式

目錄 AAC音頻格式介紹 主要特點 技術優勢 常見文件擴展名 應用領域 AAC與PCM的區別與優勢對比 基本概念差異 主要技術區別 各自優勢 PCM的優勢 AAC的優勢 應用場景選擇 AAC音頻數據格式解析 1. AAC 文件格式 (1) ADIF (Audio Data Interchange Format) (2) ADT…

pom.xml文件中的${}變量從哪里傳值

在 Maven 的 pom.xml 文件中&#xff0c;${} 格式的變量&#xff08;稱為屬性占位符&#xff09;的值來源主要有以下幾種途徑&#xff1a; 1. ?內置屬性&#xff08;Maven 預定義&#xff09;?? ${project.basedir}&#xff1a;項目根目錄${project.version}&#xff1a;項…

【人工智能】項目案例分析:使用TensorFlow進行大規模對象檢測

????歡迎大家來到我們的天空???? ?? 作者簡介:我們的天空 ??《頭銜》:大廠高級軟件測試工程師,阿里云開發者社區專家博主,CSDN人工智能領域新星創作者。 ??《博客》:人工智能,深度學習,機器學習,python,自然語言處理,AIGC等分享。 所屬的專欄:TensorF…

C++---cout、cerr、clog

在C編程里&#xff0c;cout、cerr和clog是標準庫提供的重要輸出流對象&#xff0c;在數據輸出方面發揮著關鍵作用。 一、cout&#xff1a;標準輸出流 cout 是 std::ostream 類的對象&#xff0c;其作用是向標準輸出設備&#xff08;一般是控制臺&#xff09;輸出數據。它和 C 語…

脈沖神經網絡(Spiking Neural Network, SNN)與知識蒸餾(Knowledge Distillation, KD)

目錄 脈沖神經網絡&#xff08;Spiking Neural Network, SNN&#xff09; 知識蒸餾&#xff08;Knowledge Distillation, KD&#xff09; 三種類別 三種變體 脈沖神經網絡&#xff08;Spiking Neural Network, SNN&#xff09; 收到生物神經系統的啟發&#xff0c;設計的&a…

使用Java完成下面項目

第一題&#xff1a;從控制臺輸入十個學生的成績&#xff0c;使用list集合來保存數據&#xff0c; 遍歷并打印其中成績不及格的成績&#xff0c;打印最高成績&#xff0c;最低成績&#xff0c;并計算及格率代碼如下public class Home1 {public static void main(String[] args) …

龍虎榜——20250718

上證指數今天上漲收陽線&#xff0c;繼續在5天均線保持強勢上漲&#xff0c;個股下跌稍多&#xff0c;大盤股上漲為主。深證指數收小陽線&#xff0c;繼續在5天均線上&#xff0c;總體保持強勢&#xff0c;調整更多是小票。2025年7月18日龍虎榜行業方向分析1. 醫藥醫療? 代表標…

2025年華為認證之HCIE-云計算方向的報考流程

一、先搞明白&#xff1a;HCIE - 云計算認證到底是啥&#xff1f; HCIE - 云計算&#xff08;華為認證 ICT 專家 - 云計算&#xff09;是華為體系里云計算領域的頂級認證&#xff0c;說白了&#xff0c;就是證明你有能力搞定大型企業的云平臺設計、部署和運維。現在政企、金融…

什么是私有化部署企業即時通訊?吱吱企業即時通訊安全嗎?

在企業數字化轉型加速的今天&#xff0c;溝通工具的選擇已經從滿足簡單溝通&#xff0c;升級為“安全、高效、可控”。其中&#xff0c;“私有化部署企業即時通訊”成為許多中小型企業、跨國企業以及數據敏感型企業的核心需求。 那么&#xff0c;究竟什么是私有化部署&#xff…

Vue3 中使用 Element Plus 實現自定義按鈕的 ElNotification 提示框

在 Vue3 項目中&#xff0c;我們經常會用到 ElNotification 作為消息提醒組件&#xff0c;尤其是在異步操作、任務完成或用戶需要交互確認時。然而&#xff0c;Element Plus 默認的 Notification 是非交互式的&#xff0c;不能直接嵌入按鈕或事件。 今天我們來實現一個帶自定義…

下載webrtc M114版本源碼只能使用外網googlesource源-命令版

聲網、國內源都不行&#xff0c;只能外網googlesource源&#xff01;&#xff01;&#xff01; 二、創建 Ubuntu 容器&#xff08;帶目錄掛載&#xff09; 拉取Ubuntu鏡像 docker pull ubuntu:22.04創建并啟動容器&#xff08;掛載Windows目錄到容器&#xff09; docker run -i…

Linux運維新手的修煉手扎之第21天

Nginx服務和Tomcat服務1 負載均衡語法格式&#xff1a;upstream[一個或多個]rootubuntu24-13:~# vim /etc/nginx/conf.d/vhost.confupstream group1 {server 10.0.0.16;}upstream group2 {server 10.0.0.14;}server {listen 80;server_name sswang1.magedu.com;location / {pro…

TrOCR: 基于Transformer的光學字符識別方法,使用預訓練模型

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" TrOCR: 基于Transformer的光學字符識別方法&#xff0c;使用預訓練模型 摘要 文本識別是文檔數字化中的一個長期研究問題。現有方法通常基于CNN進行圖像理解&#xff0c;基于RNN進行字符級文本生成。此外&#…

西門子工業軟件全球高級副總裁兼大中華區董事總經理梁乃明先生一行到訪庭田科技

概要2025年6月&#xff0c;西門子工業軟件全球高級副總裁兼大中華區董事總經理梁乃明先生一行到訪我司。庭田科技總經理聶春文攜銷售團隊對西門子代表團表示熱烈歡迎&#xff0c;并就當前業務發展方向及未來行業聚焦領域與代表團展開深入交流。 聶春文總經理及銷售團隊陪同西門…

在 Jenkins 中使用 SSH 部署密鑰

本文檔介紹了如何在 Jenkins 中配置 SSH 部署密鑰&#xff0c;以便更穩定地拉取 Git 倉庫代碼&#xff0c;避免常見的 RPC 錯誤。 1. 背景 在使用 Jenkins 進行持續集成時&#xff0c;常常需要從 Git 倉庫拉取代碼。如果使用 HTTP/HTTPS 協議&#xff0c;有時會遇到 RPC 錯誤&…

小紅書采集工具:無水印圖片一鍵獲取,同步采集筆記與評論

我用python語言開發了一款名為“爬xhs圖片軟件”的工具&#xff0c;該工具不僅能采集圖片&#xff0c;還可獲取筆記數據、評論數據等內容。 軟件界面長這個樣子&#xff1a; 采集到的圖片&#xff1a;演示視頻&#xff1a;https://live.csdn.net/v/485813介紹文章、想你所想&am…

Java行為型模式---命令模式

命令模式基礎概念命令模式&#xff08;Command Pattern&#xff09;是一種行為型設計模式&#xff0c;其核心思想是將請求封裝為一個對象&#xff0c;從而使你可以用不同的請求對客戶進行參數化&#xff0c;對請求排隊或記錄請求日志&#xff0c;以及支持可撤銷的操作。命令模式…