Metrics 완벽 마스터
Metrics의 핵심 개념과 실전 활용법
학습 항목
이미지 로딩 중...
Datadog 트러블슈팅 완벽 가이드
Datadog을 활용한 애플리케이션 모니터링과 트러블슈팅 방법을 초급자도 쉽게 이해할 수 있도록 설명합니다. 실제 코드 예제와 함께 Datadog APM, 로그 수집, 메트릭 모니터링 방법을 배울 수 있습니다.
들어가며
이 글에서는 Datadog 트러블슈팅 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Datadog_초기_설정
- 커스텀_스팬_추가
- 로그_통합_설정
- 커스텀_메트릭_전송
- 에러_추적_설정
- 데이터베이스_쿼리_모니터링
- HTTP_요청_추적
- 태그_활용한_필터링
- 프로파일링_활성화
- 알림_설정을_위한_모니터링
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