안녕하세요! 오늘은 모니터링 도구의 강자 Datadog Agent를 사용해서 Java 애플리케이션의 로그를 수집하는 방법에 대해 알아보겠습니다. 🚀

진짜.. 데이터독.. 비싼데
너무 불친절한 공식문서와.. 대응...
내가 하나 만들어서 배포해야 하나ㅠ

먼저 Ubuntu 환경에서 Datadog Agent를 설치해야 합니다. Datadog 공식 사이트에서 제공하는 설치 스크립트를 사용하면 간단하게 설치할 수 있어요.
https://app.datadoghq.com/fleet/install-agent/latest?platform=linux


설치 과정은 매우 간단합니다. 제공된 원라이너 스크립트를 실행하면 자동으로 설치가 완료되죠! 💪
Agent가 설치되었다면, 이제 로그 수집 기능을 활성화해야 합니다.
cd /etc/datadog-agent
vi datadog.yaml
설정 파일에서 logs_enabled 항목을 찾아서 true로 변경해주세요:
logs_enabled: true
이제 Java 애플리케이션의 로그를 수집하기 위한 설정을 해보겠습니다.
bash# Java 설정 폴더 생성
mkdir -p /etc/datadog-agent/conf.d/java.d
touch /etc/datadog-agent/conf.d/java.d/conf.yaml
여기서는 실제 운영 환경을 고려해서 민감한 정보들을 환경변수나 일반적인 형태로 변경했습니다:
#Log section
logs:
# 개발 환경 로그
- type: file
path: ${LOG_PATH}/app-service.log
service: ${SERVICE_NAME}
source: java
sourcecategory: application
log_processing_rules:
# 멀티라인 로그 처리 (타임스탬프로 시작하는 로그들)
- type: multi_line
name: new_log_start_with_timestamp
pattern: '^\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}\s\w+\]'
# 불필요한 인터셉터 로그 제외
- type: exclude_at_match
name: exclude_debug_logs
pattern: '.*WebLogInterceptor.*'
# API 서버 로그 (서버 1)
- type: file
path: ${TOMCAT1_LOG_PATH}/app-service.log
service: api-server-1
source: java
sourcecategory: application
log_processing_rules:
- type: multi_line
name: new_log_start_with_timestamp
pattern: '^\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}\s\w+\]'
- type: exclude_at_match
name: exclude_debug_logs
pattern: '.*WebLogInterceptor.*'
# API 서버 로그 (서버 2)
- type: file
path: ${TOMCAT2_LOG_PATH}/app-service.log
service: api-server-2
source: java
sourcecategory: application
log_processing_rules:
- type: multi_line
name: new_log_start_with_timestamp
pattern: '^\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}\s\w+\]'
- type: exclude_at_match
name: exclude_debug_logs
pattern: '.*WebLogInterceptor.*'
설정이 완료되었다면 Agent를 재시작해서 변경사항을 적용해야 합니다:
bash# Agent 재시작
sudo systemctl restart datadog-agent
sudo datadog-agent status
유용한 명령어들 📋
bash# Agent 시작
sudo systemctl start datadog-agent
# Agent 중지
sudo systemctl stop datadog-agent
# Agent 재시작 (다른 방법)
sudo service datadog-agent restart
# Docker 권한 추가 (필요시)
sudo usermod -a -G docker dd-agent
# 상태 확인
sudo datadog-agent status
Datadog Agent가 로그 파일을 읽을 수 있도록 적절한 권한을 부여해야 합니다:
bash# 현재 파일에 대한 읽기 권한 부여
sudo setfacl -m u:dd-agent:rx ${LOG_PATH}/app-service.log
# 권한 확인
getfacl ${LOG_PATH}/app-service.log
# 향후 생성되는 파일에 대해서도 자동으로 권한 부여
sudo setfacl -d -m u:dd-agent:rx ${LOG_PATH}/
Datadog에서 로그를 더 효과적으로 파싱하기 위해 GROK 패턴을 설정할 수 있습니다 (이 부분은 GUI에서 진행) :
customlog \[%{date("yyyy-MM-dd HH:mm:ss:SSS z"):timestamp}\] \[%{data:thread}\] %{word:status} \[Logger:%{data:logger}\] - %{data:message}
일반 로그 패턴
log \[%{date("yyyy-MM-dd HH:mm:ss:SSS z"):timestamp}\] \[%{data:thread}\] %{word:status} \[Logger:%{data:logger}\] - %{data:message}
에러 로그 패턴
error_rule Server Error - Status: %{data:error_status}, Response: %{data::keyvalue(":")}
이제 Datadog Agent를 통해 Java 애플리케이션의 로그를 효과적으로 수집할 수 있게 되었습니다!
설정 과정에서 중요한 포인트들을 정리하면:
이렇게 설정하면 Datadog 대시보드에서 실시간으로 로그를 모니터링하고, 알림을 설정하여 문제 상황을 빠르게 감지할 수 있어요.
혹시 설정 과정에서 문제가 생긴다면 sudo datadog-agent status 명령어로 상태를 확인해보시고, 로그 파일 권한 설정을 다시 한번 점검해보세요! 🔍