This page describes how to use Helm charts to install the Cisco AppDynamics Distribution of OpenTelemetry Collector separately in a Kubernetes® cluster to monitor the health and performance of your Kubernetes infrastructure.

Splunk AppDynamics also provides a bundle that includes the Cisco AppDynamics Distribution of OpenTelemetry Collector as well as the full stack of components needed for Kubernetes and App Service Monitoring. To install the bundle, see Install Kubernetes and App Service Monitoring.

These are the high-level steps:

  1. Ensure that you meet the requirements in:
    1. Before You Begin
    2. Hardware Requirements
    3. Software Requirements
  2. Install the Cisco AppDynamics Distribution of OpenTelemetry Collector Using Helm Charts
  3. Validate the Installation

Before You Begin

Before you beginensure that you meet the following requirements:

  • Your account is set up on Cisco Cloud Observability. See Account Administration.
  • You are connected to the cluster that you want to monitor.
  • You have administrator privileges on the monitored cluster to run Helm chart commands.

Hardware Requirements

The default hardware settings are:

ComponentCPUMemoryPer cluster or node

Cisco AppDynamics Distribution of OpenTelemetry Collector*

200m1024MiBPer node (Kubernetes DaemonSet)

Splunk AppDynamics Operator

200m128MiBPer cluster (Kubernetes Deployment)

OpenTelemetry Operator for Kubernetes**

600m256MiBPer cluster (Kubernetes Deployment)

*For throughput-specific details, see Performance and Scaling for the Cisco AppDynamics Distribution of OpenTelemetry Collector.

Software Requirements

Kubernetes and App Service Monitoring is designed to run in hybrid (Linux and Windows) or Linux-only clusters. Kubernetes and App Service Monitoring requires:

NameURL

Cisco AppDynamics Distribution of OpenTelemetry Collector 

appdynamics/appdynamics-cloud-otel-collector:24.2.0-1451

Splunk AppDynamics Operator

appdynamics/appdynamics-cloud-operator:24.2.0-1303
kube-rbac-proxygcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
OpenTelemetry Operator for Kubernetesghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:v0.89.0
ghcr.io/open-telemetry/opentelemetry-operator/target-allocator:0.89.0

Cluster Support

Linux ClusterWindows and Linux Cluster
  • Amazon Elastic Kubernetes Service  <=1.28
  • Azure Kubernetes Service <=1.28
  • Red Hat OpenShift Service on AWS (ROSA) <= 4.13.14
  • Microsoft Azure for OpenShift <= 4.13
  • Self-managed OpenShift Container Platform (OCP) 4.11
  • Rancher Kubernetes Engine (RKE) <= 1.27
  • Rancher Kubernetes Engine Government (RKE2) <= 1.29 
  • Tanzu Kubernetes Grid Integrated Edition (TKGI) <= 1.18
  • Google Kubernetes Engine (GKE) <= 1.28
  • Containerd runtime for Windows nodes
  • Windows 2019 Server for Windows nodes <= 1.23 
  • Amazon Elastic Kubernetes Service  <=1.28
  • Azure Kubernetes Service <=1.28
  • Google Kubernetes Engine (GKE) <= 1.28

Splunk AppDynamics and OpenTelemetry Operators can run on Linux nodes only.

The k8s.cluster.id attribute is required to send MELT data for Kubernetes entities. By default, Splunk AppDynamics Helm charts and Collectors attach the k8s.cluster.id attribute to data from Splunk AppDynamics sources. To send data from third-party collectors, you must enrich your data with the k8s.cluster.id attribute. The k8s.cluster.id attribute must have a value equal to the UUID of the kube-system namespace.

