`ngx_otel_module` NGINX OpenTelemetry 分布式追蹤實戰

1. 模塊簡介

ngx_otel_module 為 NGINX(開源版 1.25.3+,商業版 1.23.4+)提供了 OpenTelemetry(OTel)分布式追蹤支持,能夠:

  • 自動采集 HTTP 請求的生命周期 Span
  • 上下文傳播:兼容 W3C traceparent / tracestate
  • OTLP/gRPC 導出:將 Span 批量上傳到 OTel Collector 或云端后端

模塊的源碼和安裝說明見官方倉庫(GitHub: nginx-module-otel)。

2. 安裝與加載

2.1 開源版預構建包

# Debian/Ubuntu
apt-get install nginx-module-otel
# 或者在源碼編譯時
./configure \--add-dynamic-module=path/to/ngx_otel_module \[其他選項…]
make && make install

2.2 商業版(NGINX Plus)

# 已包含 MODULE
# 只需在 nginx.conf 中 load_module 即可
load_module modules/ngx_otel_module.so;

3. 核心指令詳解

全部指令 僅在 http(或 serverlocation)上下文有效。

3.1 OTel 導出器配置

http {otel_exporter {endpoint    localhost:4317;            # OTLP/gRPC 端點trusted_certificate /etc/ssl/ca.pem;   # TLS 驗證 CAheader      "X-API-Token" "token";     # 自定義請求頭interval    5s;                        # 最大發送間隔(默認 5s)batch_size  512;                       # 最大 Span 批量大小batch_count 4;                         # 最大并發批次數}
}
  • TLS 支持(http|https):// + trusted_certificate
  • 請求頭:用于上傳鑒權
  • 批量控制:調節吞吐與資源消耗平衡

3.2 服務與資源屬性

http {otel_service_name my-nginx-service;      # resource.service.nameotel_resource_attr deployment "blue";    # 自定義 resource 屬性
}
  • otel_service_name:設置 service.name(默認 unknown_service:nginx
  • otel_resource_attr:任意 key/value,標注部署信息、環境等

3.3 啟用追蹤與上下文傳播

server {listen 8080;otel_trace         on;                   # 開啟追蹤otel_trace_context inject;               # 強制注入/覆蓋 traceparentproxy_pass http://backend;
}
  • otel_trace:可用變量控制,如基于 split_clients 動態采樣

  • otel_trace_context

    • extract:僅提取外部上下文
    • inject:強制為下游請求注入新的或覆蓋已有上下文
    • propagate:提取并更新
    • ignore:不處理

3.4 自定義 Span 名稱與屬性

location /api/ {otel_span_name "API $uri";              # 自定義 Span 名稱otel_span_attr user_id   $cookie_uid;    # 添加自定義 Span 屬性otel_span_attr  debug    "true";
}
  • 默認 Span 名稱為 NGINX location
  • 支持變量,結合自定義邏輯埋點

4. 默認 Span 屬性 & 內置變量

模塊自動為每個 HTTP 請求 Span 設置一系列標準屬性:

http.method
http.target
http.route
http.scheme
http.flavor
http.user_agent
http.request_content_length
http.response_content_length
http.status_code
net.host.name
net.host.port
net.sock.peer.addr
net.sock.peer.port

同時提供以下內置變量,可用于自定義屬性或采樣邏輯:

變量含義
$otel_trace_idTrace 標識符,如 56552bc4daa3bf39...
$otel_span_id當前 Span ID,如 4c0b8531ec38ca59
$otel_parent_id父 Span ID
$otel_parent_sampled父 Span 的 Sampled 標志(10

5. 動態采樣示例

結合 split_clients 模塊,實現比例采樣:

# 按 trace_id 哈希 10% 流量采樣
split_clients "$otel_trace_id" $ratio_sampler {10% on;*   off;
}server {otel_trace         $ratio_sampler;     # 動態開關otel_trace_context propagate;proxy_pass http://backend;
}

6. 性能與最佳實踐

  1. 批量與間隔

    • batch_sizeinterval 配合,需根據流量規模和后端吞吐調優。
  2. 上下文傳播模式

    • inject 覆蓋性最強,適用于關閉無痕跡客戶端;
    • extract 用于被動接入已有追蹤鏈;
  3. 自定義資源屬性

    • 在多租戶或多環境部署中,務必設置 otel_resource_attr 標注環境或版本。
  4. 監控 OTel Agent

    • 定期檢查 Collector 或后端的遙測接收指標,避免上報端點故障導致數據丟失。

7. 總結

ngx_otel_module 通過零侵入的方式,將 OpenTelemetry 分布式追蹤能力無縫集成到 NGINX 中。

  • 自動化 Span:從入口到代理,全鏈路捕獲 HTTP 請求細節。
  • 靈活控制:支持自定義 Span 名稱、屬性、采樣策略。
  • 標準導出:兼容 OTLP/gRPC,方便對接主流監控與 APM 工具。

立即啟用:在你的 NGINX 配置中引入 ngx_otel_module,讓你的服務從“黑盒”變“白盒”,為性能調優和故障分析提供可靠的追蹤數據!

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

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

相關文章

Vue+TypeScript 枚舉(Enum)的使用規范

在 TypeScript 中,枚舉(Enum)的命名應遵循以下規范,這些規范結合了 TypeScript 官方建議和行業最佳實踐: 枚舉命名規范(TypeScript/Vue 項目) 基本命名規則: 使用 PascalCase&#…

一個完整的LSTM風光發電預測與并網優化方案,包含數據處理、模型構建、訓練優化、預測應用及系統集成實現細節

以下是一個完整的LSTM風光發電預測與并網優化方案,包含數據處理、模型構建、訓練優化、預測應用及系統集成實現細節: 風光發電功率預測與并網優化系統 基于LSTM的時間序列預測與儲能協同控制 第一部分:系統架構設計(1200字) 1.1 整體技術路線 #mermaid-svg-U5pxzefmzZ4s…

如何在 MX Linux 上安裝 Mint 的 Cinnamon 桌面 UI

如何在 MX Linux 上安裝 Mint 的 Cinnamon 桌面 UI 你是否想在 MX Linux 上安裝流行的 Linux Mint Cinnamon 圖形用戶界面?那么這里有一個教程…… Cinnamon 是一個類似 Windows 7 的界面,它默認安裝在 Linux Mint 操作系統中。它使 Mint 非常易于理解和使用,這也是 Mint …

OpenStack 入門

目錄 簡介 一、云計算與 OpenStack 基礎概念 1.1 云計算概述 1.2 OpenStack 簡介 二、OpenStack 單機環境部署 2.1 環境準備 2.2 部署前準備工作 2.3 在線部署 OpenStack(Train 版本) 三、通過 Dashboard 部署 OpenStack 的功能 3.1 登錄 Dash…

【Git】關于項目開發分支的使用規范

背景 在項目開發過程中,往往一個優秀的產品都會出現不斷的版本迭代,我時常在項目發布后對于如何結合后續更新的業務場景在分支上的應用沒有一個很好的辦法,一直也比較苦惱。目前項目的迭代場景如下,一個A項目,經過需求…

msquic的windows版本編譯

首先確保安裝cmake和powershell(需要6以上,本人升級到了7.5),vs(本人用的vs2022) powershell,默認是5,會編譯不成功,所以附帶一個升級的流程 $PSVersionTable.PSVersion …

批量文件重命名工具 OncePower ,永久免費!

軟件介紹 適用于Windows OncePower是一款Windows批量重命名工具,支持基本及高級匹配重命名,無需復雜正則。特色包括匹配修改、長度截取、日期命名、前綴后綴修改及TXT文件導入。支持保留特定內容、批量移動文件和刪除空文件夾。可保存設置,…

Python入門Day6.1:異常處理

一、什么是異常(Exception)? 異常是指程序運行過程中出現的錯誤情況。比如: 打開一個不存在的文件0作為除數列表索引越界類型轉換失敗 二、基本結構:try...except try:# 可能出錯的代碼 except 錯誤類型:# 出錯時執…

C++中的標準模板(STL)

C中的核心標準模板包含:容器、迭代器、算法、函數對象、適配器。 1.容器 容器提供了各種數據結構,包括向量(vector)、鏈表(list)、隊列(queue)、棧(stack)、集合(set)、映射(map)等,可以根據實際需求選擇合適的容器。 容器分為三大類&…

excel 待辦日歷軟件(需要宏)特別推薦

Excel待辦日歷軟件是一款基于Excel表格的日程管理工具,能夠幫助用戶更高效地管理待辦事項和日程安排。用戶可以在軟件中創建不同的任務列表,以便更好地進行管理和跟蹤。軟件還提供了日歷視圖,用戶可以直觀地查看和安排每日的任務,…

激活函數-sigmoid、tanh、relu、softmax對比

激活函數是神經網絡的核心組件,用于引入非線性特性,使網絡能夠學習復雜模式。以下從定義、作用、分類及應用場景進行詳細解析: 🔍 ??一、定義?? 激活函數(Activation Function)是作用于神經元輸出的?…

三步走實現嵌入式硬件與軟件開發

目錄 ? 一、嵌入式硬件與軟件的邊界(為你后面每階段安排任務打基礎) ? 二、三階段開發策略規劃(以你的三步走為主線) ??階段1:確定能做 → 外包技術顧問協助選型 + 需求拆解 + 采購建議 適用角色 關鍵目標 如何管理? 工具推薦 ??階段2:會做一些 → 小范圍…

ubuntu運行cursor

一.CURSOR官網下載AppImage文件 https://www.cursor.com/en/download 二、解壓 AppImage 繞過掛載機制 解決:默認使用Cursor.AppImage 會自動掛載臨時目錄在/tmp目錄下,出現沒有權限掛載的報錯問題 若掛載點仍不可寫,直接解壓 AppImage 運…

PTA天梯賽L1 071-080題目解析

目錄 1.L1-071 前世檔案 2.L1-072 刮刮彩票 3.L1-073 人與神 4.L1-074 兩小時學完C語言 5.L1-075 強迫癥 6.L1-076 降價提醒機器人 7.L1-077 大笨鐘的心情 8.L1-078 吉老師的回歸 9.L1-079 天梯賽的善良 10.L1-080 乘法口訣數列 1.L1-071 前世檔案 解析:…

git常用操作 --- idea編譯器 --- 公司實戰版

前言 雖然git的命令方式很靈活,但是還是不夠人性化,不夠方便。 如果對git操作不熟練特別容易犯迷,可能敲一會命令就不知道當前在干什么了,下一步要干什么。 下面,我將演示在Java開發中使用最常用最經典的idea編譯器來進行git操作,非常人性化和方便。 如果沒有安裝git和初始…

window顯示驅動開發—流輸出階段

流輸出 (SO) 階段可以在這些頂點到達光柵器之前將頂點流式傳輸到內存。 流輸出的運行方式類似于管道中的點擊。 即使數據繼續向下流向光柵器,也可以打開此點擊。 通過流輸出發送的數據連接到緩沖區。 這些緩沖區可以在后續傳遞上作為管道輸入進行循環。 流輸出的一…

備份docker desktop中的opengauss數據庫

文章目錄 備份docker desktop中的opengauss數據庫一、前提條件二、備份步驟三、注意事項四、自動化備份(可選)五、驗證備份 備份docker desktop中的opengauss數據庫 ? 以下是在 Docker Desktop 中備份 OpenGauss 數據庫(以你的環境為例&…

實時中值濾波 + 低通濾波 示例程序(STM32環境)

一、功能概述 本示例實現兩個濾波器: 中值濾波器(Median Filter):對短期異常值(如尖峰噪聲)有良好的抑制能力;低通濾波器(Low-Pass Filter):對數據進行平滑…

AtCoder Beginner Contest 409 題解

本文為AtCoder Beginner Contest 409 的詳細題解 目錄 題目A: 題目大意: 解題思路: 代碼(C): 題目B: 題目大意: 解題思路: 代碼(C): 題目C: 題目大意: 解題思路: 代碼(C): 題目D: 題目大意: 解題思路: 代碼(C): 題目E: 題目大意: 解題思路: 代碼(C): 題目A…

Spring @Environment 典型用法

簡單說:Spring 里沒有直接叫 Environment 的注解,更準確說常用的是 Autowired 注入 Environment 對象,或者結合 Value 配合 Environment 讀取配置 。 支持從以下來源讀取: 1、application.properties / .yaml 2、JVM 參數&#xf…