ACK提供了Nginx-Ingress-tracing鏈路追蹤功能,支援將ACK叢集的Nginx Ingress Controller組件的鏈路資訊上報至Managed Service for OpenTelemetry。Managed Service for OpenTelemetry可以對鏈路資訊進行即時彙總計算和持久化,形成鏈路明細、即時拓撲等監控資料,以便您進行Nginx Ingress Controller組件的問題排查與診斷。
前提條件
-
已安裝Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
版本說明
在不同版本的Nginx Ingress Controller組件中,鏈路追蹤的支援情況各不相同,您需要根據對應版本選擇相應的配置方式。
|
Nginx Ingress Controller版本 |
OpenTelemetry |
OpenTracing |
|
≥ v1.10.2-aliyun.1 |
支援 |
不支援 |
|
v1.9.3-aliyun.1 |
支援 |
支援 |
|
v1.8.2-aliyun.1 |
支援 |
支援 |
|
< v1.8.2-aliyun.1 |
不支援 |
支援 |
操作步驟
OpenTelemetry
步驟一:在ARMS中擷取存取點資訊
-
登入ARMS控制台,在左側導覽列單擊接入中心。
-
在服务端应用地區單擊OpenTelemetry卡片。
-
在彈出的OpenTelemetry面板中選擇資料需要上報的地區。
-
記錄存取點資訊。在參數配置地區,串連方式選擇阿里雲內網方式,上報方式選擇gRPC。在存取點資訊地區擷取 gRPC 存取點地址(例如
http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090)和鑒權 Token。說明因為Nginx Ingress Controller組件部署在阿里雲上,且組件所在地區與Managed Service for OpenTelemetry接入配置中的地區一致,所以使用阿里雲VPC網路存取點,否則選擇公網存取點。
步驟二:在ACK的Ingress中開啟Managed Service for OpenTelemetry服務
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在配置項頁面上方設定命名空間為kube-system,然後在名稱搜尋方塊中搜尋nginx-ingress-controller,然後單擊編輯。
-
在编辑頁面上方,選中nginx-ingress-controller容器,並在环境变量頁簽中單擊新增添加以下環境變數。
類型
變數名稱
變數/變數引用
描述
自訂
OTEL_EXPORTER_OTLP_HEADERS
authentication=<鑒權Token>使用步驟一:在ARMS中擷取存取點資訊中擷取的鑒權Token,例如
authentication=bfXXXXXXXe@7bXXXXXXX1_bXXXXXe@XXXXXXX1。添加完成後,單擊编辑頁面右側欄的更新,然後在彈框中單擊确定。
-
在左側導覽列,選擇組態管理 > 配置項。
-
在配置項頁面上方設定命名空間為kube-system,然後在名稱搜尋方塊中搜尋nginx-configuration,然後單擊nginx-configuration操作列的編輯。
-
在編輯面板單擊添加以下配置,然後單擊確定。
名稱
描述
取值
樣本值
enable-opentelemetry
是否啟用OpenTelemetry鏈路追蹤。
-
true:表示啟用。
-
false:表示不啟用。
truemain-snippet
-
env OTEL_EXPORTER_OTLP_HEADERS;env OTEL_EXPORTER_OTLP_HEADERS;otel-service-name
服務名稱。
自訂。
nginx-ingress
otlp-collector-host
gRPC上報點網域名稱。
使用步驟一:在ARMS中擷取存取點資訊中擷取的阿里雲VPC網路存取點,並刪除
http://和連接埠號碼,例如tracing-analysis-XX-XX-XXXXX.aliyuncs.com。tracing-analysis-XX-XX-XXXXX.aliyuncs.comotlp-collector-port
gRPC上報點連接埠。
根據實際值填寫。
8090opentelemetry-trust-incoming-span
是否信任來自其他服務或系統的調用鏈。
-
true:表示信任。
-
false:表示不信任。
trueopentelemetry-operation-name
調用鏈Span格式。
HTTP $request_method $service_name $uriHTTP $request_method $service_name $uriotel-sampler
採樣規則。
參數資訊,請參見opentelemetry。
TraceIdRatioBased
otel-sampler-ratio
採樣率。
取值為0~1之間,最多可設定到小數點後兩位。0表示不採樣,1表示全部採樣。
更多參數資訊,請參見opentelemetry。
0.1
otel-sampler-parent-based
是否繼承上遊採樣標識。
-
false:預設值,表示不繼承上遊採樣標識。otel-sampler和otel-sampler-ratio將會生效。
-
true:表示繼承上遊採樣標識。otel-sampler和otel-sampler-ratio不會生效,會複用上遊採樣標識。
更多參數資訊,請參見opentelemetry。
false
-
步驟三:在ARMS上查看調用鏈路資料
-
登入ARMS控制台,在左側導覽列中單擊。
-
在应用列表頁面頂部選擇地區,然後單擊應用程式名稱nginx-ingress。
-
在應用詳情頁面查看鏈路資訊。
-
在应用概览頁簽,查看請求數、錯誤數等資訊。

