DogStatsD

커스텀 애플리케이션 메트릭을 Datadog으로 가져오는 가장 쉬운 방법은 Datadog 에이전트와 함께 제공되는 메트릭 애그리게이션 서비스인 DogStatsD로 보내는 것입니다. DogStatsD는 StatsD 프로토콜을 구현하고 몇 가지 Datadog-specific 익스텐션을 추가합니다:

  • 히스토그램 메트릭 유형
  • 서비스 검사
  • 이벤트
  • 태깅

호환되는 StatsD 클라이언트는 DogStatsD 및 에이전트와 함께 작동하지만 Datadog-specific 익스텐션은 포함하지 않습니다.

참고: DogStatsD는 StatsD의 타이머를 네이티브 메트릭 유형으로 구현하지 않습니다(그러나 히스토그램을 통해서는 지원).

DogStatsD는 Docker Hub 및 GCR에서 사용할 수 있습니다:

Docker Hub에는 이미지 풀링 속도 제한이 있습니다. Docker Hub 고객이 아닌 경우, Datadog에서는 Datadog 에이전트와 클러스터 에이전트 구성을 업데이트하여 GCR이나 ECR에서 풀링하도록 구성할 것을 권고합니다. 예를 들어, 컨테이너 레지스트리 변경을 참고하세요.

작동 방식

DogStatsD는 UDP를 통해 커스텀 메트릭, 이벤트서비스 검사를 수락하고 이를 주기적으로 집계하여 Datadog으로 전달합니다.

UDP를 사용함에 따라 애플리케이션은 DogStatsD로 메트릭을 전송할 수 있으며, 응답을 기다릴 필요 없이 작업을 다시 시작할 수 있습니다. DogStatsD를 사용할 수 없게 되더라도 애플리케이션이 중단되지 않습니다.

dogstatsd

DogStatsD는 데이터를 수신할 때 _flush interval_이라는 기간 동안 고유 메트릭 각각에 대한 여러 데이터 포인트를 단일 데이터 포인트로 집계합니다. DogStatsD는 10초의 플러시 간격을 사용합니다.

설정

DogStatsD는 Datadog 에이전트와 번들되어 있는 서버와 여러 언어로 사용할 수 있는 클라이언트 라이브러리로 구성되어 있습니다. DogStatsD 서버는 기본적으로 에이전트 v6+에서 UDP 포트 8125를 통해 활성화됩니다. 필요한 경우 서버 커스텀 포트를 설정할 수 있습니다. 주소와 Datadog 에이전트 DogStatsD 서버 포트가 일치하도록 클라이언트를 구성하세요.

Datadog 에이전트 DogStatsD 서버

포트를 변경해야 할 경우, 주 에이전트 구성 파일에서 dogstatsd_port 옵션을 구성하고 에이전트를 재시작하세요. UNIX 도메인 소켓을 사용하도록 DogStatsD를 구성할 수도 있습니다.

커스텀 에이전트 DogStatsD 서버 UDP 포트를 활성화하는 방법:

  1. dogstatsd_port 파라미터를 설정합니다.

    ## @param dogstatsd_port - integer - optional - default: 8125
    ## Override the Agent DogStatsD port.
    ## Note: Make sure your client is sending to the same UDP port.
    #
    dogstatsd_port: 8125
    
  2. 에이전트를 재시작합니다.

기본적으로 DogStatsD는 UDP 포트 8125에서 수신하므로 컨테이너에서 에이전트를 실행할 때 이 포트를 호스트 포트에 바인딩해야 합니다. StatsD 메트릭이 localhost의 외부에서 오는 경우 DD_DOGSTATSD_NON_LOCAL_TRAFFICtrue로 설정하여 메트릭 수집을 허용해야 합니다. DogStatsd 서버를 실행한 상태에서 에이전트를 실행하려면 다음 명령을 실행하세요:

