k8s 및 인프라/prometheus

prometheus operator

DanielZZI 2024. 3. 16. 05:38
728x90

https://prometheus-operator.dev/docs/operator/high-availability/

 

High Availability

High Availability is a must for the monitoring infrastructure.

prometheus-operator.dev

 

HA

prometheus는 기본적으로 고가용성을 제공하지않는다. 고가용성을 이루기위해서는 thanos를 함께 사용해야한다.

 

prometheus instance를 여러개 (kubernetis에서는 replica)로 구성시 각 prometheus는 독립적으로 metric을 수집하고 독립적으로 alert 룰을 평가한다.

 

이때 각 pod(instance)별로 수집시간이 조금씩 다를수있으며 완전히 동일한 metric을 보장하지않는다.

그래서 엄격한 대시보딩을 위해서는 k8s 서비스의 stickysession설정을 통해 동일한 metric을 보장받아야한다.

 

sharding

여러 프로메테우스인스탄스를 이용하면 SoF를 피할수있으나 단일 프로메테우스 인스탄스가 처리할 타겟과 룰이 너무 많다면, 단순히 instance를 늘리는것은 도움이 되지않는다.

여기서 prometheus의 샤딩기능을 활용할수있다. 샤딩은 scape대상을 여러 그룹으로 나누어 보관하게 해준다.

실제로 shard가 2일경우 shar pod이 2개가 구동되고, proemetheus pod에서 분배해준다.

 

가능하다면, functional sharding이 권장된다.

이경우 prometheus 샤드 X는 서비스 A,B,C의 모든 pod의 metric을 수집하고,

샤드 Y는 서비스 D,E의 모든 pod의 메트릭을 수집하게된다.

 

functional샤딩이 불가능할 경우, prometheus operator는 automatic sharding을 지원할 수 있다.

그러나 구조의 복잡성으로 인해 권장되진않는다. (향후 로드맵을 통해 발전여지가 있는듯)

 

 

Data보관주기/사이즈 설정

prometheus에서 수집되는 metric의 보관주기/사이즈설정은 configuration이 아닌 구동시점의 parameter설정을 통해 설정할수있다. helm chart에서도 설정가능

 

 

-storage.tsdb.path: TSDB의 경로. 기본값은 /data이다.

-storage.tsdb.retention.time: 데이터 보관기간, 기본값은 15d

-storage.tsdb.retention.size: 유지할 스토리지 블록의 최대 바이트수. 오래된 데이터부터 제거. 기본 0 또는 disable