All Products
Search
Document Center

Application Real-Time Monitoring Service:Enable tracing for NGINX Ingress Controller

Last Updated:May 28, 2025

You can enable tracing for NGINX Ingress Controller deployed in a Container Service for Kubernetes (ACK) cluster, and import trace data to Managed Service for OpenTelemetry. Then, you can view traces and topology in Managed Service for OpenTelemetry to troubleshoot issues related to NGINX Ingress Controller. This topic describes how to enable tracing for NGINX Ingress Controller.

Prerequisites

Version description

The support for tracing varies based on the NGINX Ingress controller version. The following table describes the NGINX Ingress controller versions that support and do not support tracing.

NGINX Ingress controller version

OpenTelemetry

OpenTracing

≥ 1.10.2-aliyun.1

Supported

Not supported

v1.9.3-aliyun.1

Supported

Supported

v1.8.2-aliyun.1

Supported

Supported

< v1.8.2-aliyun.1

Not supported

Supported

Procedure

Managed Service for OpenTelemetry

Step 1: Obtain the endpoint information

  1. Log on to the ARMS console. In the left-side navigation pane, click Integration Center.

  2. On the Integration Center page, click the OpenTelemetry card in the Server-side Applications section.

  3. In the OpenTelemetry panel, select the region from which you want to report data.

  4. Record the endpoint. 76.jpg

    Note

    Because NGINX Ingress Controller is deployed in the same region as the Managed Service for OpenTelemetry agent in this example, we recommend that you use a virtual private cloud (VPC) endpoint. If NGINX Ingress Controller and the agent are deployed in different regions, use a public endpoint.

Step 2: Enable Managed Service for OpenTelemetry for NGINX Ingress Controller

  1. Log on to the ACK console. In the left-side navigation pane, click Clusters.

  2. On the Clusters page, find the cluster you want to manage and click its name. In the left-side pane, choose Workloads > Deployments.

  3. In the upper part of the page, select kube-system from the Namespace drop-down list. Then, enter nginx-ingress-controller in the search box and click the search icon. Find NGINX Ingress Controller and click Edit in the Actions column.

  4. In the upper part of the Edit page, select the nginx-ingress-controller container. On the Environments tab, click Add to add the following environment variable.

    Type

    Variable Key

    Value/ValueFrom

    Description

    Custom

    OTEL_EXPORTER_OTLP_HEADERS

    authentication=<Authentication token>

    Use the authentication token obtained in Step 1: Obtain the endpoint information. Example: authentication=bfXXXXXXXe@7bXXXXXXX1_bXXXXXe@XXXXXXX1.

    image

    After you add the environment variable, click Update on the right side of the Edit page. In the message that appears, click Confirm.

  5. In the left-side navigation pane, choose Configurations > ConfigMaps.

  6. In the upper part of the ConfigMap page, select kube-system from the Namespace drop-down list. Then, enter nginx-configuration in the Name search box and click the search icon. Find nginx-configuration and click Edit in the Actions column.

  7. In the Edit panel, click Add to add the following configurations and click OK.

    Item

    Description

    Example

    enable-opentelemetry

    Specifies whether to enable Managed Service for OpenTelemetry.

    true: enables Managed Service for OpenTelemetry.

    main-snippet

    -

    env OTEL_EXPORTER_OTLP_HEADERS;

    otel-service-name

    The custom service name.

    nginx-ingress

    otlp-collector-host

    The domain name used to import data over gRPC. Delete http:// and the port number from the VPC endpoint obtained in Step 1.

    tracing-analysis-XX-XX-XXXXX.aliyuncs.com

    otlp-collector-port

    The port used to import data over gRPC.

    8090

    opentelemetry-trust-incoming-span

    Specifies whether to trust the traces of other services or systems.

    true: trusts the traces of other services or systems.

    opentelemetry-operation-name

    The span format.

    HTTP $request_method $service_name $uri

    otel-sampler

    The sampling rule. For information about other parameters, see OpenTelemetry.

    TraceIdRatioBased

    otel-sampler-ratio

    The sampling rate. Range: 0 to 1 (with two decimal places).

    • 0: does not sample any data.

    • 1: samples all data.

    For information about other parameters, see OpenTelemetry.

    0.1

    otel-sampler-parent-based

    Specifies whether to inherit upstream sampling flags.

    • false (default): does not inherit these flags, and enables otel-sampler and otel-sampler-ratio.

    • true: Inherits these flags, and disables otel-sampler and otel-sampler-ratio.

    For information about other parameters, see OpenTelemetry.

    • false

    • true

