Datadog Agent를 활용한 Java 애플리케이션 로그 수집하기 📊

Twoweekhee·2025년 5월 20일

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

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

1. Datadog Agent 설치하기 🛠️

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

설치 과정은 매우 간단합니다. 제공된 원라이너 스크립트를 실행하면 자동으로 설치가 완료되죠! 💪

2. 로그 수집 기능 활성화하기 🔧

Agent가 설치되었다면, 이제 로그 수집 기능을 활성화해야 합니다.

설정 파일이 있는 디렉토리로 이동

cd /etc/datadog-agent

메인 설정 파일 편집

vi datadog.yaml

설정 파일에서 logs_enabled 항목을 찾아서 true로 변경해주세요:
logs_enabled: true

3. Java 애플리케이션 로그 설정하기 ☕

이제 Java 애플리케이션의 로그를 수집하기 위한 설정을 해보겠습니다.

설정 폴더 및 파일 생성

bash# Java 설정 폴더 생성
mkdir -p /etc/datadog-agent/conf.d/java.d

설정 파일 생성

touch /etc/datadog-agent/conf.d/java.d/conf.yaml

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.*'

4. Agent 재시작 및 상태 확인 🔄

설정이 완료되었다면 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

5. 파일 권한 설정하기 🔐

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}/

6. Pipeline GROK Pattern 설정 🎯

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 애플리케이션의 로그를 효과적으로 수집할 수 있게 되었습니다!
설정 과정에서 중요한 포인트들을 정리하면:

  • 멀티라인 처리: Java 스택 트레이스 같은 멀티라인 로그 처리
  • 필터링: 불필요한 로그는 제외하여 비용 감소
  • 권한 관리: Agent가 로그 파일에 접근할 수 있도록 적절한 권한 설정

이렇게 설정하면 Datadog 대시보드에서 실시간으로 로그를 모니터링하고, 알림을 설정하여 문제 상황을 빠르게 감지할 수 있어요.

혹시 설정 과정에서 문제가 생긴다면 sudo datadog-agent status 명령어로 상태를 확인해보시고, 로그 파일 권한 설정을 다시 한번 점검해보세요! 🔍

profile
개발하는 감자, 이세상 감자 모여라~

0개의 댓글