Metrics 완벽 마스터

Metrics의 핵심 개념과 실전 활용법

Python중급
10시간
5개 항목
학습 진행률0 / 5 (0%)

학습 항목

1. Python
초급
Datadog|트러블슈팅|완벽|가이드
퀴즈튜토리얼
2. Python
초급
Grafana|기초부터|심화까지|완벽|가이드
퀴즈튜토리얼
3. Python
고급
Prometheus|트러블슈팅|완벽|가이드
퀴즈튜토리얼
4. TypeScript
고급
Monitoring|디자인|패턴|완벽|가이드
퀴즈튜토리얼
5. TypeScript
중급
Monitoring|테스트|전략|완벽|가이드
퀴즈튜토리얼
1 / 5

이미지 로딩 중...

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

Datadog 트러블슈팅 완벽 가이드

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


카테고리:Python
언어:Python
난이도:beginner
메인 태그:#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