【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana鏈路追蹤(一)

文章目錄

  • 1、最終效果
  • 2、前提準備
  • 2、環境信息
  • 3、服務集成(Opentelemetry ->Tempo)
    • 3.1 上報鏈路數據
      • 3.1.1 下載opentelemetry-agent
      • 3.1.2 啟動配置業務app
      • 3.1.3 配置opentelemetry輸入輸出
      • 3.1.4 配置grafana datasource
        • 3.1.4.1 配置tempo
        • 3.1.4.2 配置loki

1、最終效果

Loki與Tempo關聯后,在Loki收集的日志,可以查看tempo的鏈路
在這里插入圖片描述

2、前提準備

1、已安裝Kubernetes
2、安裝Grafana (安裝文檔)
3、安裝Promtail (安裝文檔)
4、安裝Loki (安裝文檔)
5、安裝Tempo (安裝文檔)
6、安裝OpenTelemetry (安裝文檔)

2、環境信息

服務版本安裝方式Github
Kubernetes1.25我這里使用的是華為云CCE(暫時不推薦使用)-
OpenTelemetry0.97.0Helm安裝https://github.com/open-telemetry
Loki2.9.6Helm安裝https://github.com/grafana/loki
Tempo2.4.1Helm安裝https://github.com/grafana/tempo
Grafana9.5.1Helm安裝https://github.com/grafana/grafana

3、服務集成(Opentelemetry ->Tempo)

在這里插入圖片描述
如圖所示,綠色和藍色這里就不說了,網上教程很多,大家自行完成

主要來說下橘色部分之前,我們來說下為什么要使用Opentelemetry,而不是直接讓app->tempo。這樣的設計有幾個關鍵原因:
標準化: OpenTelemetry 是一個開放標準的可觀測性框架,它提供了一套統一的API和SDK,用于收集 Metrics、Traces 和 Logs。這意味著開發者只需要學習一套接口,就可以在不同的服務和語言中實現一致的可觀測性實踐。這樣,服務無需直接適配每個跟蹤后端(如 Tempo),提高了代碼的可移植性和維護性。

解耦: 通過 OpenTelemetry,服務與追蹤后端(如 Tempo)之間的耦合度大大降低。服務只需生成追蹤數據,而不需要知道數據最終如何被收集、處理或存儲。這使得追蹤系統的升級或替換變得更加容易,比如從一個追蹤后端切換到另一個,而無需改動服務代碼。

靈活性和擴展性: OpenTelemetry 支持多種出口(exporters),可以輕松地將數據發送到不同的后端,如 Tempo、Jaeger、Prometheus 等。這為用戶提供了一個靈活的架構,可以根據需要選擇最適合自己的追蹤解決方案,或者根據環境(如開發、測試、生產)的不同配置不同的后端。

豐富的生態支持: OpenTelemetry 社區活躍,提供了多種語言的實現和支持,幾乎涵蓋了所有主流的編程語言。這意味著不論你的服務是用什么語言編寫的,都能找到相應的 OpenTelemetry SDK 或者自動化的集成工具。

高級功能: OpenTelemetry SDK 提供了豐富的特性,如自動追蹤上下文傳播、手動追蹤跨度的創建與關聯、標簽和事件的添加等,使得追蹤數據更加豐富和有用。此外,它還支持動態采樣策略,可以在不影響性能的前提下,智能地調整追蹤數據的收集量。

所以通過 OpenTelemetry 作為中介,可以讓服務的開發和維護更加集中于業務邏輯本身,同時享受標準化、靈活性和擴展性的優勢,而不必關心具體的追蹤數據處理細節

3.1 上報鏈路數據

3.1.1 下載opentelemetry-agent

這里已java為例
下載地址:https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases

通過修改Java啟動的VM參數上報鏈路數據。

-javaagent:/path/to/opentelemetry-javaagent.jar //修改為文件下載的實際路徑。
-Dotel.resource.attributes=service.name=appName //appName 為應用名。
-Dotel.exporter.otlp.endpoint=endpoint //opentelemetry 服務端地址。
-Dotel.metrics.exporter=none

3.1.2 啟動配置業務app

配置env

JAVA_TOOL_OPTIONS = -javaagent:/tmp/aps-tools/opentelemetry-javaagent.jar -Dotel.resource.attributes=service.name=dev-dysk  -Dotel.exporter.otlp.endpoint=http://otel-opentelemetry-collector.otel.svc.cluster.local:4318  -Dotel.metrics.exporter=none

JAVA_TOOL_OPTIONS 是一個環境變量,它允許你在不直接修改啟動 Java 應用程序的命令行參數的情況下,向 Java 虛擬機 (JVM) 傳遞額外的配置選項。這對于那些不能直接控制 JVM 啟動參數的應用特別有用,比如通過 JNI (Java Native Interface) 調用 JVM 的應用、腳本中嵌入的 JVM 應用,或者一些服務管理工具自動啟動的服務。