Step 3: View the trace data in the ARMS console

  1. Log on to the ARMS console. In the left-side navigation pane, choose Application Monitoring > Applications.

  2. In the top navigation bar of the Applications page, select a region and click the nginx-ingress application.

  3. On the application details page, view the trace data.

    • On the Overview tab, view the number of requests and the number of errors.应用概览-中.jpg

    • On the Trace Explorer tab, view the trace list and average duration.调用链分析-中.jpg

    • On the Trace Explorer tab, click a trace ID to view the trace details.trace详情-中.jpg

OpenTracing

Step 1: Obtain the endpoint information

  1. Log on to the ARMS console. In the left-side navigation pane, click Integration Center.

  2. On the Integration Center page, click the Zipkin card in the Server-side Applications section.

    Note

    Obtain an endpoint of the client used to collect data. In this example, a Zipkin client is used.

  3. In the Zipkin panel, select the region from which you want to report data.

  4. Record the endpoint.74.jpg

    Note

    Because NGINX Ingress Controller is deployed in the same region as the Managed Service for OpenTelemetry agent in this example, we recommend that you use a virtual private cloud (VPC) endpoint. If NGINX Ingress Controller and the agent are deployed in different regions, use a public endpoint.

Step 2: Enable Managed Service for OpenTelemetry for NGINX Ingress Controller

  1. Log on to the ACK console. In the left-side navigation pane, click Clusters.

  2. On the Clusters page, click the name of the one you want to change. In the left-side navigation pane, choose Configurations > ConfigMaps.

  3. In the upper part of the ConfigMap page, select kube-system from the Namespace drop-down list. Then, enter nginx-configuration in the Name search box and click the search icon. Find nginx-configuration and click Edit in the Actions column.

  4. Configure Zipkin as the client to collect trace data.

    In the Edit panel, click Add. Enter zipkin-collector-host in the Name field and enter the endpoint obtained in Step 1: Obtain the endpoint information in the Value field.

    Important

    Remove http:// from the endpoint and add a question mark (?) at the end of the endpoint. Example:

    • Original endpoint: http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans

    • Modified endpoint: tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_******_******/api/v1/spans?

  5. Enable tracing.

    Click Add. Enter enable-opentracing in the Name field and true in the Value field. Then, click OK.

    image

Step 3: View the trace data in the ARMS console

  1. Log on to the ARMS console. In the left-side navigation pane, choose Application Monitoring > Applications.

  2. In the top navigation bar of the Applications page, select a region and click the nginx application.

  3. In the left-side navigation pane of the details page, click Interface Calls. On the right side of the page, view the trace data.

    • On the Overview tab, view the trace topology.3.jpg

    • Click the Traces tab to view the top 100 time-consuming traces of the application. For more information, see Interface calls.调用链路

    • On the Traces tab, click a trace ID to view the trace details.2.jpg

(Optional) Change the protocol used by Managed Service for OpenTelemetry to pass trace data

If you use Managed Service for OpenTelemetry to enable tracing for the NGINX Ingress controller, Managed Service for OpenTelemetry passes trace data in the W3C trace context specification to the downstream service. If the frontend and backend applications use other protocols, such as Jaeger or Zipkin, you must change the protocol used by Managed Service for OpenTelemetry to pass trace data. This way, the traces of the frontend application, NGINX Ingress, and backend application can be streamlined. The following example describes how to change the protocol used by Managed Service for OpenTelemetry to pass trace data:

  1. Add the OTEL_PROPAGATORS environment variable in Step 2.4: Add the OTEL_EXPORTER_OTLP_HEADERS environment variable. Then, save the changes and redeploy nginx-ingress-controller.

    Environment variable

    Value

    Description

    OTEL_PROPAGATORS

    tracecontext,baggage,b3,jaeger

    The protocol used to pass trace data. For more information, see Specify the format to pass trace data.

  2. Modify the main-snippet configurations in Step 2.7: Modify the nginx-configuration ConfigMap to make the OTEL_PROPAGATORS environment variable take effect.

    Configuration name

    Value

    Description

    main-snippet

    env OTEL_EXPORTER_OTLP_HEADERS; env OTEL_PROPAGATORS

    Load the OTEL_PROPAGATORS environment variable.

References