Prometheus Puzzlers: Traps, Pitfalls, and Corner Cases by Patrycja Wegrzynowicz
- Prometheus는 겉보기와 달리 PromQL 쿼리 언어에 숨겨진 복잡성과 함정이 많아 주의가 필요합니다. 🧩
- 관측 가능성(Observability)은 현대 소프트웨어 시스템의 필수 요소이며, Prometheus는 메트릭 수집 및 저장의 핵심 도구입니다. 📊
histogram_quantile 함수는 실제 값이 아닌 버킷 내 카운트를 기반으로 선형 보간법을 사용하여 분위수를 추정하므로, 예상과 다른 결과(예: 500ms와 900ms 관측치 모두 994ms)를 반환할 수 있습니다. 📉
- 분위수가 최고 버킷(+Inf)에 해당하는 경우, Prometheus는 두 번째로 높은 실제 버킷의 상한값을 반환하여 실제 성능을 과소평가할 수 있습니다. ⚠️
- 정확한 히스토그램 분석을 위해 버킷을 분포에 맞게 신중하게 설계하고, SLO/SLA는 정확한 분위수 값 대신 요청의 백분율로 정의하는 것이 좋습니다. 🎯
increase 함수는 내부적으로 extrapolate_rate를 사용하며, 평가 간격 경계에 샘플이 가까울 경우 예상치 못한 외삽(extrapolation)이 발생하여 결과가 왜곡될 수 있습니다. 📈
- Prometheus의 메트릭은 카운터, 게이지, 히스토그램, 요약 네 가지 유형이 있으며, 각 메트릭은 고유한 이름과 레이블을 가질 수 있습니다. 🏷️
- 관측 가능성의 세 가지 핵심 요소는 메트릭, 로그, 트레이스이며, 이들은 문제 해결 및 알림 설정에 동등하게 중요합니다. 🔍
- Prometheus는 CNCF(Cloud Native Computing Foundation)의 졸업 프로젝트로, Grafana, Loki, Tempo와 함께 인기 있는 오픈소스 관측 가능성 스택을 구성합니다. ☁️
- 애플리케이션에서 OpenTelemetry SDK를 통해 데이터를 수집하고, OpenTelemetry Collector가 이를 처리하여 Prometheus와 같은 백엔드 스토리지로 전송한 후 Grafana로 시각화됩니다. 🚀