Kubernetes의 Consul에 대한 Datadog 메트릭 수집 구성
Kubernetes의 Consul에 대한 Datadog 메트릭 수집 구성 (Configure Datadog Metrics Collection for Consul on Kubernetes)
이 페이지는 Consul on Kubernetes 배포에서 Datadog 메트릭 수집을 통합하는 프로세스를 설명해요. Helm 차트에는 통합 프로세스를 간소화하는 자동화된 구성 옵션이 포함되어 있어요.
출처: 문서
본문
이 페이지는 Consul on Kubernetes 배포에서 Datadog 메트릭 수집(Datadog metrics collection)을 통합하는 프로세스를 설명해요. Helm 차트에는 통합 프로세스를 간소화하는 자동화된 구성 옵션이 포함되어 있어요.
Datadog 메트릭 통합 방법 (Datadog Metrics Integration Methods)
사용자는 아래에 설명된 세 가지 통합 방법 중 메트릭 수집 의도에 가장 잘 맞는 하나 를 선택해야 해요. DogStatsD, Consul Integration, Openmetrics Prometheus 통합 방법은 상호 배타적 이에요.
이유: consul-k8s helm 차트 자동화 구성은 use_prometheus_endpoint 구성 매개변수를 사용해 Datadog의 Consul Integration 방법을 구현해요. DogstatsD, Consul Integration, Openmetrics Prometheus 메트릭은 설계상 동일한 metric name 구문을 공유하므로 충돌을 일으키게 돼요. consul.py 통합 소스 코드와 consul-k8s helm chart는 한 번에 하나 이상의 통합을 활성화하는 것을 금지해요.
DogstatsD
이 구현 방법은 hashicorp/go-metrics DogstatsD 클라이언트 라이브러리를 활용해 메트릭 수집을 관리해요. 메트릭은 집계되어 Consul 서버와 동일한 Kube 노드에서 실행되는 Datadog Agent에 UDP 또는 UDS 전송으로 전송돼요.
이 메트릭 수집 방법을 활성화하면 Datadog 에이전트가 Consul에 도달해 /v1/agent/metrics API 엔드포인트를 스크랩하려고 시도하는 대신 Consul이 메트릭 트래픽 전달을 Datadog 에이전트에 직접 제어할 수 있어요.
이는 각 서버 에이전트의 구성 telemetry 스탠자를 업데이트해 수행돼요.
Helm 차트 구성 (Helm Chart Configuration)
DogstatsD (UDS) — DogstatsD (UDP: KubeService) — DogstatsD (UDP: hostPort)
Consul Helm 차트 오버라이드:
metrics:
enabled: true
enableAgentMetrics: true
datadog:
enabled: true
namespace: "datadog"
dogstatsd:
enabled: true
socketTransportType: "UDS"
dogstatsdAddr: "/var/run/datadog/dsd.socket"
결과적인 서버 에이전트 telemetry 구성:
{
"telemetry": {
"dogstatsd_addr": "unix:///var/run/datadog/dsd.socket"
}
}
Consul Helm 차트 오버라이드:
metrics:
enabled: true
enableAgentMetrics: true
datadog:
enabled: true
namespace: "datadog"
dogstatsd:
enabled: true
socketTransportType: "UDP"
# Set `dogstatsdPort` to `0` (default) to omit port number append to address.
dogstatsdPort: 0
dogstatsdAddr: "datadog-agent.datadog.svc.cluster.local"
결과적인 서버 에이전트 telemetry 구성:
{
"telemetry": {
"dogstatsd_addr": "datadog-agent.datadog.svc.cluster.local"
}
}
Consul Helm 차트 오버라이드:
metrics:
enabled: true
enableAgentMetrics: true
datadog:
enabled: true
namespace: "datadog"
dogstatsd:
enabled: true
socketTransportType: "UDP"
dogstatsdPort: 8125
dogstatsdAddr: "172.20.180.10"
결과적인 서버 에이전트 telemetry 구성:
{
"telemetry": {
"dogstatsd_addr": "172.20.180.10:8125",
}
}
UDS/UDP 장점과 단점 (UDS/UDP Advantages and Disadvantages)
이 통합 방법은 Unix Domain Sockets(UDS) 또는 User Datagram Protocol(UDP) 전송을 활용해 메트릭 수집을 수행해요. Kubernetes 인프라 및/또는 서비스 메시를 관리하는 실무자는 아래 표에 설명된 영향(implications)을 고려해야 해요.
UDS
패킷 전송 (Packet Transport) : Unix Domain Socket File
| 장점 (Advantages) | 단점 (Disadvantages) |
|---|---|
| Datadog Agent에 대한 IP 또는 DNS 해석 요구 사항 없음 | hostPath 볼륨 연결 필요 |
| 향상된 네트워크 성능 | 메트릭을 전송하는 모든 호스트에서 Datadog Agent가 실행되어야 함 |
| 더 높은 처리량 용량 | |
| 패킷 오류 처리 | |
| 자동 컨테이너 ID 태깅 |
UDP
패킷 전송 (Packet Transport) :
- Kubernetes Service
IP:Port - Container Host Port
| 장점 (Advantages) | 단점 (Disadvantages) |
|---|---|
| hostPath 볼륨 연결 불필요 | 패킷 오류 처리 없음 |
| (KubeDNS) 클러스터에서 접근 가능하면 Hostport 노출 불필요 | (Hostport) Calico, Canal, Flannel과 같은 CNI 사양을 준수하는 네트워킹 제공자 필요 |
가상 머신 호스트와 유사한 IP:Port 구성 |
(Hostport) hostNetwork를 사용해 호스트에 포트 노출 필요 |
| (Hostport) 접근을 허용하는 방화벽 접근 제어 필요 | |
| (Hostport) 네트워크 네임스페이스 공유 필요 |
DogstatsD 메트릭 수집 확인 (Verifying DogstatsD Metric Collection)
Datadog 에이전트가 트래픽을 수신하고 있는지 확인하려면 Consul에서 DogstatsD 트래픽을 수신할 것으로 예상되는 Datadog Agent에서 status 하위 명령을 실행할 수 있어요.
구성이 제대로 설정된 후에는 결과 출력에서 UDP 또는 UDS 트래픽 패킷 수가 증가해야 해요.
| Transport | Command | Pod | Container |
|---|---|---|---|
UDP || UDS |
agent status |
datadog-agent | agent |
UDP:
# Example: UDP Packet and Metric Packet Traffic Increase
=========
DogStatsD
=========
Event Packets: 0
Event Parse Errors: 0
Metric Packets: 5,908
Metric Parse Errors: 0
Service Check Packets: 0
Service Check Parse Errors: 0
Udp Bytes: 636,872
Udp Packet Reading Errors: 0
Udp Packets: 3,300
Uds Bytes: 0
Uds Origin Detection Errors: 0
Uds Packet Reading Errors: 0
Uds Packets: 0
Unterminated Metric Errors: 0
UDS:
# Example: UDS Packet and Metric Packet Traffic Increase
=========
DogStatsD
=========
Event Packets: 0
Event Parse Errors: 0
Metric Packets: 30,523
Metric Parse Errors: 0
Service Check Packets: 0
Service Check Parse Errors: 0
Udp Bytes: 124,635
Udp Packet Reading Errors: 0
Udp Packets: 731
Uds Bytes: 2,957,433
Uds Origin Detection Errors: 0
Uds Packet Reading Errors: 0
Uds Packets: 11,563
Unterminated Metric Errors: 0
트래픽 확인은 Datadog에 메트릭 데이터를 제출할 것으로 예상되는 consul-server에서 netstat 명령줄 유틸리티를 사용해 수행할 수도 있어요.
참고 (Note):
netstat사용은 테스트를 위해 consul-server에open-bsd네트워킹 도구를 설치하려면 권한 있는(privileged) 컨테이너 권한이 필요해요.
| Transport | Command | Pod | Container |
|---|---|---|---|
UDP || UDS |
netstat |
consul-server | consul |
UDP:
$ netstat -nup | grep "172.28.13.12:8125.*ESTABLISHED
udp 0 0 127.0.0.1:53874 127.0.0.1:8125 ESTABLISHED 23176/consul
UDS:
$ netstat -x
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM CONNECTED 15952473
unix 2 [ ] DGRAM 15652537 @9d10c
UDS는 구성된 Unix 소켓에 테스트 메트릭 패킷을 보내 확인할 수 있는 추가 기능을 제공해요.
참고 (Note):
netcat(nc)을 사용하려면 테스트를 위해 consul-server에open-bsd네트워킹 도구를 설치하려면 권한 있는 컨테이너 권한이 필요해요.
| Transport | Command | Pod | Container |
|---|---|---|---|
UDS |
nc |
consul-server | consul |
$ echo -n "custom.metric.name:1|c" | nc -U -u -w1 /var/run/datadog/dsd.socket
Bound on /tmp/nc-IjJkoG/recv.sock
사용 사례 (Use Case)
DogstatsD 통합은 Consul에서 전체 범위의 메트릭 수집을 제공하며, 트래픽 흐름이 인바운드(/v1/agent/metrics/ API 엔드포인트로)가 아니라 아웃바운드(Datadog Agent로)이므로 접근 제어 구성 요구 사항을 최소화해요.
수집된 메트릭 데이터 (Metrics Data Collected)
- DogstatsD를 통해 전송되는 메트릭의 전체 목록은 Agent Telemetry 문서에 나열된 것들로 구성돼요.
Datadog Checks: 공식 Consul 통합 (Datadog Checks: Official Consul Integration)
Datadog Agent 패키지에는 에이전트 배포 시 기본 제공되는 공식 타사 통합이 포함되어 있어요.
Consul 통합 Datadog checks는 Consul의 내장 기능 세트를 활용하는 몇 가지 추가 메트릭 확인 검사를 제공하며, Consul이 제공하는 메트릭 이상으로 정상 작동 중인 Consul을 모니터링하는 데 도움을 줘요.
공식 통합이 추가하는 기능 개요는 아래 표를 참고해요.
참고 (Note): 현재 Consul RPC TLS를 활성화한 Helm 오버라이드로 구성된 어노테이션은 서버 및 CA 인증서 시크릿이 Datadog 에이전트 릴리스 네임스페이스와 공유되고 Datadog Agent, agent 컨테이너의
/etc/datadog-agent/conf.d/consul.d/certs경로에 유효한tls.crt,tls.key,ca.crt시크릿 볼륨을 마운트한다고 가정해요.
Helm 차트 구성 (Helm Chart Configuration)
Datadog Consul Checks — Consul Helm 차트 오버라이드:
global:
tls:
enabled: true
enableAutoEncrypt: true
acls:
manageSystemACLs: true
metrics:
enabled: true
enableAgentMetrics: true
datadog:
enabled: true
namespace: "datadog"
Consul server-statefulset.yaml 어노테이션:
"ad.datadoghq.com/consul.checks": |
{
"consul": {
"init_config": {},
"instances": [
{
"url": "https://consul-server.consul.svc:8501",
"tls_cert": "/etc/datadog-agent/conf.d/consul.d/certs/tls.crt",
"tls_private_key": "/etc/datadog-agent/conf.d/consul.d/certs/tls.key",
"tls_ca_cert": "/etc/datadog-agent/conf.d/consul.d/ca/tls.crt",
"use_prometheus_endpoint": true,
"acl_token": "ENC[k8s_secret@consul/consul-datadog-agent-metrics-acl-token/token]",
"new_leader_checks": true,
"network_latency_checks": true,
"catalog_checks": true,
"auth_type": "basic"
}
]
}
}
수행되는 추가 통합 검사 (Additional Integration Checks Performed)
| Consul 구성 요소 | 설명 | API 엔드포인트 |
|---|---|---|
| Agent | 에이전트 메타데이터 (예: 버전) | /v1/agent/self |
| Metrics | Prometheus 형식 메트릭 | /v1/agent/metrics |
| Serf | 이벤트 및 멤버십 플랩 | /v1/health/service/consul /v1/agent/self |
| Raft | Raft 피어 정보 및 리더 선거 모니터링 | /v1/status/leader /v1/status/peers |
| Catalog Services | 서비스 상태 및 노드 수 | /v1/catalog/services /v1/health/state/any |
| Catalog Nodes | 노드 서비스 수 및 상태 | /v1/health/state/any /v1/health/service/<service> |
| Consul Latency | Consul LAN + WAN 좌표 지연 계산 | /v1/agent/self /v1/coordinate/nodes /v1/coordinate/datacenters |
사용 사례 (Use Case)
이 통합은 주로 서비스 디스커버리에 초점을 맞춘 기본 Consul 모니터링을 위한 것이에요.
수집된 메트릭 데이터 (Metrics Data Collected)
이 방법으로 스크랩되고 매핑되는 Consul의 Prometheus 메트릭 목록은 통합 소스 코드의 최신 metrics.py에 나열되어 있어요.
Consul Latency 메트릭이 계산되는 방식을 이해하려면 Consul Network Coordinates 문서를 검토해요.
수집된 메트릭 데이터의 전체 설명은 Datadog Documentation을 검토해요.
Openmetrics Prometheus
v6.5.0 이상의 Datadog 에이전트에서는 Kubernetes 애플리케이션 Prometheus 엔드포인트를 스크랩하기 위해 OpenMetrics 및 Prometheus checks를 사용할 수 있어요.
이 방법은 Prometheus 텍스트 형식에 완전히 지원되는 Openmetrics를 통해 수집을 구현하며, 아래에 설명된 대로 pod 어노테이션을 사용해 수행돼요.
참고 (Note): Datadog을 통한 OpenMetrics 수집을 활성화하면 설계상 consul-server statefulset 배포에서
prometheus.io/path및prometheus.io/port어노테이션을 제거해 Datadog가 필요에 따라 RPC TLS와 Consul ACL을 사용해 에이전트의 메트릭 API 엔드포인트를 스크랩할 수 있게 해요.
참고 (Note): 현재 Consul RPC TLS를 활성화한 Helm 오버라이드로 구성된 어노테이션은 서버 및 CA 인증서 시크릿이 Datadog 에이전트 릴리스 네임스페이스와 공유되고 Datadog Agent, agent 컨테이너의
/etc/datadog-agent/conf.d/consul.d/certs경로에 유효한tls.crt,tls.key,ca.crt시크릿 볼륨을 마운트한다고 가정해요.
Helm 차트 구성 (Helm Chart Configuration)
OpenMetrics Prometheus — Consul Helm 차트 오버라이드:
global:
tls:
enabled: true
enableAutoEncrypt: true
acls:
manageSystemACLs: true
metrics:
enabled: true
enableAgentMetrics: true
datadog:
enabled: true
namespace: "datadog"
openMetricsPrometheus:
enabled: true
Consul server-statefulset.yaml 어노테이션:
ad.datadoghq.com/consul.checks: |
{
"openmetrics": {
"init_config": {},
"instances": [
{
"openmetrics_endpoint": "https://consul-server.consul.svc:8501/v1/agent/metrics?format=prometheus",
"tls_cert": "/etc/datadog-agent/conf.d/consul.d/certs/tls.crt",
"tls_private_key": "/etc/datadog-agent/conf.d/consul.d/certs/tls.key",
"tls_ca_cert": "/etc/datadog-agent/conf.d/consul.d/ca/tls.crt",
"headers": {
"X-Consul-Token": "ENC[k8s_secret@consul/consul-datadog-agent-metrics-acl-token/token]"
},
"namespace": "consul",
"metrics": [ ".*" ]
}
]
}
}
사용 사례 (Use Case)
이 통합 방법은 Prometheus 지원 스크랩과 수집 데이터의 추가 사용자 지정에 유용해요.
기본적으로 이 방법을 사용해 가져온 모든 메트릭은 /v1/agent/metrics?format=prometheus API 쿼리를 사용해 Consul 메트릭을 스크랩하며 사용자 지정 메트릭으로 간주돼요.
이 방법의 사용은 Mapping Prometheus Metrics to Datadog Metrics에 설명된 대로 Datadog에 매핑돼요. 다음 표는 이러한 메트릭이 서로 어떻게 매핑되는지 요약해요.
| OpenMetrics 메트릭 유형 | Datadog 메트릭 유형 |
|---|---|
Gauge |
gauge |
Counter |
count |
Histogram: _count |
count.count |
Histogram: _sum |
count.sum |
Histogram: _bucket |
count.bucket || distribution |
Summary: _count |
count.count |
Summary: _sum |
count.sum |
Summary: sample |
gauge.quantile |
수집된 메트릭 데이터 (Metrics Data Collected)
이 통합은 기본적으로 와일드카드(".*")를 사용해 /v1/agent/metrics 엔드포인트에서 내보내지는 모든 메트릭을 수집해요.
수집된 메트릭 데이터의 전체 목록과 설명은 Agent Telemetry 문서를 참고해요.