實現(xiàn)Nginx Ingress Controller組件的鏈路追蹤
ACK提供了Nginx-Ingress-tracing鏈路追蹤功能,支持將集群的Nginx Ingress Controller組件的鏈路信息上報至可觀測鏈路 OpenTelemetry 版。可觀測鏈路 OpenTelemetry 版可以對鏈路信息進行實時聚合計算和持久化,形成鏈路明細、實時拓撲等監(jiān)控數(shù)據(jù),以便您進行Nginx Ingress Controller組件的問題排查與診斷。
前提條件
已安裝了Nginx Ingress Controller組件。具體操作,請參見管理Nginx Ingress Controller組件。
版本說明
在不同版本的Nginx Ingress Controller組件中,鏈路追蹤的支持情況各不相同,您需要根據(jù)對應版本選擇相應的配置方式。
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 | 不支持 | 支持 |
操作步驟
您需要根據(jù)實際的Nginx Ingress Controller版本支持情況選擇相應的操作步驟。
OpenTelemetry
步驟一:在可觀測鏈路 OpenTelemetry 版中獲取接入點信息
新版控制臺
登錄可觀測鏈路 OpenTelemetry 版控制臺,在左側(cè)導航欄單擊接入中心。
在開源框架區(qū)域單擊OpenTelemetry卡片。
在彈出的OpenTelemetry面板中選擇數(shù)據(jù)需要上報的地域。
記錄gRPC上報方式的接入點信息。
說明因為Nginx Ingress Controller組件部署在阿里云上,且組件所在地域與可觀測鏈路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC網(wǎng)絡(luò)接入點,否則選擇公網(wǎng)接入點。
舊版控制臺
在左側(cè)導航欄單擊集群配置,然后在右側(cè)頁面單擊接入點信息頁簽。
在頁面頂部選擇需要接入的地域。
在集群信息區(qū)域打開顯示Token開關(guān),在客戶端采集工具區(qū)域單擊OpenTelemetry,然后記錄gRPC上報方式的接入點信息。
說明因為Nginx Ingress Controller組件部署在阿里云上,且組件所在地域與可觀測鏈路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC網(wǎng)絡(luò)接入點,否則選擇公網(wǎng)接入點。
步驟二:在ACK的Ingress中開啟可觀測鏈路 OpenTelemetry 版服務
登錄容器服務管理控制臺,在左側(cè)導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇 。
在配置項頁面上方設(shè)置命名空間為kube-system,然后在名稱搜索框中搜索nginx-ingress-controller,然后單擊編輯。
在編輯頁面上方,選中nginx-ingress-controller容器,并在環(huán)境變量頁簽中單擊新增添加以下環(huán)境變量。
類型
變量名稱
變量/變量引用
描述
自定義
OTEL_EXPORTER_OTLP_HEADERS
authentication=<鑒權(quán)Token>
使用步驟一:在可觀測鏈路 OpenTelemetry 版中獲取接入點信息中獲取的鑒權(quán)Token,例如
authentication=bfXXXXXXXe@7bXXXXXXX1_bXXXXXe@XXXXXXX1
。添加完成后,單擊編輯頁面右側(cè)欄的更新,然后在彈框中單擊確定。
在左側(cè)導航欄,選擇配置管理 > 配置項。
在配置項頁面上方設(shè)置命名空間為kube-system,然后在名稱搜索框中搜索nginx-configuration,然后單擊nginx-configuration操作列的編輯。
在編輯面板單擊添加以下配置,然后單擊確定。
名稱
描述
值
enable-opentelemetry
是否啟用OpenTelemetry鏈路追蹤。
true
表示啟用。main-snippet
-
env OTEL_EXPORTER_OTLP_HEADERS;
otel-service-name
自定義的服務名稱。
例如nginx-ingress。
otlp-collector-host
gRPC上報點域名。
使用步驟一:在可觀測鏈路 OpenTelemetry 版中獲取接入點信息中獲取的阿里云VPC網(wǎng)絡(luò)接入點,并刪除
http://
和端口號。例如tracing-analysis-XX-XX-XXXXX.aliyuncs.com。otlp-collector-port
gRPC上報點端口。
8090
opentelemetry-trust-incoming-span
是否信任來自其他服務或系統(tǒng)的調(diào)用鏈。
true
表示信任。opentelemetry-operation-name
調(diào)用鏈Span格式。
HTTP $request_method $service_name $uri
步驟三:在可觀測鏈路 OpenTelemetry 版上查看調(diào)用鏈路數(shù)據(jù)
在控制臺左側(cè)導航欄中單擊應用列表。
在應用列表頁面頂部選擇地域,然后單擊應用名稱nginx-ingress。
在應用詳情頁面查看鏈路信息。
在應用概覽頁簽,查看請求數(shù)、錯誤數(shù)等信息。
在調(diào)用鏈分析頁簽,查看Trace列表、平均耗時等信息。
在調(diào)用鏈分析頁簽,單擊TraceId,查看Trace詳情。
OpenTracing
步驟一:在可觀測鏈路 OpenTelemetry 版中獲取接入點信息
新版控制臺
登錄可觀測鏈路 OpenTelemetry 版控制臺,在左側(cè)導航欄單擊接入中心。
在開源框架區(qū)域單擊Zipkin卡片。
說明根據(jù)實際使用的客戶端采集工具獲取接入點信息,本文以Zipkin為例。
在彈出的Zipkin面板中選擇數(shù)據(jù)需要上報的地域。
記錄接入點信息。
說明因為Nginx Ingress Controller組件部署在阿里云上,且組件所在地域與可觀測鏈路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC網(wǎng)絡(luò)接入點,否則選擇公網(wǎng)接入點。
舊版控制臺
在左側(cè)導航欄單擊集群配置,然后在右側(cè)頁面單擊接入點信息頁簽。
在頁面頂部選擇需要接入的地域。
在集群信息區(qū)域打開顯示Token開關(guān),在客戶端采集工具區(qū)域單擊Zipkin,然后記錄接入點信息。
說明因為Nginx Ingress Controller組件部署在阿里云上,且組件所在地域與可觀測鏈路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC網(wǎng)絡(luò)接入點,否則選擇公網(wǎng)接入點。
步驟二:在ACK的Ingress中開啟可觀測鏈路 OpenTelemetry 版服務
登錄容器服務管理控制臺,在左側(cè)導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側(cè)導航欄,選擇 。
在配置項頁面上方設(shè)置命名空間為kube-system,然后在名稱搜索框中搜索nginx-configuration,然后單擊nginx-configuration操作列的編輯。
配置Zipkin鏈路追蹤方式。
在編輯面板單擊添加,設(shè)置名稱為zipkin-collector-host ,值為步驟一:在可觀測鏈路 OpenTelemetry 版中獲取接入點信息獲取的接入點信息。
重要該接入點信息需要去掉
http://
,并在末尾加上問號。示例如下:原始接入點信息為
http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans
。修改后并輸入值為
tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans?
。
開啟鏈路追蹤服務。
單擊添加,設(shè)置名稱為enable-opentracing,值為true,然后單擊確定。
步驟三:在可觀測鏈路 OpenTelemetry 版上查看調(diào)用鏈路數(shù)據(jù)
在控制臺左側(cè)導航欄中單擊應用列表。
在應用列表頁面頂部選擇地域,然后單擊應用名稱nginx。
在應用詳情頁面左側(cè)導航欄中單擊接口調(diào)用,然后在右側(cè)區(qū)域,查看鏈路信息。
在概覽頁簽中,展示了鏈路拓撲信息。
單擊調(diào)用鏈路頁簽,查看該應用耗時最長的至多100個調(diào)用鏈路。關(guān)于更多鏈路數(shù)據(jù),請參見接口調(diào)用。
在調(diào)用鏈路頁簽中,單擊TraceId,查看鏈路詳情。
切換OpenTelemetry透傳協(xié)議(可選)
采取OpenTelemetry方式實現(xiàn)Nginx Ingress Controller鏈路追蹤時,OpenTelemetry默認識別并向下游傳遞W3C Trace Context格式的Trace上下文。如果您的前端應用和后端應用采用了其他協(xié)議,例如Jaeger或者Zipkin,需要修改OpenTelemetry的透傳格式,才能使前端應用、Nginx Ingress以及后端應用的調(diào)用鏈串聯(lián)起來。下面介紹如何修改Nginx Ingress Controller所使用的OpenTelemetry透傳協(xié)議。
請在步驟二第4步:在環(huán)境變量中添加OTEL_EXPORTER_OTLP_HEADERS的基礎(chǔ)上添加OTEL_PROPAGATORS環(huán)境變量,保存后重新部署nginx-ingress-controller。
環(huán)境變量名
值
說明
OTEL_PROPAGATORS
tracecontext,baggage,b3,jaeger
透傳格式。更多信息,請參見OpenTelemetry指定透傳Header格式。
請在步驟二第7步:添加nginx-configuration配置的基礎(chǔ)上修改main-snippet配置,使OTEL_PROPAGATORS環(huán)境變量生效。
配置名
值
說明
main-snippet
env OTEL_EXPORTER_OTLP_HEADERS; env OTEL_PROPAGATORS
加載環(huán)境變量。
相關(guān)文檔
關(guān)于可觀測鏈路 OpenTelemetry 版,請參見什么是可觀測鏈路 OpenTelemetry 版。
關(guān)于ACK,請參見什么是容器服務 Kubernetes 版。
不同的鏈路追蹤方式,例如Zipkin、Jaeger、SkyWalking等,需要在ACK的nginx-configuration配置不同的字段。關(guān)于更多接入可觀測鏈路 OpenTelemetry 版的方法,請參見準備工作。