DevOps/Prometheus & Grapana

Prometheus & Grafana란?

치킨맛코드 2022. 9. 27. 18:30

 

프로메테우스! 그리스 로마 신화에서 나타나는 신(god)들 중 한명이다. 희대의 카사노바 제우스가 인류가 구운고기를 먹는것을 아니꼽게 생각해 인류에게서 불을 뺏은적이 있었다. 이때 프로메테우스는 그것을 가엽게 여겨 불을 몰래 인간에게 다시 돌려주었다. 하지만 완전범죄란 없는법. 안타깝게도 이런 행위를 들켜버린 그는 영원히 독수리에게 간을 파먹히는 형벌을 받았다고 전해진다.

 

하여튼 제우스 참 찌질하다.

 

아무튼 이런 이야기를 모티브로 삼은건지 는 잘 모르지만, 모니터링을 하는데 있어서 이런 불과 같이 정말 소중한 도구가 있다. 항상 Grafana라는 툴과 함께 다니는 prometheus(프로메테우스)라는 오픈소스 모니터링 시스템이 바로 그것이다.

 

프로메테우스는 2016년  k8s의 CNCF프로젝트에 포함되었으며 지표(metric)을 수집하며, 시간별로 변화하는 데이터(time-series data)를 저장하고 수집하는 역할을 한다. 로컬이나 AWS S3와 같은 스토리지에 자체적으로 데이터를 저장하는 방식을 사용하고 있으며, 보통 pull방식의 메트릭 수집을 하지만 gateway라는 별도의 방식을 통해 push방식을 지원한다.

 

아래의 그림은 전반적인 흐름도이다. 조금 어려울 수 있지만 천천히 읽어 보도록 하자. 

1) 기본적으로 프로메테우스 서버는 TSDB(시계열 데이터베이스)를 자체적으로 소유하고 있다. 또한 data 자체는 서버에 있는 node 혹은 ssd에 직접 저장한다.

 

2-1) prometheus가 metric을 수집하는 방법은 push와 pull 2가지가 있다. 기본적으로는 Service discovery방식을 통해서 metric을 수집할 대상을 찾은 후 pull방식으로 수집하게 된다.

 

2-2) 하지만 스팟 인스턴트와 같이 빠르게 만들어지고 사라지는 job이나, 외부에 있어서 일일히 방화벽을 오픈할 수 없는 job들은 prometheus가 찾기도 힘들고, 계속 사라지기에 이것을 gateway에 메트릭을 push하게 한다. 이 후 prometheus가 gateway에 metric을 pull하여 사용한다.

 

수집할 수 있는 metric의 종류는 Counter(항상 증가하는 값) Gauge(증가, 감소할 수 있는 값), Histogram(샘플링 관찰을 위한-사전에 지정된 값), Summary(분위수(ex).4분위 라고 한다면 4등분)를 지원해주는 값 샘플링 관찰 값)으로 총 4가지가 있다.

 

3) 이렇게 수집된 metric은 관리자가 prometheus의 자체적인 web ui 를 사용해서 활용하기도 하지만, 대부분의 관리자는 Grapana라는 오픈소스 툴을 사용해 모니터링 한다.

 

4) 수집된 metric은 사용자가 지정한 수치를 넘어서게 된다면(ex. cpu사용량 80% 초과) 알람 메니저를 활용해 사용자가 지정한 방식으로(email, sns etc) 사용자에게 알람을 보내게 된다.