DevOps/Prometheus

Prometheus, 프로메테우스 기본 개념

게임이 더 좋아 2022. 10. 2. 19:58
반응형
728x170

 

 

우선 데이터에 대해서 설명하겠다.

프로메테우스가 수집하는 데이터는 시계열 데이터다. 

그래서 시간 간격에 따라 데이터가 같이 저장된다.

이런 식으로 저장된다.

(timestamp, value)

 

즉, 시간과 같이 저장되는 데이터다.

그 시간, Timestamp는 밀리세컨드 단위를 가지고 있다.(64-bit 일 때 가능)

그런 시계열 데이터는 또 이름을 가지고 있다.

예를 들자면

  • node_cpu_seconds_total —> the total number of CPU seconds used
  • node_filesystem_free_bytes —> free space on filesystem mount point
  • go_memstats_sys_bytes —> the amount of memory used by Go app

 

오.. node가 cpu를 얼마동안 썼는지도 나오는구나..?라고 느껴지면 됐다.

또한 이 시계열 데이터에는 레이블, label도 추가시킬 수가 있는데 대개 임의의 숫자가 추가된다.

이런 식으로 추가된다. 

label=”value”

예를 들면 이렇다.

 

  • go_memstats_sys_bytes{instance=”foobar:1234",job=”node_exporter”}
  • prometheus_http_requests_total{handler=”/api/v1/query_range”}

 

이런 레이블로 사실 특정지을 수도 있다. 

즉, 데이터를 레이블로 구분할 수도 있다는 말이다.

예를 들면 이런 식이다.

  • temperature
  • temperature{city=”NY”}
  • temperature{city=”SF”}
  • temperature{city=”SF”, unit=”Celsius”}

 

이러한 시계열 데이터들을 영어로 부르는 이름이 있다.

Data Point 또는 Sample이라고 부른다. 

이러한 용어가 나오면 데이터인 것을 알아차려야 한다. 그래야.. 프로메테우스를 잘 사용할 수 있다.

 


 

 

프로메테우스가 지원하는 Metric Type 들은 여러가지가 있다.

 

1. Gauge - 시간에 따라 수치가 높아지거나 낮아지는 변화량을 말한다. 예를 들면 온도나 메모리 사용량을 뜻한다.

2. Counter -  0부터 시작해서 계속 세어나가는 것을 뜻한다. 예를 들면 하루동안 Request 의 양이라든지 그런 것이다.

**다만 이 Counter는 예외적으로 서비스가 다시 시작되면 0부터 다시 세어나간다.

3. Summary -  영어로는 maintains a set of pre-configured percentiles for the value.라고 하는데

여기서 percentile이란 단어가 처음 들어봤을 수 있다. 해석은 백분위수라고 표현되지만 우리가 생각하는 그런 뜻은 아니다.

사전적 의미는 자료를 순서대로 나열했을 때 백분율로 나타낸 특정 위치의 값이라는 뜻이고

더 정확하게 설명하자면 백분위수란 정보들이 어떻게 퍼져있는지 인사이트를 주는 것이다.

예를 들어 100개의 데이터가 있고 k번째 백분위수라고 한다면. 

그 k 는 100개 중 k번째로 작은 값을 뜻한다.

k 보다 작은 것들이 1 ~ k-1개 있다고 봐도 된다.

 

??? 백분위랑 백분위수랑 별로 다른 것이 없는데???

조금 다르긴 하다.

예를 들어 시험점수를 80점이다.

그 시험 80점이 백분위수 90이다?

그렇다면 90번째로 작은 값이 80점 이란 것이다.

다시 말하면 시험점수 90점에 대한 백분위는 80이다.

 

실무에서 사용한다면

데이터 10000개 에서

0.1% 미만의 실패율을 얻어야 한다.

10 백분위수에 대해 생각해보자.

역으로 정렬했다면 

10 백분위수라면..? 10번째로 큰 값이다.

10번 째로 큰 응답시간이 1초 이하라면..?

나머지는 다 1초 이하란 말과 같다.

 

설명이 길어졌는데 그냥 추세라고 생각하면 된다.

 

4. Histogram -  여러가지 counter 들을 모아서 그래프를 만든다.

heatmap같이 생겼네? 

 

 


 

Prometheus가 시계열 데이터를 저장하는 방법은 어떨까???

 

기본적으로는 Local Storage에 저장하지만 Remote Storage도 이용한다.

 

일반적으로는 Prometheus는 샘플들을 2시간 단위로 그룹화한다.

즉, 2시간 단위로 모든 시계열 데이터, 청크 하위 디렉토리, 메타 데이터, 인덱스 파일 등을 모아서 저장하게 된다.

**  기본적으로는 최대 512MB의 세그먼트 파일로 그룹화된다.

 

로컬 저장소의 문제점이 몇가지 있다.

클러스터링이나 복제되지 않는다.

다시 말해서 드라이브 또는 노드 중단이 되었을 때 강인성도 떨어지고 스케일을 확장하기도 어렵다.

다시 말해서 싱글 데이터베이스랑 같다고 보면 된다.

물론 RAID를 통해서 저장소 가용성을 확보할 수 있고 Snapshot을 통해서 관리를 하는 것이 좋다.

하지만 여기서 하나 더 데이터에 일어나는 현상이 있다.

데이터를 압축하는 것이다.

=> 압축은 더 큰 블럭을 만든다.

 

2시간 짜리 블록은 결국 백그라운드에서 다시 더 긴 블록으로 압축된다.

압축은 보존 시간의 최대 10%나 31일 중 더 작은 기간에 맞추어 데이터를 압축한다.

 

프로메테우스는 엄청난 데이터를 저장하기 위해 이렇게 압축도 하고 세그먼트도 만든다.

하지만 그렇더라도 확장성과 내구성이 떨어지기 때문에 원격 저장소와 연동을하게 된다.

 

그럼으로써 얻을 수 있는 3가지가 있다.

1. 원격 으로 샘플을 저장할 수 있다.

2. 표준화된 형식이 있어 다른 프로메테우스 서버도 샘플을 이용할 수 있다.

3. 표준화된 형식이 있기 때문에 원격 URL로 샘플 데이터를 읽을 수 있다.

 

1번 장점으로 내구성을

2번과 3번으로 확장성을 확보하는 형태이다.

 


 

아래 그림은 일반적인 프로메테우스 실행 환경의 전체적인 구조다.

프로메테우스는 메트릭을 수집하는 방법도 있고

얼럿기능도 지원하며 PromQL을 통해 시각화도 제공한다.

물론 프로테메우스 자체가 지원하는 것은 아니지만 연동이 되게끔 잘 구성되어 있다.

 


 

PromQL에 대해선 따로 정리하겠다.

 

 

 


 

참고링크

https://valyala.medium.com/prometheus-storage-technical-terms-for-humans-4ab4de6c3d48

https://gurumee92.tistory.com/242

728x90
반응형
그리드형

'DevOps > Prometheus' 카테고리의 다른 글

Prometheus - Practice  (0) 2023.07.09
Exporter 연동  (0) 2023.01.13
Prometheus_  (0) 2023.01.13
프로메테우스, Prometheus Up & Running - ch.1  (0) 2022.11.07