实现Nginx Ingress Controller组件的链路追踪

ACK提供了Nginx-Ingress-tracing链路追踪功能,支持将ACK集群的Nginx Ingress Controller组件的链路信息上报至可观测链路 OpenTelemetry 版可观测链路 OpenTelemetry 版可以对链路信息进行实时聚合计算和持久化,形成链路明细、实时拓扑等监控数据,以便您进行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中获取接入点信息

  1. 登录ARMS控制台,在左侧导航栏单击接入中心

  2. 服务端应用区域单击Zipkin卡片。

    说明

    根据实际使用的客户端采集工具获取接入点信息,本文以Zipkin为例。

  3. 在弹出的Zipkin面板中选择数据需要上报的地域。

  4. 记录接入点信息。zipkin-新版-中.jpg

    说明

    因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。

步骤二:在ACKIngress中开启可观测链路 OpenTelemetry 版服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索nginx-ingress-controller,然后单击编辑。

  4. 编辑页面上方,选中nginx-ingress-controller容器,并在环境变量页签中单击新增添加以下环境变量。

    类型

    变量名称

    变量/变量引用

    描述

    自定义

    OTEL_EXPORTER_OTLP_HEADERS

    authentication=<鉴权Token>

    使用步骤一:在ARMS中获取接入点信息中获取的鉴权Token,例如authentication=bfXXXXXXXe@7bXXXXXXX1_bXXXXXe@XXXXXXX1

    image

    添加完成后,单击编辑页面右侧栏的更新,然后在弹框中单击确定

  5. 在左侧导航栏,选择配置管理 > 配置项

  6. 在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索nginx-configuration,然后单击nginx-configuration操作列的编辑

  7. 编辑面板单击添加以下配置,然后单击确定

    名称

    描述

    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上查看调用链路数据

  1. 登录ARMS控制台,在左侧导航栏中单击应用监控 > 应用列表

  2. 应用列表页面顶部选择地域,然后单击应用名称nginx-ingress

  3. 在应用详情页面查看链路信息。

    • 应用概览页签,查看请求数、错误数等信息。应用概览-中.jpg

    • 调用链分析页签,查看Trace列表、平均耗时等信息。调用链分析-中.jpg

    • 调用链分析页签,单击TraceId,查看Trace详情。trace详情-中.jpg

OpenTracing

步骤一:在ARMS中获取接入点信息

  1. 登录ARMS控制台,在左侧导航栏单击接入中心

  2. 服务端应用区域单击Zipkin卡片。

    说明

    根据实际使用的客户端采集工具获取接入点信息,本文以Zipkin为例。

  3. 在弹出的Zipkin面板中选择数据需要上报的地域。

  4. 记录接入点信息。zipkin-新版-中.jpg

    说明

    因为Nginx Ingress Controller组件部署在阿里云上,且组件所在地域与可观测链路 OpenTelemetry 版接入配置中的地域一致,所以使用阿里云VPC网络接入点,否则选择公网接入点。

步骤二:在ACKIngress中开启可观测链路 OpenTelemetry 版服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择配置管理 > 配置项

  3. 在配置项页面上方设置命名空间为kube-system,然后在名称搜索框中搜索nginx-configuration,然后单击nginx-configuration操作列的编辑

  4. 配置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?

  5. 开启链路追踪服务。

    单击添加,设置名称enable-opentracingtrue,然后单击确定

    image

步骤三:在ARMS上查看调用链路数据

  1. 登录ARMS控制台,在左侧导航栏单击应用监控 > 应用列表

  2. 应用列表页面顶部选择地域,然后单击应用名称nginx

  3. 在应用详情页面左侧导航栏中单击接口调用,然后在右侧区域,查看链路信息。

    • 概览页签中,展示了链路拓扑信息。3.jpg

    • 单击调用链路页签,查看该应用耗时最长的至多100个调用链路。关于更多链路数据,请参见接口调用调用链路

    • 调用链路页签中,单击TraceId,查看链路详情。2.jpg

切换OpenTelemetry透传协议(可选)

采取OpenTelemetry方式实现Nginx Ingress Controller链路追踪时,OpenTelemetry默认识别并向下游传递W3C Trace Context格式的Trace上下文。如果您的前端应用和后端应用采用了其他协议,例如Jaeger或者Zipkin,需要修改OpenTelemetry的透传格式,才能使前端应用、Nginx Ingress以及后端应用的调用链串联起来。下面介绍如何修改Nginx Ingress Controller所使用的OpenTelemetry透传协议。

  1. 请在步骤二第4步:在环境变量中添加OTEL_EXPORTER_OTLP_HEADERS的基础上添加OTEL_PROPAGATORS环境变量,保存后重新部署nginx-ingress-controller。

    环境变量名

    说明

    OTEL_PROPAGATORS

    tracecontext,baggage,b3,jaeger

    透传格式。更多信息,请参见OpenTelemetry指定透传Header格式

  2. 请在步骤二第7步:添加nginx-configuration配置的基础上修改main-snippet配置,使OTEL_PROPAGATORS环境变量生效。

    配置名

    说明

    main-snippet

    env OTEL_EXPORTER_OTLP_HEADERS; env OTEL_PROPAGATORS

    加载环境变量。

相关文档