docker run -d --cgroupns host \
              --pid host \
              -v /var/run/docker.sock:/var/run/docker.sock:ro \
              -v /proc/:/host/proc/:ro \
              -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
              -e DD_API_KEY=<DATADOG_API_KEY> \
              -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC="true" \
              -p 8125:8125/udp \
              gcr.io/datadoghq/agent:latest

StatsD 메트릭을 수집하는 데 사용하는 포트를 변경해야 할 경우 DD_DOGSTATSD_PORT="<NEW_DOGSTATSD_PORT> 환경 변수를 사용하세요. 또 UNIX 도메인 소켓을 사용하도록 DogStatsD를 구성할 수도 있습니다.

UDP를 통한 출처 감지

출처 감지는 에이전트 v6.10.0 이상에서 지원되며, DogStatsD가 컨테이너 메트릭의 출처를 감지하고 자동으로 메트릭에 태그를 지정할 수 있도록 합니다. 이 모드가 활성화되면 UDP를 통해 수신된 모든 메트릭은 자동 탐지 메트릭과 동일한 포드 태그로 태그가 지정됩니다.

쿠버네테스가 아닌 환경에서의 출처 감지는 데이터그램 형식 및 Shell 사용량의 DogStatsD 프로토콜 확장을 기반으로 합니다. 에이전트에서 이 기능을 실행하려면 DD_DOGSTATSD_ORIGIN_DETECTION_CLIENT 환경 변수를 true로 설정합니다.

참고: Fargate 환경에서는 출처 감지가 지원되지 않습니다.

StatsD 메트릭 수집은 UNIX 도메인 소켓에서 기본적으로 활성화됩니다. UDP를 통해 StatsD 메트릭 수집을 시작하려면 Operator 설정에서 DogStatsD 기능을 활성화해야 합니다.

  1. datadog-agent.yaml 매니페스트에 features.dogstatsd.hostPortConfig.enabled를 추가합니다.

    features:
        dogstatsd:
            hostPortConfig:
                enabled: true
    

    datadog-agent.yaml 매니페스트 예시입니다.

    apiVersion: datadoghq.com/v2alpha1
    kind: DatadogAgent
    metadata:
      name: datadog
    spec:
      global:
        credentials:
          apiSecret:
            secretName: datadog-secret
            keyName: api-key
      features:
        dogstatsd:
          hostPortConfig:
            enabled: true
    

    이를 통해 Agent는 포트 8125에서 UDP를 통해 StatsD 메트릭을 수집할 수 있습니다.

  2. 변경 사항을 적용합니다:

    kubectl apply -f datadog-agent.yaml
    

경고: features.dogstatsd.hostPortConfig.hostPort 파라미터는 호스트의 포트를 엽니다. 방화벽이 애플리케이션이나 신뢰할 수 있는 소스의 액세스만 허용하는지 확인하세요. 네트워크 플러그인이 hostPorts를 지원하지 않는 경우 Agent 포드 사양에 hostNetwork: true를 추가하세요. 이는 호스트의 네트워크 네임스페이스를 Datadog Agent와 공유합니다. 이는 또한 컨테이너에서 열려 있는 모든 포트가 호스트에서도 열려 있음을 의미합니다. 포트가 호스트와 컨테이너 모두에서 사용되는 경우 충돌이 발생하고(동일한 네트워크 네임스페이스를 공유하므로) 파드가 시작되지 않습니다. 일부 Kubernetes 설치에서는 이를 허용하지 않습니다.

StatsD 메트릭을 에이전트로 전송

애플리케이션에서 호스트의 IP 주소를 확인할 수 있는 정확한 방법이 필요합니다. 이에 쿠버네티스 1.7에서는 환경 변수로 포드에 전달할 수 있는 속성 집합을 확장하는 것이 가능합니다. 버전 1.7 이상에서는 PodSpec에 환경 변수를 추가하여 모든 포드에 호스트 IP를 전달할 수 있습니다. 예를 들어, 애플리케이션 매니페스트는 다음과 같습니다:

