Metric 및 관측 가능성
시스템의 안정성과 성능을 유지하기 위해, 우리는 시스템을 모니터링하고 관측할 수 있는 다양한 메트릭을 설정하고 관리해야 합니다.
이러한 메트릭은 시스템의 상태를 정확하게 파악하고, 장애를 사전에 예측하며, 이를 통해 효과적인 대응을 가능하게 합니다.
이번 글에서는 메트릭의 주요 유형과 이를 어떻게 활용할 수 있는지, 그리고 시스템 관측 가능성을 높이는 방법에 대해 다뤄보겠습니다.
1) 가용성 (Availability)
가용성은 시스템의 전반적인 상태와 정상 작동 여부를 거시적 관점에서 측정하고, 이를 SLI(Service Level Indicator)로 정량화하는 개념이다.
SLI는 서비스 수준 목표인 SLO(Service Level Objective)를 달성해야 하며, 이는 SLA(Service Level Agreement)에 명시된 기준보다 더 보수적인 수치일 수 있다.
SLO는 사업적으로 합의된 수준에 따라 설정되고, SLA를 위반할 위험을 미리 예측하고 경고를 제공하는 것이 핵심이다.
이를 통해 장애 발생을 방지하고 시스템이 예상 범위 내에서 작동하도록 보장한다.
2) 구글의 골든 시그널
구글의 골든 시그널은 시스템의 건강 상태를 평가하기 위해 네 가지 주요 메트릭을 사용한다.
- 지연 (Latency): 시스템이 응답을 느리게 하여 장애 발생 가능성을 예측하는 신호. 지연을 모니터링하면 장애 발생 전의 징후를 미리 알 수 있다. 예를 들어, Prometheus에서는 PromQL을 사용해 지연을 측정할 수 있다.
- 에러 (Errors): 물리적 에러와 논리적 에러를 구분해야 하며, 이를 정확히 판단할 기준을 설정해야 한다.
- 트래픽 (Traffic): 시스템에 발생하는 요청의 양으로, 요청 수나 네트워크 입출력 등으로 정의된다. 트래픽을 모니터링하면 시스템의 처리 능력을 이해할 수 있다.
- 포화 (Saturation): 시스템이 얼마나 사용되고 있는지를 나타내며, 이는 시스템 리소스가 얼마나 활용되고 있는지에 대한 비율을 통해 평가된다.
3) 메트릭 유형
메트릭은 시스템 상태를 다양한 방식으로 측정할 수 있는 도구이다.
주요 유형은 다음과 같다:
- Counter (카운터): 이벤트의 누적 개수나 크기를 표현하며, rate 함수와 함께 사용하여 초당 처리 수 등을 추적한다. 카운터는 증가만 가능하고 감소할 수 없다.
- Gauge (게이지): 증가나 감소가 가능한 값으로, 데이터베이스 연결 수, 사용 중인 스레드 수, CPU 사용률 등을 나타낸다.
- Summary (요약): 이벤트의 합계와 카운트를 함께 제공하여, 정확한 백분위수를 필요로 할 때 유용하다.
- Histogram (히스토그램): 데이터가 어떻게 분포되는지를 나타내며, 예를 들어, 요청 처리 시간의 분포를 시각적으로 표현할 때 사용된다.
4) 시계열 데이터
시계열 데이터는 시간 또는 주기에 따라 발생하는 데이터를 의미하며, Grafana와 같은 툴에서 히스토그램을 사용해 시간에 따른 데이터를 표현할 수 있다.
Loki는 히스토그램과 유사한 차트를 통해 특정 시간 동안의 분포를 파악하고, Gantt 차트로 전환하여 시간 기반 분석을 돕는다.
시계열 데이터를 사용하면 메트릭과 로그 간의 상관 관계를 쉽게 이해할 수 있다. 이를 통해 데이터 간의 상관 관계를 분석하고, 복잡성을 줄이며 신속하게 문제를 파악할 수 있다.
5) 메트릭 관리 방안
메트릭은 단순한 모니터링을 넘어서, 오토스케일링 등 다양한 시스템 자동화와 연계된다. 따라서 기본 메트릭 외에도 커스텀 메트릭을 설정하여 쿠버네티스 오토스케일링을 구현할 수 있다.
대시보드 설계 시, 너무 많은 정보를 한 번에 제공하지 않도록 주의해야 하며, 중요한 메트릭인 응답 시간, 에러, 트래픽 등에 집중해야 한다. 또한, 태그를 사용하여 메트릭에 상황 정보를 추가하고, 메트릭 이름은 표준화된 형식(서비스 이름.메서드 이름.유형)을 따르는 것이 좋다.
결론적으로, 관측 가능성과 메트릭은 시스템의 상태를 정확히 파악하고 장애를 사전에 예측하는 데 중요한 역할을 한다. 적절한 메트릭을 설정하고 이를 기반으로 시스템의 건강을 평가하고, 사전 경고 시스템을 통해 리소스를 조정하거나 장애를 예방하는 전략이 필요하다.