Metric

Metric는 시스템의 상태와 성능을 수치화하여 측정하는 중요한 관측 도구이다.

Metric는 시스템의 상태, 동작, 성능 등을 나타내는 수치화된 측정값이다.
예를 들어, 웹 서버의 응답 시간, CPU 사용률, 메모리 사용량 등이 Metric가 될 수 있다.

장점

  1. 효율적인 저장: 숫자 데이터는 저장 공간을 적게 차지한다.
  2. 빠른 쿼리: 시계열 데이터베이스를 사용하여 빠른 검색과 분석이 가능하다.
  3. 장기 추세 분석: 오랜 기간 동안의 데이터를 저장하고 분석할 수 있다.
  4. 시각화 용이성: 그래프나 대시보드로 쉽게 표현할 수 있다.

단점

  • 초기 설정에 시간과 노력이 필요하다
  • 너무 많은 Metric는 오히려 혼란을 줄 수 있다
  • 저장 공간과 처리 리소스가 필요하다

Metric의 중요성

  1. 성능 모니터링: 시스템의 전반적인 성능을 지속적으로 모니터링할 수 있다.
  2. 문제 감지: 비정상적인 패턴이나 임계값 초과를 빠르게 감지할 수 있다.
  3. 용량 계획: 리소스 사용량 추세를 분석하여 미래의 용량을 계획할 수 있다.
  4. 최적화: 성능 병목 현상을 식별하고 최적화할 수 있는 기회를 제공한다.

Metric의 구성 요소

일반적인 Metric는 다음 요소로 구성된다:

  1. 측정값: 실제 수치 데이터
  2. 타임스탬프: 측정된 시간
  3. 메타데이터: 측정값을 설명하는 추가 정보 (예: 서버 이름, 리전 등)

Metric 수집 및 관리 시 주의사항

  1. 적절한 메트릭 선택: 비즈니스와 시스템에 중요한 메트릭을 신중히 선택해야 한다.
  2. 데이터 과부하 방지: 너무 많은 메트릭을 수집하면 관리와 분석이 어려워질 수 있다.
  3. 정확한 메타데이터: 메트릭의 의미를 정확히 이해할 수 있도록 충분한 메타데이터를 제공해야 한다.
  4. 적절한 집계 간격: 너무 짧거나 긴 집계 간격은 데이터의 유용성을 떨어뜨릴 수 있다.

Metric의 주요 유형

  1. 카운터(Counter): 계속해서 증가하는 값을 측정한:

    1
    2
    
    # 요청 수를 카운트하는 메트릭 예시
    requests_total.inc()  # 요청이 들어올 때마다 1씩 증가
    

    예를 들어, 총 HTTP 요청 수나 오류 발생 횟수 등을 측정할 때 사용된다.

  2. 게이지(Gauge): 시간에 따라 증감할 수 있는 값을 측정한다:

    1
    2
    
    # 현재 활성 사용자 수를 측정하는 메트릭 예시
    active_users.set(current_users_count)
    

    현재 메모리 사용량이나 현재 접속자 수와 같이 순간적인 값을 측정할 때 사용된다.

  3. 히스토그램(Histogram): 값의 분포를 측정한다:

    1
    2
    
    # 응답 시간을 측정하는 히스토그램 예시
    request_duration_seconds.observe(response_time)
    

    특정 작업의 소요 시간이나 요청의 크기 분포 등을 분석할 때 유용하다.

Metric의 종류

  1. 시스템 메트릭: CPU 사용률, 메모리 사용량 등 인프라 관련 지표
  2. 애플리케이션 메트릭: 응답 시간, 처리량 등 애플리케이션 성능 관련 지표
  3. 비즈니스 메트릭: 활성 사용자 수, 거래량 등 비즈니스 관련 지표

Metric를 수집하고 활용하는 방법

  • Prometheus와 같은 모니터링 시스템을 사용하여 Metric를 수집할 수 있다.

    1
    2
    3
    4
    5
    6
    7
    
    # Prometheus 설정 예시
    scrape_configs:
      - job_name: 'web-service'
        static_configs:
          - targets: ['localhost:8080']
        Metric_path: '/Metric'
        scrape_interval: 15s
    
  • 수집된 Metric는 다양한 목적으로 활용될 수 있다:

    1. 시스템 상태 모니터링: CPU 사용률, 메모리 사용량 등을 실시간으로 추적
    2. 성능 분석: 응답 시간, 처리량 등을 측정하여 시스템 성능 평가
    3. 용량 계획: 리소스 사용 추세를 분석하여 미래 필요 용량 예측
    4. 알림 설정: 특정 임계값을 초과할 때 알림 생성
    5. 비즈니스 지표 추적: 사용자 활동, 매출 등 비즈니스 관련 지표 모니터링

효과적으로 설계하고 구현하기 위한 모범 사례

  1. 의미 있는 이름 지정이 중요하다:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # 좋은 예시
    http_requests_total
    memory_usage_bytes
    database_connections_active
    
    # 나쁜 예시
    requests
    memory
    connections
    
  2. 레이블을 사용하여 Metric를 세분화할 수 있다:

    1
    2
    3
    4
    5
    6
    
    # 레이블을 사용한 메트릭 예시
    http_requests_total.labels(
        method='GET',
        endpoint='/api/users',
        status='200'
    ).inc()
    
  3. Metric를 통한 알림 설정도 가능하다:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # Prometheus 알림 규칙 예시
    alert: HighErrorRate
    expr: rate(http_errors_total[5m]) > 0.1
    for: 10m
    labels:
        severity: critical
    annotations:
        summary: "High error rate detected"
    

참고 및 출처