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