모니터링의 중요성을 체감해보지는 못했지만, 그 중요성만큼은 느껴집니다.
예를 들어서, 분산 애플리케이션을 배포하고 이를 오케스트레이션해야 할 때, 가용성을 높이기 위해 오토스케일링 기준을 정해야 합니다. CPU는 어느 정도로 요청하고 제한해야 할지, 그리고 특히 메모리는 CPU와 달리 비압축 리소스이기 때문에 요청과 한계를 설정하는 것이 매우 중요하게 되죠. 이런 간극을 확인하고 설정하기 위해서 모니터링 도구는 메트릭을 집계하고 계속해서 모니터링하여 확인할 수 있으므로 유용하게 사용할 수 있습니다.
비단 위와 같은 예시 뿐만 아니라, 어느 시각에 트래픽이 몰리는지 한 눈에 확인할 수 있고, 어느 호스트가 장애를 겪고 있는지도 모니터링을 통해 손쉽게 확인할 수 있습니다. 여기에 훅을 통해 ChatOps까지 결합시키면 문제를 더욱 더 빠르고 효과적으로 대처할 수 있을 것입니다.
모니터링을 위한 도구는 Grafana도 있고 kibana, logstash도 있는데, 단독으로 사용한다기보다는 데이터 수집을 위한 Prometheus와, 스토리지로 사용할 InfluxDB 혹은 ElasticSearch 등이 함께 필요합니다. 그래서 데이터독이 완전한 SaaS 도구로서 상당한 편의성을 제공해줍니다.
쿠버네티스 모니터링을 위한 모니터링 도구 비교글만 봐도 설치하기 쉽고 가장 PnP에 걸맞다는 내용을 볼 수 있었습니다. 그래서 데이터독에 관해서 간단하게 훑어보면 좋을 것 같습니다!
데이터독 공식 유튜브 영상을 캡처했는데, 이렇게 모니터링을 커스터마이징해서 사용하는 사례를 보여주네요. 전회사에서도 비슷하게 모니터링을 할 수 있었는데, 데이터독도 상당히 낭만있는 것 같습니다.
APM
데이터독을 검색하면 APM 도구라는 설명이 많이 나오는데요. APM은 Application Performance Monitoring의 준말로 애플리케이션 성능 모니터링 도구입니다. 애플리케이션에서 확인할 수 있는 거의 모든 것을 모니터링할 수 있고 심지어 병목을 일으키는 코드 라인도 확인할 수 있습니다.
Agent
데이터독은 원하는 호스트의 메트릭을 가져오기 위해서 각 호스트 별로 Agent를 설치합니다.
예를 들어, 쿠버네티스 환경에서 데이터독을 사용한다면 위와 같이 환경을 설정하게 됩니다. 각 노드 별로 한 개의 에이전트 파드가 필요하므로 DaemonSet 리소스로 배포됩니다.
쿠버네티스 말고 다양한 플랫폼을 지원하므로 아래 링크에서 원하는 플랫폼을 확인하여 설정할 수 있습니다.
https://docs.datadoghq.com/agent/basic_agent_usage/?tab=agentv6v7
Agent 외에도 데이터독과 통합할 수 있는 애플리케이션이나 서비스들도 상당히 많이 즐비되어 있고, 각각 문서화가 잘 되어 있습니다.
각 Agent가 메트릭과 이벤트를 수집해 Datadog에게 전달하고, 이 전달 받은 메트릭과 이벤트를 사용자에게 제공하는 방식으로 동작합니다.
예를 들어서, Nodejs 백엔드 환경에서 로그를 수집하려면 아래와 같이 설정합니다.
먼저 Logger를 설정합니다.
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
exitOnError: false,
format: format.json(),
transports: [
new transports.File({ filename: `${appRoot}/logs/<FILE_NAME>.log` }),
],
});
module.exports = logger;
// Example logs
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
그 후, conf.d/ 디렉터리에 nodejs.d/ 디렉터리를 생성한 다음, conf.yaml 파일을 생성해 아래와 같이 작성합니다.
init_config:
instances:
##Log section
logs:
- type: file
path: "<FILE_NAME_PATH>.log"
service: <SERVICE_NAME>
source: nodejs
sourcecategory: sourcecode
혹은, 로거를 자동으로 연결하거나, 직접 로거를 만들어서 직접 APM과 연결할 수도 있습니다. 나중에 직접 테스트해보면 좋을 것 같습니다.
https://docs.datadoghq.com/tracing/other_telemetry/connect_logs_and_traces/nodejs/
Infrastructure
Hostmap
모니터링 서비스 중 Infrastructure 서비스가 있는데, Host Map과 Infrastructure List를 확인할 수 있습니다.
Host Map에서는 모니터링하고 있는 호스트들을 한눈에 시각적으로 확인할 수 있습니다. CPU 가용률에 따라 음영이 다르게 표시됩니다.
호스트 블럭을 자세히 확인할 수도 있는데, 각 호스트 별로 수집하고 있는 메트릭을 카테고리 별로 확인 가능합니다.
Infrastructure List
Infrastructure List에서 더 자세하게 확인할 수 있습니다.
Container View, Process View
컨테이너 뷰나 프로세스 뷰도 제공합니다.
Metrics
Explorer
Grafana나 Prometheus에서 PromQL을 사용해 원하는 데이터만 긁어와서 메트릭을 확인하는 것처럼, 데이터독도 원하는 메트릭만 가져와 자유롭게 커스터마이징할 수 있습니다.
Summary
혹은 Metrics를 종합적으로 확인할 수 있습니다. 여기서 좋은 점은 메트릭마다 description을 추가할 수 있어서 협업하기에도 좋아 보이네요. 또한, unit이나 metric type, 간격도 바꿀 수 있습니다.
메트릭을 쿼리를 사용하여 가져올 수도 있습니다.
Monitors
중요한 변경 사항을 확인하기 위해 모니터링을 생성할 수 있습니다. 메트릭을 쿼리를 통해 정의하고, 특정 Threshold를 설정하여 알림을 받을 수 있습니다.
이렇게 모니터를 통해 이슈를 받아서 팀과 공유할 수 있다는 점이 또 인상깊었습니다. 하지만, 가장 인상깊었던 것은 모바일 친화적으로 모니터를 확인할 수 있다는 점이었습니다.
정리하며
모든 서비스를 훑어보기에는 시간이 없어서 간단하게 굵직한 서비스만 살펴봤습니다. 아무래도 직접 사용해보면서 익히는 게 확실하게 학습할 수 있을 것 같습니다. 이전에 Prometheus와 Grafana를 통해서 모니터링 애플리케이션을 만들었는 때는 조금 번거로웠는데, Datadog은 확실히 설정하기도 편하고 문서화가 너무 잘 되어 있어서 직접 실습해보기 좋아 보이네요. 가격이 조금 걸리긴 하지만, 그만큼 편의성을 확실히 제공하므로 사용하기 유용할 것 같습니다.
참고
https://medium.com/containerum/4-tools-to-monitor-your-kubernetes-cluster-efficiently-ceaf62818eea
https://docs.datadoghq.com/tracing/other_telemetry/connect_logs_and_traces/nodejs/