- go
- kubernetes 클러스터 보안
- SPF
- Java
- SAA-CO2
- kubernetesadmin
- dMarc
- kubernetesscheduling
- Fargate
- CKA
- aws
- kubernetesstudyguide
- SMTP
- DKIM
- aws ses
- nodeaffinity
- Lambda
- gochannel
- DevOps
- cloudnative
- Kubernetes
- SAA-CO3
- Certified Solutions Architect
- JVM
- kubernetes admission controller
- EKS
- K8S
- 메일 인증 프로토콜
- containerorchestration
- Today
- Total
DevOps Tasks
Spring Boot Actuator & DatadogMonitoring 본문
Spring Boot 애플리케이션의 성능을 모니터링하기 위해 `Actuator`와 `Micrometer`, 그리고 Datadog을 연동하는 방법을 알아보겠습니다.
특히 `StatsD` 기반 Custom Metric 설정까지 다룹니다.
1. Spring Boot Actuator & Micrometer
1.1 Actuator란?
`Spring Boot Actuator`는 애플리케이션의 운영 및 모니터링을 위한 엔드포인트를 제공하는 모듈입니다. 기본적으로 /actuator/metrics 엔드포인트를 통해 애플리케이션 내부의 다양한 성능 지표(CPU 사용량, GC 상태, HTTP 요청 수 등)를 확인할 수 있습니다.
1.2 Micrometer와 Exporter
Actuator는 `Micrometer`를 통해 메트릭을 수집하며, `Micrometer`는 다양한 모니터링 시스템과 연동할 수 있도록 `Exporter` 기능을 제공합니다. 대표적인 `Exporter`는 다음과 같습니다.
Exporter | 설명 | 사용 대상 |
StatsD Exporter | UDP 기반으로 메트릭을 전송 | Datadog(StatsD 방식) |
Datadog Exporter | Datadog API를 통해 HTTP로 메트릭을 전송 | Datadog(HTTP 방식) |
Prometheus Exporter | Prometheus 서버가 Pull 방식으로 메트릭 가져감 | Prometheus |
Graphite Exporter | Graphite 서버로 메트릭을 전송 | Graphite |
2. Spring Boot 설정 (Actuator + Micrometer + StatsD)
Datadog과 연동하기 위해 `StatsD Exporter`를 활용할 수 있습니다. 아래는 Spring Boot 프로젝트에서 필요한 설정 예시입니다.
2.1 `application.yaml` 예시
management:
endpoints:
web:
exposure:
include:
- metrics # /actuator/metrics 노출
metrics:
enable:
all: false
hikaricp: true # HikariCP 메트릭 활성화
tomcat: true # Tomcat 메트릭 활성화
statsd:
metrics:
export:
enabled: true
host: localhost # Datadog Agent 호스트
port: 8125 # Datadog Agent StatsD 포트
flavor: datadog # Datadog StatsD 형식
step: 10s # 10초 간격으로 메트릭 전송
2.2 Gradle 의존성
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-statsd'
}
- `spring-boot-starter-actuator` : Actuator 엔드포인트 제공
- `micrometer-registry-statsd` : StatsD를 통해 Datadog으로 메트릭 전송
3. Datadog Agent & StatsD 설정
3.1 왜 StatsD인가?
Datadog은 `HTTP API`와 `StatsD` 방식을 모두 지원합니다. 두 방식의 차이
방식 | 설명 | 장점 | 단점 |
Datadog API | HTTP로 직접 메트릭 전송 | Agent 없이 사용 가능 | API 호출 부담, 네트워크 비용 |
StatsD | UDP로 Agent에 전송 (고성능) | 성능 우수, 경량 | Datadog Agent 필요 |
이번 예시에서는 `StatsD`를 사용하고, Datadog Agent가 해당 메트릭을 수집하여 Datadog 서버로 전달합니다.
3.2 Datadog Agent의 StatsD 설정 예시
Datadog Agent에서 StatsD 포트를 열어 Micrometer가 전송하는 데이터를 받아야 합니다.
{
"hostPort": 8125,
"protocol": "udp",
"containerPort": 8125
}
또한, 환경 변수를 통해 Datadog Agent를 구성할 수 있습니다.
"environment": [
{
"name": "DD_APM_ENABLED",
"value": "true"
},
{
"name": "DD_APM_NON_LOCAL_TRAFFIC",
"value": "true"
},
{
"name": "DD_LOGS_ENABLED",
"value": "false"
},
{
"name": "DD_SITE",
"value": "datadoghq.com"
},
{
"name": "DD_LOG_LEVEL",
"value": "WARN"
},
{
"name": "ECS_FARGATE",
"value": "true"
}
]
환경 변수 | 설명 |
DD_APM_ENABLED | APM(애플리케이션 성능 모니터링) 활성화 |
DD_APM_NON_LOCAL_TRAFFIC | 외부 트래픽도 추적하도록 설정 |
DD_LOGS_ENABLED | 로그 수집 비활성화 |
DD_SITE | Datadog 서버 사이트 |
DD_LOG_LEVEL | WARN 레벨로 로그 출력 |
ECS_FARGATE | AWS Fargate 환경임을 명시 |
3.3 컨테이너 단위 식별 개선 : `DD_DOGSTATSD_TAG_CARDINALITY`
3.3.1 식별 단위의 중요성
기본적으로 ECS Fargate에서는 `Task` 단위로 메트릭을 식별합니다.
그러나 세분화된 분석(예: 컨테이너별 리소스 사용량, 세션 상태)을 위해 `container_id` 단위 식별이 필요할 수 있습니다.
3.2 DD_DOGSTATSD_TAG_CARDINALITY 설정
{
"name": "DD_DOGSTATSD_TAG_CARDINALITY",
"value": "orchestrator"
}
- low(기본값) : ECS는 `Service` 단위, K8s는 Pod 단위
- orchestrator : ECS는 `Task` 단위
- high : ECS는 `Container ID` 단위, K8s는 Pod+Container
초기에는 `low` 옵션(=Service 단위)으로만 메트릭을 집계했지만, `orchestrator`나 `high`로 설정하면 더욱 세밀하게 모니터링할 수 있습니다.
DogStatsD를 사용하지 않는 애플리케이션에는 영향이 없습니다.
4. Datadog 메트릭 수집 Flow
- Spring Boot Actuator + Micrometer에서 메트릭 생성
- StatsD Exporter를 통해 UDP 전송
- Datadog Agent가 메트릭 수신 후 Datadog 서버로 업로드
- Datadog UI에서 메트릭을 실시간으로 확인 및 대시보드 구성
[Spring Boot Actuator] → (Micrometer) → [StatsD] → (Datadog Agent) → (Datadog Backend) → [Datadog UI]
아래 이미지는 Datadog UI에서 Spring Boot 애플리케이션의 메트릭이 정상적으로 수집·표시되는 모습입니다.
위처럼 Datadog 대시보드에서 필요한 메트릭(예: `custom.request.count` 등)을 검색·추가하여 실시간으로 모니터링할 수 있습니다.
5. Datadog Custom Metric 수집
5.1 사용자 정의 메트릭
`StatsD`를 활용하면 기본 메트릭 외에도 `Custom Metric`을 손쉽게 전송할 수 있습니다.
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class CustomMetrics {
private final MeterRegistry meterRegistry;
public CustomMetrics(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@PostConstruct
public void init() {
meterRegistry.counter("custom.request.count").increment();
}
}
- `custom.request.count`라는 메트릭을 정의하고 카운트를 증가
- Datadog에서 해당 메트릭(`custom.request.count`) 모니터링 가능
6. `DD_DOGSTATSD_TAG_CARDINALITY="orchestrator"` 설정 영향
Datadog의 `Tag Cardinality` 설정을 orchestrator로 변경하면, ECS 태그(`container_id`, `task_name` 등)를 자동 추가하게 됩니다.
항목 | 영향 여부 | 해결책 |
DogStatsD 미사용 애플리케이션 | ❌ 없음 | 문제 없음 |
DogStatsD 사용 애플리케이션 | ⭕ 있음 | 자동 추가 태그로 인한 메트릭 필터링 조정 필요 |
Datadog Agent 성능 부하 | ⭕ 미미함 | ECS API 호출이 증가하지만 운영상 큰 영향 없음 |
결론: DogStatsD를 사용하지 않는 앱은 영향 없고, 사용 중인 앱에서는 태그 필터링 조정이 필요합니다.
7. 결론
- `Spring Boot Actuator` + `Micrometer`를 통해 Datadog으로 애플리케이션 메트릭 전송 가능
- `StatsD` 방식을 사용하면 높은 성능과 Agent 연동으로 효율적인 모니터링 구현
- Custom Metric을 통해 서비스 특화 지표를 Datadog에 전달해 더욱 세밀하게 모니터링 가능
- `Tag Cardinality` 설정을 orchestrator로 하면 ECS 태그가 자동으로 추가되어 메트릭 식별이 한층 수월해집니다.
Enjoy your enhanced monitoring with Datadog! 🚀
'DevOps' 카테고리의 다른 글
Terraform을 통한 AWS API Gateway 도메인 자동화 (0) | 2024.08.04 |
---|---|
메일 인증 프로토콜로 제로 스팸 메일 만들기 - DMARC Part (0) | 2024.02.04 |
메일 인증 프로토콜로 제로 스팸 메일 만들기 - DKIM Part (0) | 2024.02.04 |
메일 인증 프로토콜로 제로 스팸 메일 만들기 - SPF Part (0) | 2024.02.04 |
[JAVA ] GC (Garbage Collection) Master (0) | 2024.01.31 |