Develop/infra

Datadog 이란?

kudl 2021. 8. 23. 22:13

Datadog 이란?

  • 클라우드 규모 인프라에 대한 완전한 가시성 확보
  • 웹 및 모바일 애플리케이션의 사용자 여정에 대한 종단 간 가시성 확보
  • 분산 클라우드 환경에서 네트워크 트래픽 흐름 시각화
  • 실시간으로 보안 위협 및 구성 오류 자동 감지

Datadog은 Docker, containerd를 포함한 K8s 클러스터 구성요소 및 워크로드, 네트워크 트래픽, 엔드포인트 모니터링 등을 지원하는 종합 모니터링 서비스이다.

Datadog Kubernetes 설정

- datadog-agent : 데이터독 에이전트는 각 노드의 메트릭, 분산 추적 및 로그를 수집하고 서버 리소스(CPU, Memory등) 메트릭을 자동으로 수집
- datadog-node-agent : daemonset으로 각 노드 마다 실행되며 노드 레벨의 정보를 수집
- datadog-cluster-agent : node agent에서 Master노드의 API 서버에 직접 쿼리를 하게되면 클러스터 증가시 Master노드의 API서버 및 etcd에 대한 로그가 증가하기 때문에 Master 노드의 서버 부하를 줄이기 위해 API서버와 node agent간의 프록시 역할을 한다.

제공 기능

datadog의 기능 및 설명은 아래 링크에서 확인이 가능하다. (https://docs.datadoghq.com/getting_started/)

Dashboards : 대시보드는 핵심 성능 지표를 시각적으로 추적, 분석 및 표시며 인프라 상태를 모니터링할 수 있다. (https://app.datadoghq.com/dashboard/lists)

Infrastructure : Infra 목록, 컨테이너맵, 호스트맵, 네트워크 맵 기능을 제공한다. (https://app.datadoghq.com/infrastructure)

모니터링 : 임계치 설정 (https://app.datadoghq.com/monitors/manage)

APM : 애플리케이션에 대한 로그, 프로필, 네트워크등 모니터링을 제공한다. (https://app.datadoghq.com/apm/home?env=prod)

로그 : 인프라, 애플리케이션의 로그 수집(https://app.datadoghq.com/logs)

그외 기능들

  • security, UX monitoring 등등
  • 현재는 CI, Security, UX Monitoring, S3 Integration 등 일부 기능은 사용을 하지 않고 있다.
  • 로그는 15일 보관이 기본 설정으로 기본 설정을 사용중이다.

 

데이터독 가격 정책

Pricing | Datadog

 

Pricing | Datadog

$ 5 Per ten thousand test runs, per month*

www.datadoghq.com

 

 

어플리케이션 log와 traces 연결 설정 방법

1. log4j, slf4j 설정을 통한 로깅 : logstash 설정을 통해 로그를 json 형식으로 남기도록 설정하면 traces와 연동이 가능하다. (https://docs.datadoghq.com/logs/log_collection/java/?tab=log4j)

아래 예제에서는 FILE 로 남기도록 설정되어 있지만 CONSOLE로 남겨도 무방하다.

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
  </appender>

  <root level="INFO">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

2. 데이터독 @trace annotation 활용한 로깅 (https://docs.datadoghq.com/tracing/setup_overview/custom_instrumentation/java/)

public class SessionManager {

    @Trace(operationName = "database.persist", resourceName = "SessionManager.saveSession")
    public static void saveSession() {
        // your method implementation here
    }
}