🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Datadog 트러블슈팅 완벽 가이드 - 슬라이드 1/11
A

AI Generated

2025. 10. 31. · 29 Views

Datadog 트러블슈팅 완벽 가이드

Datadog을 활용한 애플리케이션 모니터링과 트러블슈팅 방법을 초급자도 쉽게 이해할 수 있도록 설명합니다. 실제 코드 예제와 함께 Datadog APM, 로그 수집, 메트릭 모니터링 방법을 배울 수 있습니다.


카테고리:Python
언어:Python
메인 태그:#Datadog
서브 태그:
#APM#Monitoring#Logging#Metrics

들어가며

이 글에서는 Datadog 트러블슈팅 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Datadog_초기_설정
  2. 커스텀_스팬_추가
  3. 로그_통합_설정
  4. 커스텀_메트릭_전송
  5. 에러_추적_설정
  6. 데이터베이스_쿼리_모니터링
  7. HTTP_요청_추적
  8. 태그_활용한_필터링
  9. 프로파일링_활성화
  10. 알림_설정을_위한_모니터링

1. Datadog 초기 설정

개요

Datadog 에이전트를 Python 애플리케이션에 설치하고 초기 설정하는 방법입니다. ddtrace 라이브러리를 사용하여 자동으로 트레이싱을 시작할 수 있습니다.

코드 예제

# pip install ddtrace
from ddtrace import tracer

# Datadog 설정
tracer.configure(
    hostname='localhost',
    port=8126,
)

# 애플리케이션 실행
# ddtrace-run python app.py

설명

ddtrace 라이브러리를 설치하고 tracer를 설정하면 자동으로 애플리케이션의 성능 데이터를 수집합니다. ddtrace-run 명령어로 실행하면 별도의 코드 수정 없이 트레이싱이 시작됩니다.


2. 커스텀 스팬 추가

개요

특정 함수나 코드 블록의 성능을 측정하기 위해 커스텀 스팬을 추가하는 방법입니다. 중요한 비즈니스 로직의 실행 시간을 추적할 수 있습니다.

코드 예제

from ddtrace import tracer

@tracer.wrap(service='my-service')
def process_data(data):
    # 데이터 처리 로직
    result = data * 2
    return result

# 또는 컨텍스트 매니저 사용
with tracer.trace('custom.operation'):
    result = process_data(100)

설명

@tracer.wrap 데코레이터나 tracer.trace() 컨텍스트 매니저를 사용하여 특정 함수의 실행 시간을 측정할 수 있습니다. Datadog 대시보드에서 해당 스팬의 성능을 확인할 수 있습니다.


3. 로그 통합 설정

개요

Python 표준 logging 모듈과 Datadog을 통합하여 로그를 자동으로 수집하는 방법입니다. 트레이스 ID와 로그를 연결하여 더 효과적인 디버깅이 가능합니다.

코드 예제

import logging
from ddtrace import tracer

logging.basicConfig(
    format='%(asctime)s [dd.trace_id=%(dd.trace_id)s] %(message)s'
)
logger = logging.getLogger(__name__)

def my_function():
    span = tracer.current_span()
    logger.info('Processing started', extra={'dd.trace_id': span.trace_id})

설명

로그 포맷에 트레이스 ID를 추가하면 Datadog에서 로그와 트레이스를 자동으로 연결합니다. 에러 발생 시 해당 요청의 전체 플로우를 추적할 수 있어 문제 해결이 빠릅니다.


4. 커스텀 메트릭 전송

개요

애플리케이션의 비즈니스 메트릭을 Datadog으로 전송하는 방법입니다. 사용자 수, 주문 수 등 중요한 지표를 실시간으로 모니터링할 수 있습니다.

코드 예제

from datadog import initialize, statsd

initialize(statsd_host='localhost', statsd_port=8125)

# 카운터 증가
statsd.increment('user.signup')

# 게이지 설정
statsd.gauge('database.connections', 45)

# 타이밍 측정
statsd.timing('api.response_time', 234)

설명

statsd 클라이언트를 사용하여 increment(카운터), gauge(현재 값), timing(시간 측정) 등의 메트릭을 전송할 수 있습니다. Datadog 대시보드에서 실시간으로 메트릭을 시각화할 수 있습니다.


5. 에러 추적 설정

개요

애플리케이션에서 발생하는 예외와 에러를 자동으로 Datadog에 기록하는 방법입니다. 에러 발생 시 스택 트레이스와 함께 상세 정보를 확인할 수 있습니다.

코드 예제

from ddtrace import tracer

def process_order(order_id):
    span = tracer.current_span()
    try:
        # 주문 처리 로직
        result = 10 / 0  # 의도적 에러
    except Exception as e:
        span.set_tag('error', True)
        span.set_tag('error.msg', str(e))
        raise

설명

