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 版的方法,请参见准备工作。