EKS + Fargate에서 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이 잘 작동하는 것을 볼 수 있어야 합니다.
Reference
이 문제에 관하여(EKS + Fargate에서 Datadog을 사용하는 APM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/apm-with-datadog-on-eks-fargate-17i2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)