Install the Cisco AppDynamics Distribution of OpenTelemetry Collector Using Helm Charts

  1. Obtain the name of your cluster:

    1. Log into the Cisco Cloud Observability UI.
    2. On the Observe page, click your cluster.
    3. In the Properties panel, copy the name of your cluster and save it to a text file.
  2. Obtain the values for the operator installation:
    1. Log into the Cisco Cloud Observability UI.
    2. Use the left-hand navigation panel to navigate to Configure > Kubernetes and APM.
    3. Under CONFIGURE DATA COLLECTORS, enter your credential set name and Kubernetes cluster name.
    4. Click Generate configuration file. This step generates the operators-values.yaml and collectors-values.yaml files.
    5. From the operators-values.yaml file, copy the snippet that includes appdynamics-smartagent. These values are used to deploy the appdynamics-operators Helm chart.
    6. Keep this page open. You'll need to reference the collectors-values.yaml file in a later step.
  3. Add the operator values to your own operator-values.yaml file:
    1. Create your own operators-values.yaml file on the machine connected to the Kubernetes cluster you want to monitor.
    2. Paste the copied snippet for appdynamics-smartagent under the global key into your operators-values.yaml file.

      operators-values.yaml

      global:
         clusterName: <cluster-name>
      appdynamics-smartagent:
         solution:
            endpoint: <endpoint>
         oauth:
            clientId: <client-ID>
            clientSecret: <client-secret>
            tokenUrl: <token-url>
            tenantId: <tenant-ID> 
      YML
  4. Obtain the values for the collector installation:

    1. Return to the Cisco Cloud Observability UI.

    2. From the collectors-values.yaml file, copy the snippet that includes appdynamics-otel-collector. These values are used to deploy the appdynamics-collectors Helm chart.

      Installing the appdynamics-collectors Helm chart will add additional pods to your cluster. If you are using Prometheus® exporters such as kube-state-metrics and kube-eagle, which generate metrics for any added pods, the additional metrics may overwhelm your Prometheus server. To avoid that, you can change your scrapping configuration to drop the metrics from the appdynamics namespace. Add the following metric_relabel_configs to each Prometheus scrape job:

        metric_relabel_configs:
        - source_labels: [namespace]
          separator: ;
          regex: (appdynamics)
          replacement: $1
          action: drop 
      CODE
  5. Add the collector values to your own collectors-values.yaml file:
    1. Create your own collectors-values.yaml file on the machine connected to the required Kubernetes cluster.
    2. Paste the copied snippet for appdynamics-otel-collector under the global key into the collectors-values.yaml file. Add the following configurations to disable the other collectors in the package.

      collectors-values.yaml

      global:
        clusterName: <cluster-name>
      
      appdynamics-otel-collector:
      	clientId: <client-ID>
      	clientSecret: <client-secret>
      	endpoint: <endpoint>
      	tokenUrl: <token-url>
      
      appdynamics-cloud-k8s-monitoring:
        install:
          clustermon: false
          defaultInfraCollectors: false
          logCollector: false
      
      appdynamics-cloud-db-collector:
        install:
          dbCollector: false
          dbMonitoringConfigs: false
      
      appdynamics-security-collector:
        enabled: false
      YML
  6. Create the Splunk AppDynamics namespace where the Cisco AppDynamics Distribution of OpenTelemetry Collector will be installed:

    kubectl create namespace appdynamics
    BASH
  7. For Kubernetes, the webhook requires a TLS certificate for the API server to communicate with the webhook component of OpenTelemetry Operator in the Splunk AppDynamics Operators Helm chart. The API server must then be configured for the OpenTelemetry Operator. The simplest option is to install cert-manager and allow it to generate a self-signed certificate automatically:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
    BASH

    To manually generate a certificate, see Provision a TLS Certificate for the OpenTelemetry Operator.

  8. Add the helm repo:

    helm repo add appdynamics-cloud-helmcharts https://appdynamics.jfrog.io/artifactory/appdynamics-cloud-helmcharts/ 
    BASH
  9. Install the Splunk AppDynamics Operators using using operators-values.yaml:

    helm install appdynamics-operators appdynamics-cloud-helmcharts/appdynamics-operators -n appdynamics -f operators-values.yaml --wait
    BASH
  10. Install the Cisco AppDynamics Distribution of OpenTelemetry Collector using collectors-values.yaml.

    helm install appdynamics-collectors appdynamics-cloud-helmcharts/appdynamics-collectors -n appdynamics -f collectors-values.yaml
    CODE
    1. To configure proxy settings for the Cisco AppDynamics Distribution of OpenTelemetry Collector, see Configure Proxy Settings.

    2. You must specify the global.clusterId parameter if the Helm lookup function is not supported, such as when using Argo CD™, helm template, and helm install --dry-run. See Configure Cisco AppDynamics Kubernetes Collectors.  