예외 발생 시 스팬에 에러 태그를 추가하면 Datadog APM에서 에러를 추적할 수 있습니다. 에러율, 에러 타입, 스택 트레이스를 한눈에 확인하여 빠르게 문제를 해결할 수 있습니다.


6. 데이터베이스 쿼리 모니터링

개요

SQLAlchemy나 다른 ORM을 사용하는 데이터베이스 쿼리를 자동으로 추적하는 방법입니다. 느린 쿼리를 쉽게 찾아낼 수 있습니다.

코드 예제

from ddtrace import patch_all
from sqlalchemy import create_engine

# 자동 패치 활성화
patch_all()

# 데이터베이스 연결
engine = create_engine('postgresql://user:pass@localhost/db')

# 쿼리 실행 (자동으로 트레이싱됨)
with engine.connect() as conn:
    result = conn.execute('SELECT * FROM users')

설명

patch_all() 함수를 호출하면 SQLAlchemy, Redis, HTTP 라이브러리 등이 자동으로 계측됩니다. 각 쿼리의 실행 시간과 쿼리 내용을 Datadog에서 확인할 수 있습니다.


7. HTTP 요청 추적

개요

외부 API 호출을 추적하여 외부 서비스의 응답 시간과 에러를 모니터링하는 방법입니다. 서비스 간 의존성 문제를 빠르게 파악할 수 있습니다.

코드 예제

from ddtrace import patch
import requests

# requests 라이브러리 패치
patch(requests=True)

# HTTP 요청 (자동으로 트레이싱됨)
response = requests.get('https://api.example.com/data')

# 커스텀 태그 추가
from ddtrace import tracer
tracer.current_span().set_tag('api.endpoint', 'data')

설명

requests 라이브러리를 패치하면 모든 HTTP 요청이 자동으로 추적됩니다. 외부 API의 응답 시간, 상태 코드, 에러를 모니터링하여 외부 서비스 장애를 신속하게 감지할 수 있습니다.


8. 태그 활용한 필터링

개요

스팬에 커스텀 태그를 추가하여 Datadog에서 트레이스를 쉽게 필터링하고 검색하는 방법입니다. 사용자 ID, 환경 등으로 데이터를 분류할 수 있습니다.

코드 예제

from ddtrace import tracer

def process_user_request(user_id, env):
    span = tracer.current_span()

    # 커스텀 태그 추가
    span.set_tag('user.id', user_id)
    span.set_tag('env', env)
    span.set_tag('feature.flag', 'new_ui')

    # 비즈니스 로직
    return f'Processing for user {user_id}'

설명

set_tag() 메서드로 추가한 태그는 Datadog에서 필터와 검색에 사용됩니다. 특정 사용자의 요청만 필터링하거나, 환경별로 성능을 비교할 수 있어 트러블슈팅이 효율적입니다.


9. 프로파일링 활성화

개요

Continuous Profiler를 활성화하여 CPU, 메모리 사용량을 코드 라인 단위로 분석하는 방법입니다. 성능 병목 지점을 정확히 찾아낼 수 있습니다.

코드 예제

import ddtrace.profiling.auto

# 환경 변수로도 설정 가능
# export DD_PROFILING_ENABLED=true

def cpu_intensive_task():
    result = 0
    for i in range(1000000):
        result += i * i
    return result

cpu_intensive_task()

설명

ddtrace.profiling.auto를 임포트하면 프로파일링이 자동으로 시작됩니다. Datadog 프로파일러에서 어떤 함수가 CPU를 많이 사용하는지, 메모리 누수가 있는지 확인할 수 있습니다.


10. 알림 설정을 위한 모니터링

개요

중요한 메트릭에 대한 알림을 설정하기 위해 필요한 데이터를 수집하는 방법입니다. 에러율이나 응답 시간이 임계값을 초과하면 알림을 받을 수 있습니다.

코드 예제

from datadog import statsd
import time

def monitor_api_health():
    start = time.time()
    try:
        # API 호출
        response = external_api_call()
        statsd.increment('api.success')
    except Exception as e:
        statsd.increment('api.error')
        raise
    finally:
        duration = time.time() - start
        statsd.timing('api.duration', duration * 1000)

설명

성공/실패 카운터와 응답 시간 메트릭을 전송하면 Datadog에서 이를 기반으로 알림을 설정할 수 있습니다. 에러율이 5%를 초과하거나 응답 시간이 1초를 초과하면 팀에 즉시 알림이 전송됩니다. --- 이 카드 뉴스는 초급 개발자가 Datadog을 사용하여 애플리케이션을 모니터링하고 트러블슈팅하는 방법을 단계별로 학습할 수 있도록 구성했습니다. 각 카드는 실제 작동하는 코드 예제와 함께 명확한 설명을 제공합니다.


마치며

이번 글에서는 Datadog 트러블슈팅 완벽 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Datadog #APM #Monitoring #Logging #Metrics

#Datadog#APM#Monitoring#Logging#Metrics#Python

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.