-
在调用链分析頁簽,查看Trace列表、平均耗時等資訊。調用鏈分析頁面上方展示調用次數、錯誤數和耗時圖表,下方Trace列表包含TraceId、介面名稱、應用程式名稱、耗時、狀態(如
200或404)等欄位。 -
在调用链分析頁簽,單擊TraceId,查看Trace詳情。單擊某條Trace進入詳情頁面,可查看Span的時間軸視圖和詳情資訊。Span詳情包括應用程式名稱(如nginx-ingress)、介面名(如HTTP GET my-nginx-svc /)、開始和結束時間、耗時等。Attributes標籤下展示HTTP屬性(如
http.method、http.status_code、http.host、http.user_agent)和網路資訊(如net.host.port)。
-
OpenTracing
步驟一:在ARMS中擷取存取點資訊
-
登入ARMS控制台,在左側導覽列單擊接入中心。
-
在服务端应用地區單擊Zipkin卡片。
說明根據實際使用的用戶端採集工具擷取存取點資訊,本文以Zipkin為例。
-
在彈出的Zipkin面板中選擇資料需要上報的地區。
-
記錄存取點資訊。在串連方式中選擇阿里雲內網方式,頁面展示v2 版本存取點和v1 版本存取點兩個阿里雲 vpc 網路存取點 URL,記錄v1 版本存取點的 URL 備用。
說明因為Nginx Ingress Controller組件部署在阿里雲上,且組件所在地區與Managed Service for OpenTelemetry接入配置中的地區一致,所以使用阿里雲VPC網路存取點,否則選擇公網存取點。
步驟二:在ACK的Ingress中開啟Managed Service for OpenTelemetry服務
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在配置項頁面上方設定命名空間為kube-system,然後在名稱搜尋方塊中搜尋nginx-configuration,然後單擊nginx-configuration操作列的编辑。
-
在编辑面板單擊添加,增加以下配置,然後單擊確定。
名稱
描述
取值
樣本值
enable-opentracing
是否開啟鏈路追蹤。
-
true:開啟鏈路追蹤。
-
false:關閉鏈路追蹤。
true
zipkin-service-name
服務名稱。
自訂。
nginx-ingress
zipkin-collector-host
上報點網域名稱。
修改步驟一:在ARMS中擷取存取點資訊中擷取的存取點資訊,去掉
http://,並在末尾加上問號。樣本如下:-
原始存取點資訊為
http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans。 -
修改後並輸入值為
tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans?。
tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans?opentracing-trust-incoming-span
是否信任來自其他服務或系統的調用鏈。
-
true:表示信任。
-
false:表示不信任。
true
zipkin-sample-rate
採樣率。
取值為0~1之間,最多可設定到小數點後兩位。0表示不採樣,1表示全部採樣。
0.1
-
步驟三:在ARMS上查看調用鏈路資料
-
登入ARMS控制台,在左側導覽列單擊。
-
在应用列表頁面頂部選擇地區,然後單擊應用程式名稱nginx。
-
在應用詳情頁面左側導覽列中單擊介面調用,然後在右側地區,查看鏈路資訊。
-
在概览頁簽中,展示了鏈路拓撲資訊。頁麵包含概覽、鏈路上遊、鏈路下遊、調用鏈路四個頁簽,預設顯示概覽頁簽,展示當前應用的服務拓撲及調用關係。
-
單擊調用鏈路頁簽,查看該應用耗時最長的至多100個調用鏈路。關於更多鏈路資料,請參見介面調用。切換至 調用鏈路 頁簽,頁面展示調用記錄表格,包含 產生時間、Span名稱、主機/ip、耗時、狀態、TraceId、操作 等列,支援按 耗時大於 和 異常 條件式篩選。
-
在調用鏈路頁簽中,單擊TraceId,查看鏈路詳情。調用鏈路的 Trace詳情 頁面展示 TraceID、開始時間和總耗時,並以瀑布圖呈現各 Span 的層級和相對耗時。例如一次
/api/currency請求依次經過 nginx-otlp、frontendproxy、frontend、currencyservice 等服務,總耗時約 15ms,每個 Span 以水平橫條圖標識其在整條鏈路中的耗時佔比。
-
切換OpenTelemetry透傳協議(可選)
採取OpenTelemetry方式實現Nginx Ingress Controller鏈路追蹤時,OpenTelemetry預設識別並向下遊傳遞W3C Trace Context格式的Trace上下文。如果您的前端應用和後端應用採用了其他協議,例如Jaeger或者Zipkin,需要修改OpenTelemetry的透傳格式,才能使前端應用、Nginx Ingress以及後端應用的調用鏈串聯起來。下面介紹如何修改Nginx Ingress Controller所使用的OpenTelemetry透傳協議。
-
請在步驟二第4步:在環境變數中添加OTEL_EXPORTER_OTLP_HEADERS的基礎上添加OTEL_PROPAGATORS環境變數,儲存後重新部署nginx-ingress-controller。
環境變數名
值
說明
OTEL_PROPAGATORS
tracecontext,baggage,b3,jaeger
透傳格式。更多資訊,請參見OpenTelemetry指定透傳Header格式。
-
請在步驟二第7步:添加nginx-configuration配置的基礎上修改main-snippet配置,使OTEL_PROPAGATORS環境變數生效。
配置名
值
說明
main-snippet
env OTEL_EXPORTER_OTLP_HEADERS; env OTEL_PROPAGATORS
載入環境變數。
相關文檔
-
關於Managed Service for OpenTelemetry,請參見什麼是可觀測鏈路 OpenTelemetry 版。
-
關於ACK,請參見什麼是Container Service Kubernetes 版。
-
不同的鏈路追蹤方式,例如Zipkin、Jaeger、SkyWalking等,需要在ACK的nginx-configuration配置不同的欄位。關於更多接入Managed Service for OpenTelemetry的方法,請參見準備工作。