Validate the Installation

  1. Check the Kubernetes pods in the appdynamics namespace using the following command: 

    kubectl get all -n appdynamics
    CODE
  2. Check the output of the command to confirm if the installation was successfully completed. The following sample output shows a successful installation that enabled both Prometheus and the FileLog receiver:

    NAME                                                                  READY   STATUS      RESTARTS           AGE
    pod/appd-cols-ds-appdynamics-otel-collector-collector-dqdkn           1/1     Running     0                  5h13m
    pod/appd-cols-ds-appdynamics-otel-collector-collector-gzlj8           1/1     Running     0                  5h13m
    pod/appd-cols-ss-appdynamics-otel-collector-collector-0               1/1     Running     0                  5h13m
    pod/appd-cols-ss-appdynamics-otel-collector-collector-1               1/1     Running     0                  5h13m
    pod/appd-cols-ss-appdynamics-otel-collector-collector-2               1/1     Running     0                  5h13m
    pod/appd-cols-ss-appdynamics-otel-collector-collector-3               1/1     Running     0                  5h13m
    pod/appd-cols-ss-appdynamics-otel-collector-targetallocator-f7hbshd   1/1     Running     0                  20h
    pod/appdynamics-operators-appdynamics-cloud-operator-5986888779k2lh   2/2     Running     0        			 41d
    pod/appdynamics-operators-appdynamics-smartagent-6d84df96b6-96nbc     1/1     Running     0   				 41d
    pod/appdynamics-operators-opentelemetry-operator-56f7994dd6-lfrzd     2/2     Running     0        			 41d
    
    NAME                                                                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                 AGE
    service/appd-cols-ds-appdynamics-otel-collector-collector              ClusterIP   10.96.185.11    <none>        4317/TCP,4318/TCP,14317/TCP,14318/TCP   20h
    service/appd-cols-ds-appdynamics-otel-collector-collector-headless     ClusterIP   None            <none>        4317/TCP,4318/TCP,14317/TCP,14318/TCP   20h
    service/appd-cols-ds-appdynamics-otel-collector-collector-monitoring   ClusterIP   10.96.151.120   <none>        8888/TCP                                20h
    service/appd-cols-ss-appdynamics-otel-collector-collector              ClusterIP   10.96.52.33     <none>        4317/TCP,4318/TCP,14317/TCP,14318/TCP   20h
    service/appd-cols-ss-appdynamics-otel-collector-collector-headless     ClusterIP   None            <none>        4317/TCP,4318/TCP,14317/TCP,14318/TCP   20h
    service/appd-cols-ss-appdynamics-otel-collector-collector-monitoring   ClusterIP   10.96.162.102   <none>        8888/TCP                                20h
    service/appd-cols-ss-appdynamics-otel-collector-targetallocator        ClusterIP   10.96.234.140   <none>        80/TCP                                  20h
    service/appdynamics-cloud-operator-metrics-service                     ClusterIP   10.96.36.55     <none>        8443/TCP                                41d
    service/appdynamics-operators-opentelemetry-operator                   ClusterIP   10.96.233.189   <none>        8443/TCP,8080/TCP                       41d
    service/appdynamics-operators-opentelemetry-operator-webhook           ClusterIP   10.96.20.173    <none>        443/TCP                                 41d
    service/appdynamics-otel-collector-service                             ClusterIP   10.96.143.99    <none>        4318/TCP,4317/TCP,14317/TCP             20h
    service/appdynamics-otel-collector-service-ds                          ClusterIP   10.96.16.16     <none>        4318/TCP,4317/TCP,14317/TCP             20h
    service/appdynamics-otel-collector-service-ss                          ClusterIP   10.96.206.253   <none>        4318/TCP,4317/TCP,14317/TCP             20h
    
    NAME                                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    daemonset.apps/appd-cols-ds-appdynamics-otel-collector-collector   2         2         2       2            2           kubernetes.io/os=linux   20h
    
    NAME                                                                      READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/appd-cols-ss-appdynamics-otel-collector-targetallocator   1/1     1            1           20h
    deployment.apps/appdynamics-operators-appdynamics-cloud-operator          1/1     1            1           41d
    deployment.apps/appdynamics-operators-appdynamics-smartagent              1/1     1            1           41d
    deployment.apps/appdynamics-operators-opentelemetry-operator              1/1     1            1           41d
    
    NAME                                                                                DESIRED   CURRENT   READY   AGE
    replicaset.apps/appd-cols-ss-appdynamics-otel-collector-targetallocator-f78b9c54c   1         1         1       20h
    replicaset.apps/appdynamics-operators-appdynamics-cloud-operator-598688877b         1         1         1       41d
    replicaset.apps/appdynamics-operators-appdynamics-smartagent-6d84df96b6             1         1         1       41d
    replicaset.apps/appdynamics-operators-opentelemetry-operator-56f7994dd6             1         1         1       41d
    
    NAME                                                                 READY   AGE
    statefulset.apps/appd-cols-ss-appdynamics-otel-collector-collector   4/4     20h
    CODE

Next Steps

  1. Once the Cisco AppDynamics Distribution of OpenTelemetry Collector is deployed, it receives data from various data sources and forwards the data with annotations, performance optimizations, and authentications to the Cisco Cloud Observability backend. It then populates the Observe page with entity-centric pages (ECPs) for the respective data sources. You can now monitor the health and performance of your Kubernetes environment, including infrastructure, databases, and application services running in the environment.
  2. To configure applications instrumented with OpenTelemetry™ to send trace data to Cisco Cloud Observability, see Monitor Applications in Kubernetes.

This document contains references to third-party documentation. Splunk AppDynamics does not own any rights and assumes no responsibility for the accuracy or completeness of such third-party documentation.

OpenTelemetry™ and Kubernetes® (as applicable) are trademarks of The Linux Foundation®.