env:
    - name: DD_AGENT_HOST
      valueFrom:
          fieldRef:
              fieldPath: status.hostIP

이 기능을 사용하면 애플리케이션을 실행하는 모든 포드가 $DD_AGENT_HOST에서 8125 포트를 통해DogStatsD 메트릭을 전송할 수 있습니다.

참고: Datadog는 속성을 할당할 때 통합 서비스 태깅을 사용할 것을 권장합니다. 통합 서비스 태깅은 세 가지 표준 태그인 env,serviceversion을 사용하여 Datadog 텔레메트리를 연결합니다. 환경 통합 방법에 대한 자세한 내용은 통합 서비스 태깅을 참조하세요.

UDP를 통한 출처 감지

출처 감지는 에이전트 6.10.0+에서 지원되며 DogStatsD는 컨테이너 메트릭의 출처를 탐지하고 메트릭에 자동으로 태그를 지정할 수 있습니다. 이 모드를 사용하도록 설정하면 UDP를 통해 수신된 모든 메트릭이 자동탐지 메트릭과 동일한 포드 태그로 태그가 지정됩니다.

  1. 오리진 감지를 활성화하려면 datadog-agent.yaml 매니페스트에 global.originDetectionUnified.enabled 설정을 추가합니다.

    global:
        originDetectionUnified:
            enabled: true
    

참고:

  • UDP 대신 UNIX 도메인 소켓이 있습니다.
  • UDP를 사용한 오리진 감지는 파드 ID를 엔티티 ID로 사용할 수 있습니다.

파드 ID를 엔티티 ID로 사용하려면 애플리케이션 매니페스트에 다음 줄을 추가하세요.

env:
    - name: DD_ENTITY_ID
      valueFrom:
          fieldRef:
              fieldPath: metadata.uid

오리진 감지를 사용하여 수집된 메트릭에 대해 태그 카디널리티를 설정하려면 features.dogstatsd.tagCardinality 설정을 low(기본값), orchestrator 또는 high로 설정합니다.

참고: UDP의 경우 커스텀 메트릭이 너무 많이 생성되는 것을 방지하기 위해 pod_name 태그가 기본값으로 추가되지 않습니다.

Helm을 사용하여 DogStatsD로 커스텀 메트릭을 수집하려면:

  1. datadog-values.yaml 파일을 업데이트하여 DogStatsD를 활성화합니다:

      dogstatsd:
        port: 8125
        useHostPort: true
        nonLocalTraffic: true
    

    참고: hostPort 기능을 사용하려면 Calico, Canal 또는 Flannel과 같이 CNI 사양을 준수하는 네트워크 제공자가 필요합니다. CNI를 준수하지 않는 네트워크 제공자에 대한 해결 방법과 자세한 내용은 쿠버네티스 설명서 HostPort 서비스가 작동하지 않음을 참조하세요.

    경고: hostPort파라미터는 호스트의 포트를 엽니다. 방화벽이 애플리케이션 또는 신뢰할 수 있는 소스로부터의 액세스만 허용하는지 확인하세요. 네트워크 플러그인이 hostPorts를 지원하지 않는 경우 에이전트 포드 사양에 hostNetwork: true을 추가합니다. 그러면 호스트의 네트워크 네임스페이스가 Datadog 에이전트와 공유됩니다. 또한 컨테이너에서 열려 있는 모든 포트가 호스트에서 열려 있음을 의미합니다. 포트가 호스트와 컨테이너 모두에서 사용되는 경우 포트가 충돌하여(같은 네트워크 네임스페이스를 공유하므로) 포드가 시작되지 않습니다. 일부 쿠버네티스 설치에서는 이를 허용하지 않습니다.

  2. 에이전트 설정을 업그레이드합니다:

    helm upgrade -f datadog-values.yaml <RELEASE_NAME> datadog/datadog
    
  3. 애플리케이션 포드 업데이트: 애플리케이션에서 호스트의 IP 주소를 확인할 수 있는 정확한 방법이 필요합니다. 이에 쿠버네티스 1.7에서는 환경 변수로 포드에 전달할 수 있는 속성 집합을 확장하는 것이 가능합니다. 버전 1.7 이상에서는 PodSpec에 환경 변수를 추가하여 모든 포드에 호스트 IP를 전달할 수 있습니다. 예를 들어, 애플리케이션 매니페스트는 다음과 같습니다:

    env:
        - name: DD_AGENT_HOST
          valueFrom:
              fieldRef:
                  fieldPath: status.hostIP
    

    이 기능을 사용하면 애플리케이션을 실행하는 모든 포드가 $DD_AGENT_HOST8125포트를 통해 DogStatsD 메트릭을 전송할 수 있습니다.