聯系開發修改服務日志字段,新增trance_id

啟動會發現日志中并沒有trace_id字段,這是因為并沒有做日志字段對應,屬于正常情況。雖不會影響opentelemetry輸入輸出,但是會影響接下來的loki和tempo集成,他們需要trace_id字段做為相同數據媒介來快速查詢。

在這里插入圖片描述

3.1.3 配置opentelemetry輸入輸出

#聲明使用的輸出
exporters:debug: {}logging:otlp:endpoint: "tempo-distributor-discovery.trace.svc.cluster.local:4317" #修改為tempo地址tls:insecure: true
extensions:health_check:endpoint: 0.0.0.0:13133
processors:batch: {}memory_limiter:check_interval: 5slimit_percentage: 80spike_limit_percentage: 25
#聲明使用的輸入
receivers:jaeger:protocols:grpc:endpoint: 0.0.0.0:14250thrift_compact:endpoint: 0.0.0.0:6831thrift_http:endpoint: 0.0.0.0:14268otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318prometheus:config:scrape_configs:- job_name: opentelemetry-collectorscrape_interval: 10sstatic_configs:- targets:- 0.0.0.0:8888zipkin:endpoint: 0.0.0.0:9411
#真正要使用的輸入輸出
service:extensions:- health_checkpipelines:logs:exporters:- debug- loggingprocessors:- memory_limiter- batchreceivers:- otlpmetrics:exporters:- debugprocessors:- memory_limiter- batchreceivers:- otlp- prometheustraces:exporters:- debug- otlpprocessors:- memory_limiter- batchreceivers:- otlp- jaeger- zipkintelemetry:metrics:address: 0.0.0.0:8888

重新啟動opentelemetry

3.1.4 配置grafana datasource

3.1.4.1 配置tempo

在這里插入圖片描述
URL:http://tempo-gateway.trace.svc
在這里插入圖片描述

在這里插入圖片描述

3.1.4.2 配置loki

在這里插入圖片描述
URL:http://loki-distributed-gateway.logs.svc.cluster.local
在這里插入圖片描述

Name:trace_id
Regex:trace_id=(\w+)
Query(先打開下面的Internal link):${__value.raw}

最后,我們在grafana的explore中選擇Tempo數據源,可以查詢到鏈路信息了
在這里插入圖片描述

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

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

相關文章

快速判斷出485從站設備是否支持MODBUS RTU無線通訊

對于變頻器和儀表設備,都支持485串口通訊,那么怎么判斷從站設備支持那種協議呢?通常分為兩種方式去判斷:1.從設備參數參看2.從設備通訊報文查看。本次文章以以臺達MH300系列變頻器為例。 1.從設備通訊參數查看 使用設備之前一定…

資料如何打印更省錢

在日常工作和學習中,我們經常需要打印各種資料。然而,隨著打印成本的不斷提高,如何更省錢地打印資料成為了大家關注的焦點。今天,就為大家分享一些資料打印的省錢技巧,并推薦一個省錢又省心的打印平臺。 首先&#xff…

【話題】軟件開發的航海圖:程序員的實用神器探秘

大家好,我是全棧小5,歡迎閱讀小5的系列文章,這是《話題》系列文章 目錄 背景一、代碼編寫二、版本控制三、測試與調試四、部署與運維五、總結文章推薦 背景 在軟件開發的廣闊海洋中,每一位程序員都是一位勇敢的航海家&#xff0c…

大模型日報2024-05-13

大模型日報 2024-05-13 大模型資訊 谷歌推出Gemini生成式AI平臺 摘要: 生成式人工智能正在改變我們與技術的互動方式。谷歌最近推出了名為Gemini的新平臺,該平臺代表了其在生成式AI領域的最新進展。Gemini平臺集成了一系列先進的工具和功能,旨在為用戶提…

什么是圖片的像素與分辨率?

什么是像素像素是組成圖像的最小單元,把圖片放大到一定程度,你可以看到許多小方塊,一個方塊就是一個像素,這些小方塊都有一個明確的位置和被分配的色彩數值一個個的小方塊拼合起來,就決定圖像所呈現出來的樣子。 像素…

數據結構-棧的講解

