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

Datadog이 생각보다 성능측정 및 개선에 필요하였기에 APM을 활용한 성능확인을 했어야 했다.
그리하여 최근 Docker로 인프라를 바꾸면서 Datadog도 기존의 Process의 모니터링이 아닌 Container를 모니터링하도록 교체를 하여야 했다.
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를 추가해 주었다.
docker network create --driver overlay datadog-net
datadog-net이라는 Overlay네트워크를 추가해준다.(Overlay를 추가해주는 이유는 컨테이너끼리의 통신을 위해서 Overlay네트워크를 추가해 줘야 하는 것이다.)
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에 환경설정을 추가하면 된다.
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의 네트워크에 대해서 상기할 수 있었다. 블로깅에는 빠르게 정리하였지만 사실 시행착오를 많이 겪었다 ㅎㅎ