DogStatsD 클라이언트

원하는 언어로 DogStatsD 클라이언트 라이브러리를 설치하고 Datadog 에이전트 DogStatsD 서버의 주소 및 포트와 일치하도록 구성합니다.

DogStatsD 클라이언트 설치

공식 Datadog-DogStatsD 클라이언트 라이브러리는 다음 언어로 사용할 수 있습니다. 호환되는 StatsD 클라이언트는 DogStatsD 및 에이전트와 함께 작동하지만 위에서 언급한 Datadog-specific 기능은 포함하지 않습니다:

Nuget CLI를 사용하여 패키지를 직접 설치하거나 NuGet에서 PackageReference를 가져옵니다.

dotnet add package DogStatsD-CSharp-Client

DogStatsD 클라이언트 인스턴스화

DogStatsD 클라이언트가 설치되면 코드에서 인스턴스화합니다:

DogStatsd 클래스를 설정합니다:

// The code is located under the StatsdClient namespace
using StatsdClient;

// ...

var dogstatsdConfig = new StatsdConfig
{
    StatsdServerName = "127.0.0.1",
    StatsdPort = 8125,
};

using (var dogStatsdService = new DogStatsdService())
{
    if (!dogStatsdService.Configure(dogstatsdConfig))
        throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
    // ...
} // Flush metrics not yet sent

클라이언트 인스턴스화 파라미터

참고: Datadog는 태그를 할당할 때 통합 서비스 태깅을 사용할 것을 권장합니다. 통합 서비스 태깅은 세 가지 표준 태그 env,service, version를 사용하여 Datadog 텔레메트리를 연결합니다. 환경 통합 방법에 대한 자세한 내용은 통합 서비스 태깅을 참조하세요.

필수 DogStatsD 설정 (urlport) 외에도 DogStatsD 클라이언트에 대해 다음 파라미터를 사용할 수 있습니다:

파라미터유형기본값설명
StatsdServerName문자열localhost타겟팅된 StatsD 서버의 호스트 이름입니다.
StatsdPort정수8125타겟팅된 StatsD 서버의 포트입니다.
Prefix문자열null모든 메트릭, 이벤트 및 서비스 검사에 적용할 접두사입니다.
ConstantTags문자열 목록null모든 메트릭, 이벤트 및 서비스 검사에 적용할 글로벌 태그입니다.

DogStatsD 자세히 알아보기

DogStatsD와 StatsD는 대체로 유사하지만, DogStatsD에는 사용 가능한 데이터 유형, 이벤트, 서비스 검사 및 태그를 포함한 DataDog 관련 고급 기능이 포함되어 있습니다:


DogStatsD에서 사용하는 데이터그램 형식에 대해 자세히 알고 싶거나 자체 Datadog 라이브러리를 개발하려면 데이터그램과 쉘 사용(율) 섹션을 참조하세요. 명령줄에서 직접 메트릭과 이벤트를 보내는 방법도 확인할 수 있습니다.

참고 자료

PREVIEWING: aliciascott/DOCS-10258