棧的概念及結構 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。 進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底(因為先進后出)。棧中的數據元素遵守后進先出LIFO(Last In Firs…

學習注意力機制并將其應用到網絡中

什么是注意力機制 注意力機制的核心重點就是讓網絡關注到它更需要關注的地方。 當我們使用卷積神經網絡去處理圖片的時候,我們會更希望卷積神經網絡去注意應該注意的地方,而不是什么都關注,我們不可能手動去調節需要注意的地方,…

【Pytest官方文檔翻譯及學習】2.1 如何調用pytest

目錄 2.1 如何調用pytest 2.1.1 指定要運行的測試 2.1.2 獲取有關版本、選項名稱、環境變量的幫助 2.1.3 分析測試執行時間 2.1.4 管理加載插件 2.1.5 調用pytest的其他方式 2.1 如何調用pytest 2.1.1 指定要運行的測試 Pytest支持幾種從命令行運行和選擇測試的方法。、…

證明力引導算法forceatlas2為什么不是啟發式算法

一、基本概念 吸引力 F a ( n i ) ∑ n j ∈ N c t d ( n i ) ω i , j d E ( n i , n j ) V i , j \displaystyle \bm{F}_a(n_i) \sum_{n_j \in \mathcal{N}_{ctd}(n_i)} \omega_{i,j} \; d_E(n_i,n_j) \bm{V}_{i,j} Fa?(ni?)nj?∈Nctd?(ni?)∑?ωi,j?dE?(ni?,nj?…

class常量池、運行時常量池和字符串常量池的關系

類常量池、運行時常量池和字符串常量池這三種常量池,在Java中扮演著不同但又相互關聯的角色。理解它們之間的關系,有助于深入理解Java虛擬機(JVM)的內部工作機制,尤其是在類加載、內存分配和字符串處理方面。 類常量池…

MinCED:注釋CRISPRs

GitHub - ctSkennerton/minced: Mining CRISPRs in Environmental Datasets 安裝 git clone http://github.com/ctSkennerton/minced cd minced make 使用 gunzip -k * cat *.fa > all_MAG_contig.fasta /home/zhongpei/hard_disk_sda2/zhongpei/Software/minced/minced…

NeurIPS‘24 截稿日期逼近 加拿大溫哥華邀你共赴盛會

會議之眼 快訊 第38屆NeurIPS24(Conference and Workshop on Neural Information Processing Systems)即神經信息處理系統研討會將于 2024 年 12月9日-15日在加拿大溫哥華會議中心舉行! NeurIPS 每一年都是全球AI領域的一場盛宴,吸引著來自世界各地的頂…

暴雨信息:IT是新質生產力的賦能者

5月11日下午,2024全球徽商上海論壇在上海國際會議中心舉辦。暴雨信息孫輝在會上發表歡迎辭。孫輝在致辭和會后接受采訪時表示,發展新質生產力要以“智”提質,發揮人工智能作為培育新質生產力的引擎作用,通過推廣混合式人工智能&am…

【小白誤闖】Activiti 框架你不得不知道的一些事

Activiti 是一個輕量級的、以Java為中心的開源工作流和業務流程管理(BPM)平臺。它允許用戶在業務應用程序中定義、執行和監控業務流程。以下是Activiti的核心組件: 8個核心組件概述 Activiti Engine:這是Activiti最核心的部分&am…

Java 面試問題及答案

Java 面試問題及答案 問題 1: 什么是Java虛擬機(JVM)?請簡述其主要組成部分及其作用。 回答: Java虛擬機(JVM)是一個可以執行Java字節碼的虛擬計算機。它是Java平臺的核心組成部分,使得Java能夠實現其核心特性之一&a…

Elasticsearch映射定義

文章目錄 認識映射元字段數據類型1.基本數據類型2.復雜數據類型專用數據類型多字段類型 認識映射 映射類似于關系型數據庫中的Schema(模式)。Schema在關系型數據庫中是指庫表包含的字段及字段存儲類型等基礎信息。 映射定義由兩部分組成:元…

一些python包缺失帶來的報錯及解決辦法

描述 一些python包缺失帶來的報錯及解決辦法 安裝 ModuleNotFoundError: No module named cv2 pip install opencv-pythonModuleNotFoundError: No module named torch 我的CSDN博客ModuleNotFoundError: No module named colorama pip install coloramaModuleNotFoundError…

5.10.8 Transformer in Transformer

Transformer iN Transformer (TNT)。具體來說,我們將局部補丁(例如,1616)視為“視覺句子”,并將它們進一步劃分為更小的補丁(例如,44)作為“視覺單詞”。每個單詞的注意力將與給定視…

信號和槽基本概念

🐌博主主頁:🐌?倔強的大蝸牛🐌? 📚專欄分類:QT??感謝大家點贊👍收藏?評論?? 目錄 一、概述 二、信號的本質 三、槽的本質 一、概述 在 Qt 中,用戶和控件的每次交互過程稱…

Bootloader+升級方案

隨著設備的功能越來越強大,系統也越來越復雜,產品升級也成為了開發過程不可或缺的一道程序。在工程應用中,如何在不更改硬件的前提下通過軟件的方式實現產品升級。通過Bootloader來實現固件的升級是一種極好的方式,Bootloader是單…