프로메테우스 모니터링의 범주와 흐름

2024. 8. 20. 21:03Kubernetes

본 내용은 책 '프로메테우스 오픈소스 모니터링 시스템' 의 1장 내용을 정리한 것입니다.

모니터링의 범주

범주 개념 예시
프로파일링
(Profiling)
모든 시간대의 모든 이벤트의 컨텍스트를 가질수는 없지만, 제한된 기간의 일부 컨텍스트를 가질 수 있다는 방식 
  • Tcpdump
(지정된 필터를 기반으로 네트워크 필터를 기록함)
  • 리눅스 커널의 eBPF
(파일시스템부터 네트워크 기호까지 커널 이벤트에 대해 상세하게 프로파일링 가능 )

 

프로파일링의 예시 eBPF

출처: https://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html

 

범주 개념 예시
트레이싱
(Tracing)
  • 모든 이벤트를 살펴보는 것이 아니라, 관심기능을 통과하는 일부 이벤트 처럼 수백개의 이벤트 중 특정 이벤트에만 집중한다. 
  • Stack trace 에서 관심 있는 부분의 함수들을 기록하고 이러한 함수들이 얼마나 오랫동안 수행됐는지도 기록한다.
X
분산 트레이싱 트레이싱에서 한단계 더 나아가, 원격 프로시저 호출에서 한 프로세스에서 다른 프로세스로 전달되는 요청에 고유한 ID를 추가해서 해당 요청이 추적되어야 하는지 여부 등 프로세스 전반에 걸친 작업을 추적한다.
  • 오픈집킨(OpenZipkin)
  • 예거(Jaeger)
Jaeger :

출처: https://www.jaegertracing.io/docs/1.17/  

 

범주 개념 예시
로깅
(Logging)
제한된 이벤트 집합을 살펴보고 각 이벤트에 대한 컨텍스트 일부를 기록한다.
  • ELK Stack 
  • Graylog

 

출처: https://www.gimsesu.me/manage-logs-with-elastic-stack-2/ 

범주 개념  예시
메트릭 컨텍스트를 대부분 무시하고 다양한 유형의 이벤트에 대해 시간에 따른 집계를 추적한다.


Tip! 자원사용을 정상적으로 유지하려면, 추적하는 메트릭 개수를 제한해야한다. 프로세스당 1만개의 메트릭 처리정도가 합리적인 상한선이다.
  • Prometheus
    ( 수신된 HTTP 요청횟수, 요청을 처리하는데 걸린 시간, 현재 진행중인 요청 수 등을 집계)

 

프로메테우스 아키텍쳐

 

프로메테우스의 흐름 

1. 익스포터를 통해 계측 애플리케이션이나 서드파티 애플리케이션 등에서 데이터를 수집한다.

2. 수집된 데이터가 저장되면, PromQL 을 이용해 대시보드에서 활용되거나, 알람매니저를 통해 알림이 발송된다. 

3. 알림은 무선호출, 이메일 같은 통보로 발현된다. 

 

과정 개념 예시
클라이언트 라이브러리
  • 메트릭을 만들기 위한 계측 코드 모음 
CPU 사용량, 가비지컬렌션의 통계치 등
(주요 언어와 런타임에서 사용가능 )
https://prometheus.io/docs/instrumenting/clientlibs/
익스포터
  • 가져오고 싶은 메트릭 인터페이스를 프로메테우스에 게시형식으로 변환하는 프록시 
사용자 정의 수집기(Custom collectors), ConstMetrics 등
서비스 검색
  • 계측 대상 애플리케이션과 익스포터의 위치를 파악하는 행위

  • 애플리케이션이 어떤 작업을 하는지 적힌 데이터베이스
  • 쿠버네티스 상에서의 label 과 annotation 
데이터 수집
  • 수집 (Scrape) HTTP 요청으로  메트릭(서비스 검색과 레이블 재지정을 통해 추려진 대상)을 가져오는 행위
  • 수집에 대한 응답은 구문 분석 후 저장장치에 저장됨.
  • 데이터 수집 요청이 성공했는지, 얼마나 오래걸렸는지 같은 유용한 메트릭이 일부 추가됨.
  • 정기적으로 발생, 각 대상에 10~60초마다 요청을 보내도록 구성가능 
저장 장치
  • 사용자정의 데이터베이스에 로컬로 데이터를 저장함.
  • SSD
대시보드
  • 프로메테우스 서버와 통신하여 시각화된 화면
  • Grafana
기록 규칙 및 알림
  • PromQL 표현식을 정기적으로 수행하는 배치 (수천대의 머신에서 매번 메트릭을 집계하면 지연 발생 가능성이 있기때문)
 
알림 매니저
  • 프로메테우스 서버에서 알림을 받아 통보로 변환하는 개체
Tip! : 알림매니저의 역할은 통보가 전송되면 끝나므로, 장애나 사고에 대한 사람들의 반응 관리를 위해서는 페이저 듀티와 티켓발급 시스템같은 서비스를 이용해야한다.
  • 이메일, Slack 등
장기저장소
  • 보유기간을 늘리거나 원격 읽기 및 쓰기 API 원격데이터를 저장할 수 있음.
Tip!: 프로메테우스는 로컬 머신에만 데이터를 저장하기 때문에 저장되는 데이터양의 최대치는 해당 머신에 얼마나 많은 디스크 공간을 확보할 수있는지에 좌우된다.  따라서, 보유기간 확장 또는 원격 저장소에 저장하는 방법이 바람직하다.
 

프로메테우스가 적합한 경우와 아닌 경우

적합한 경우

  • 커널 스케줄링, 데이터 수집 실패같은 요소 보완하는 데 좋다.

 부적합한 경우  

  • 이벤트 로그나 개별 이벤트를 저장하는데는 적합하지 않다.
  • 이메일 주소나 사용자 이름같이 카디널리티가 높은 데이터에도 최상의 선택은 아니다.