Skip to content

AWS X-Ray ADOT Add-on

AWS X-Ray helps developers analyze and debug production, distributed applications, such as those built using a microservices architecture. This add-on deploys an AWS Distro for OpenTelemetry (ADOT) Collector for X-Ray which receives traces from the application and sends the same to X-Ray console. You can change the mode to Daemonset, StatefulSet, and Sidecar depending upon your deployment strategy.

This add-on is not automatically installed when you first create a cluster, it must be added to the cluster in order to setup X-Ray for remote write traces.

For more information on the add-on, please review the user guide.

Prerequisites

  • cert-manager Blueprints add-on.
  • adot EKS Blueprints add-on.

Usage

This add-on can used with two different patterns :

Pattern # 1 : Simple and Easy - Using all default property values. This pattern deploys an ADOT collector in the default namespace with deployment as the mode to write traces to X-Ray console.

import * as cdk from 'aws-cdk-lib';
import * as blueprints from '@aws-quickstart/eks-blueprints';

const app = new cdk.App();

const addOn = new blueprints.addons.XrayAdotAddOn();

const blueprint = blueprints.EksBlueprint.builder()
  .version("auto")
  .addOns(addOn)
  .build(app, 'my-stack-name');

With the same pattern, to deploy ADOT collector in non-default namespace:

import * as cdk from 'aws-cdk-lib';
import * as blueprints from '@aws-quickstart/eks-blueprints';

const app = new cdk.App();

const addOn = new blueprints.addons.XrayAdotAddOn({
                ampPrometheusEndpoint: ampWorkspace.attrPrometheusEndpoint,
                namespace: 'adot'
              }),

const blueprint = blueprints.EksBlueprint.builder()
  .addOns(addOn)
  .build(app, 'my-stack-name');

Pattern # 2 : Overriding Property value for different deployment Modes. This pattern deploys an ADOT collector on the namespace specified in namespace, name specified in name with daemonset as the mode to X-Ray console. Deployment mode can be overridden to any of these values - deployment, daemonset, statefulset, sidecar.

import * as cdk from 'aws-cdk-lib';
import * as blueprints from '@aws-quickstart/eks-blueprints';

const app = new cdk.App();

const addOn = new blueprints.addons.XrayAdotAddOn({
    deploymentMode: XrayDeploymentMode.DAEMONSET,
    namespace: 'default',
    name: 'adot-collector-xray'
});

const blueprint = blueprints.EksBlueprint.builder()
  .version("auto")
  .addOns(addOn)
  .build(app, 'my-stack-name');

Validation

To validate that X-Ray add-on is installed properly, ensure that the required kubernetes resources are running in the cluster

kubectl get all -n default

Output

NAME                                                 READY   STATUS        RESTARTS   AGE
pod/otel-collector-xray-collector-6fc44d9bbf-xdfpg   1/1     Running       0          6m44s
pod/traffic-generator-86f86d84cc-s78wv               0/1     Terminating   0          128m

NAME                                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/kubernetes                                 ClusterIP   172.20.0.1      <none>        443/TCP             3d
service/otel-collector-xray-collector              ClusterIP   172.20.83.240   <none>        4317/TCP,4318/TCP   6m46s
service/otel-collector-xray-collector-headless     ClusterIP   None            <none>        4317/TCP,4318/TCP   6m46s
service/otel-collector-xray-collector-monitoring   ClusterIP   172.20.2.85     <none>        8888/TCP            6m46s

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/otel-collector-xray-collector   1/1     1            1           6m44s

NAME                                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/otel-collector-xray-collector-6fc44d9bbf   1         1         1       6m44s

Functionality

Applies the X-Ray ADOT add-on to an Amazon EKS cluster.