ACK提供了Nginx-Ingress-tracing链路追踪功能,支持将集群的Nginx Ingress Controller组件的链路信息上报至可观测链路 OpenTelemetry 版。可观测链路 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 | 不支持 | 支持 |
操作步骤
您需要根据实际的Nginx Ingress Controller版本支持情况选择相应的操作步骤。
OpenTelemetry
步骤一:在可观测链路 OpenTelemetry 版中获取接入点信息
新版控制台
登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心。
在开源框架区域单击OpenTelemetry卡片。
在弹出的OpenTelemetry面板中选择数据需要上报的地域。
记录gRPC上报方式的接入点信息。
说明因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。
旧版控制台
在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。
在页面顶部选择需要接入的地域。
在集群信息区域打开显示Token开关,在客户端采集工具区域单击OpenTelemetry,然后记录gRPC上报方式的接入点信息。
说明因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。
步骤二:在ACK的Ingress中开启可观测链路 OpenTelemetry 版服务
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索
nginx-ingress-controller
,然后单击编辑。在编辑页面上方,选中nginx-ingress-controller容器,并在环境变量页签中单击新增添加以下环境变量。
类型
变量名称
变量/变量引用
描述
自定义
OTEL_EXPORTER_OTLP_HEADERS
authentication=<鉴权Token>
使用步骤一:在可观测链路 OpenTelemetry 版中获取接入点信息中获取的鉴权Token,例如
authentication=bfXXXXXXXe@7bXXXXXXX1_bXXXXXe@XXXXXXX1
。添加完成后,单击编辑页面右侧栏的更新,然后在弹框中单击确定。
在左侧导航栏,选择
。在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索
nginx-configuration
,然后单击nginx-configuration操作列的编辑。在编辑面板单击添加,增加以下配置,然后单击确定。
名称
描述
取值
示例值
enable-opentelemetry
是否启用OpenTelemetry链路追踪。
true:表示启用。
false:表示不启用。
true
main-snippet
-
env OTEL_EXPORTER_OTLP_HEADERS;
env OTEL_EXPORTER_OTLP_HEADERS;
otel-service-name
服务名称。
自定义。
nginx-ingress
otlp-collector-host
gRPC上报点域名。
使用步骤一:在可观测链路 OpenTelemetry 版中获取接入点信息中获取的阿里云VPC网络接入点,并删除
http://
和端口号,例如tracing-analysis-XX-XX-XXXXX.aliyuncs.com
。tracing-analysis-XX-XX-XXXXX.aliyuncs.com
otlp-collector-port
gRPC上报点端口。
根据实际值填写。
8090
opentelemetry-trust-incoming-span
是否信任来自其他服务或系统的调用链。
true:表示信任。
false:表示不信任。
true
opentelemetry-operation-name
调用链Span格式。
HTTP $request_method $service_name $uri
HTTP $request_method $service_name $uri
otel-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
步骤三:在可观测链路 OpenTelemetry 版上查看调用链路数据
在控制台左侧导航栏中单击应用列表。
在应用列表页面顶部选择地域,然后单击应用名称nginx-ingress。
在应用详情页面查看链路信息。
在应用概览页签,查看请求数、错误数等信息。
在调用链分析页签,查看Trace列表、平均耗时等信息。
在调用链分析页签,单击TraceId,查看Trace详情。
OpenTracing
步骤一:在可观测链路 OpenTelemetry 版中获取接入点信息
新版控制台
登录可观测链路 OpenTelemetry 版控制台,在左侧导航栏单击接入中心。
在开源框架区域单击Zipkin卡片。
说明根据实际使用的客户端采集工具获取接入点信息,本文以Zipkin为例。
在弹出的Zipkin面板中选择需要上报数据的地域。
记录接入点信息。
说明因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。
旧版控制台
在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。
在页面顶部选择需要接入的地域。
在集群信息区域打开显示Token开关,在客户端采集工具区域单击Zipkin,然后记录接入点信息。
说明因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。
步骤二:在ACK的Ingress中开启可观测链路 OpenTelemetry 版服务
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索
nginx-configuration
,然后单击nginx-configuration操作列的编辑。在编辑面板单击添加,增加以下配置,然后单击确定。
名称
描述
取值
示例值
enable-opentracing
是否开启链路追踪。
true:开启链路追踪。
false:关闭链路追踪。
true
zipkin-service-name
服务名称。
自定义。
nginx-ingress
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?
。
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
步骤三:在可观测链路 OpenTelemetry 版上查看调用链路数据
在控制台左侧导航栏中单击应用列表。
在应用列表页面顶部选择地域,然后单击应用名称nginx。
在应用详情页面左侧导航栏中单击接口调用,然后在右侧区域,查看链路信息。
在概览页签中,展示了链路拓扑信息。
单击调用链路页签,查看该应用耗时最长的至多100个调用链路。关于更多链路数据,请参见接口调用。
在调用链路页签中,单击TraceId,查看链路详情。
切换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;
加载环境变量。
相关文档
关于可观测链路 OpenTelemetry 版,请参见什么是可观测链路 OpenTelemetry 版。
关于ACK,请参见什么是容器服务 Kubernetes 版。
不同的链路追踪方式,例如Zipkin、Jaeger、SkyWalking等,需要在ACK的nginx-configuration配置不同的字段。关于更多接入可观测链路 OpenTelemetry 版的方法,请参见准备工作。