Datadog_Container Monitoring

장준영·2024년 5월 24일

개요


최근 클라이언트에서 Get/Shops의 API의 속도에 대한 문의가 있었다.

Datadog이 생각보다 성능측정 및 개선에 필요하였기에 APM을 활용한 성능확인을 했어야 했다.
그리하여 최근 Docker로 인프라를 바꾸면서 Datadog도 기존의 Process의 모니터링이 아닌 Container를 모니터링하도록 교체를 하여야 했다.

진행방향

  1. Dockerfile업데이트
    APM설정 추가
FROM amazoncorretto:17

RUN if ! rpm -q tzdata; then yum install -y tzdata; fi

RUN if ! command -v wget >/dev/null 2>&1; then yum install -y wget; fi

RUN if [ "$(readlink /etc/localtime)" != "/usr/share/zoneinfo/Asia/Seoul" ]; then ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime; fi

RUN if [ ! -f /dd-java-agent.jar ]; then wget -O /dd-java-agent.jar 'https://dtdg.co/latest-java-tracer'; fi

WORKDIR /app

COPY ./build/libs/KOIN_API_V2.jar /app/app.jar

ENTRYPOINT ["sh", "-c", "java -javaagent:/dd-java-agent.jar -Ddd.service=koin-api -Ddd.env=${DD_ENV} -Ddd.version=1.0 -Ddd.agent.host=datadog-agent -Ddd.agent.port=8126 -jar /app/app.jar"]

위와 같이 dd-java-agent를 추가해 주었다.

  1. DatadogAgentNetwork추가
docker network create --driver overlay datadog-net

datadog-net이라는 Overlay네트워크를 추가해준다.(Overlay를 추가해주는 이유는 컨테이너끼리의 통신을 위해서 Overlay네트워크를 추가해 줘야 하는 것이다.)

  1. DockerSwarm Service 설정 추가
docker service update \
  --env-add DD_ENV=서버종류(stage/prod) \
  --env-add DD_SERVICE=서비스명 \
  --env-add DD_VERSION=버젼명 \
  --env-add DD_AGENT_HOST=datadog-agent \
  --env-add DD_AGENT_PORT=8126 \
  --network-add (overlay네트워크) \
  웹서비스 명

DockerFile을 참고하여 Service에 환경설정을 추가하면 된다.

  1. DatadogAgent 실행
docker service create \
  --name datadog-agent \
  --mode global \
  --env DD_API_KEY=본인 계정의 API_KEY\
  --env DD_SITE="us5.datadoghq.com" \
  --env DD_APM_ENABLED=true \
  --env DD_LOGS_ENABLED=true \
  --env DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
  --network datadog-net \
  --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,readonly \
  --mount type=bind,source=/proc/,target=/host/proc,readonly \
  --mount type=bind,source=/sys/fs/cgroup/,target=/host/sys/fs/cgroup,readonly \
  --mount type=bind,source=/var/lib/docker/containers,target=/var/lib/docker/containers,readonly \
  gcr.io/datadoghq/agent:7

위와 같이 APM과 Log를 볼수 있도록 세팅후 마찬가지로 네트워크는 datadog-net으로 Overlay네트워크를 통해 컨테이너끼리 통신을 할 수 있도록 설정하였다.

개선사항


위와같이 APM의 성능 측정을 통해 Redis로 GetShops의 응답속도를 대폭 감소시킨 모습을 볼 수 있다.

후기

이번 Datadog 설정을 하며 다시한번 DockerSwarm의 네트워크에 대해서 상기할 수 있었다. 블로깅에는 빠르게 정리하였지만 사실 시행착오를 많이 겪었다 ㅎㅎ

0개의 댓글