EKS + Fargate에서 Datadog을 사용하는 APM

12730 단어 apmeksdatadogfargate
이 게시물에서는 Fargate를 컴퓨팅 옵션으로 사용하여 EKS와 Datadog APM을 통합하는 데 필요한 단계를 살펴보겠습니다.

프로세스는 와 매우 유사합니다.

datadog 에이전트 컨테이너는 각 애플리케이션 컨테이너의 사이드카로 실행되어야 합니다.

Datadog 에이전트 설치



helm을 사용하여 Kubernetes 클러스터에 datadog 에이전트를 설치합니다.

먼저 아래 명령을 실행하여 helm에 datadog의 리포지토리를 추가합니다.

helm repo add datadog https://helm.datadoghq.com
helm repo update


그런 다음 클러스터에서 실행 중인 datadog 에이전트가 사용하는 구성 파일로 사용할 파일values.yaml을 편집해야 합니다. 제가 오버라이드(편집)한 필드는 아래와 같습니다.
  • registry : 주석에 AWS 값을 적용합니다.
  • datadog.apiKey : Datadog에서 생성한 API 키의 값입니다.
  • datadog.apm.portEnabled : true로 설정합니다.

  • 마지막으로 아래 명령어를 실행하여 설치를 마치도록 하겠습니다.

    helm install datadog-agent -f values.yaml datadog/datadog
    



    APM 구성



    Datadog APM을 애플리케이션과 통합하려면 애플리케이션이 자체적으로 실행될 때 datadog 에이전트를 사용하는지 확인해야 합니다. 예를 들어 Spring 부트 애플리케이션(JVM)이 있고 해당 dockerfile은 아래와 같습니다.

    There is 1 datadog agent installed on your EKS cluster, and another datadog agent running as a process of your application to collect metrics.



    FROM openjdk:11-jdk AS builder
    WORKDIR application
    ARG JAR_FILE=build/libs/MY_APP.jar
    COPY ${JAR_FILE} application.jar
    RUN java -Djarmode=layertools -jar application.jar extract
    
    FROM openjdk:11-jdk
    WORKDIR application
    RUN  apt-get update \
      && apt-get install -y wget \
      && rm -rf /var/lib/apt/lists/*
    RUN wget -O dd-java-agent.jar 'https://dtdg.co/latest-java-tracer'
    
    COPY --from=builder application/application.jar ./application.jar
    RUN true
    COPY --from=builder application/dependencies/ ./
    RUN true
    COPY --from=builder application/spring-boot-loader/ ./
    RUN true
    COPY --from=builder application/snapshot-dependencies/ ./
    RUN true
    COPY --from=builder application/application/ ./
    RUN true
    
    ENV TZ Asia/Seoul
    
    ENTRYPOINT ["java", "-javaagent:dd-java-agent.jar", "-Ddd.profiling.enabled=true", "-XX:FlightRecorderOptions=stackdepth=256", "org.springframework.boot.loader.JarLauncher"]
    


    위의 예에서 dd-java-agent.jar는 datadog 에이전트를 실행하는 컨테이너의 포트 8126을 사용하여 메트릭을 datadog에 보냅니다.

    이제 우리가 해야 할 일은 Kubernetes 배포 파일에 다른 컨테이너 사양을 추가하는 것입니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: planit-deployment
      namespace: planit
      labels:
        app: planit
    spec:
      replicas: 3
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          app: planit
      template:
        metadata:
          labels:
            app: planit
        spec:
          containers:
            - name: "CONTAINER_NAME"
              image: "YOUR_IMAGE_NAME"
              imagePullPolicy: Always
              ports:
                - containerPort: 8080
                  protocol: TCP
            - name: datadog-agent 
              image: datadog/agent:latest
              ports:
                - containerPort: 8126
                  name: traceport
                  protocol: TCP
              env:
                - name: DD_KUBERNETES_KUBELET_NODENAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
                - name: DD_API_KEY
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_API_KEY
                - name: DD_SITE
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_SITE
                - name: DD_EKS_FARGATE
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_EKS_FARGATE
                - name: DD_APM_ENABLED
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_APM_ENABLED
                - name: DD_ENV
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_ENV
                - name: DD_SERVICE
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_SERVICE
                - name: DD_VERSION
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_VERSION
                - name: DD_PROFILING_ENABLED
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_PROFILING_ENABLED
                - name: DD_APM_IGNORE_RESOURCES
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_APM_IGNORE_RESOURCES
                - name: DD_LOGS_INJECTION
                  valueFrom:
                    secretKeyRef:
                      name: datadog-secret
                      key: DD_LOGS_INJECTION
    


    datadog-secret is a Kubernetes secret object I created to store configuration values related to Datadog.



    새로운 Kubernetes 배포를 배포한 후 아래와 같이 APM이 잘 작동하는 것을 볼 수 있어야 합니다.

    좋은 웹페이지 즐겨찾기