호돌찌의 AI 연구소
article thumbnail

1. Opensource - Prometheus

원래 역사는 2012년 SoundCloud에서 만든 모니터링 & 알람 프로그램에서 시작했습니다. 하지만 점점 완전 독립형 오픈소스 Project로 발전하였습니다. 쿠버네티스에 종속적이지 않고, binary 혹은 docker container 형태로도 사용하고 배포 가능합니다. 쿠버네티스 생태계의 오픈소스 중에서는 사실상의 표준격이며 구조가 쿠버네티스와 궁합이 맞고, 다양한 플러그인이 오픈소스로 제공되어 연동성이 좋습니다. (작성일 기준 9일 전에 Releases가 된 것을 알 수 있습니다)

https://github.com/prometheus/prometheus

 

GitHub - prometheus/prometheus: The Prometheus monitoring system and time series database.

The Prometheus monitoring system and time series database. - GitHub - prometheus/prometheus: The Prometheus monitoring system and time series database.

github.com

 

 

2. Prometheus 특징

- 수집하는 Metric 데이터를 time stamp가 찍히면서 시계열 데이터 형태로 저장합니다.

- 데이터 분석을 위한 자체 언어 PromQL 지원합니다.

- 시계열 데이터 저장에 적합한 TimeSeries DB 지원합니다.

- 데이터 수집하는 방식이 Pull 방식입니다. 즉, 모니터링 대상의 Agent 가 Server 로 Metric을 보내는 Push 방식이 아닌, Server 가 직접 정보를 가져가는 Pull 방식입니다. 하지만 Push 방식을 위한 Push Gateway 도 지원됩니다

- 다양한 시각화 툴과의 연동 지원되며, 다양한 방식의 Alarming 지원을 합니다.

 

 

3. Prometheus 구조

아래 그림을 하나씩 살펴보며 설명드리겠습니다.

https://prometheus.io/docs/introduction/overview/

 

- Prometheus Server : 시계열 데이터를 수집하고 저장합니다. metrics 수집 주기를 설치 시 정할 수 있으며 default는 15초입니다.

 

- Service Discovery : Monitoring 대상 리스트를 조회합니다. 사용자는 쿠버네티스에 등록하고, Prometheus Server는 쿠버네티스 API Server에게 모니터링 대상을 물어보는 형태입니다.

 

- Exporter(그림 왼쪽 하단) : Prometheus 가 metrics 을 수집해갈 수 있도록 정해진 HTTP Endpoint를 제공하여 정해진 형태로 metrics를 Export 하며,Prometheus Server 가 이 Exporter 의 Endpoint로 HTTP GET Request를 보내 metrics를 Pull 하여 저장합니다. 하지만, 이런 pull 방식은 수집 주기와 네트워크 단절 등의 이유로 모든 Metrics 데이터를 수집하는 것을 보장할 수 없기 때문에 Push 방식을 위한 Pushgateway 제공합니다. 

 

- Pushgateway(그림 왼쪽 중단) : 보통 Prometheus Server 의 pull 주기(period) 보다 짧은 lifecycle 을 지닌 작업의 metrics 수집 보장을 하기 위한 장치입니다.

 

- AlertManager : PromQL을 사용해 특정 조건문을 만들고, 해당 조건문이 만족되면 정해진 방식으로 정해진 메시지를 보낼 수 있습니다. 

ex1 ) pod 개수가 100개 넘어가는데 이 부분이 5분간 지속될 때 관리자에게 Slack DM과 E-mail을 보낸다

ex2 ) 특정 서비스가 5분간 응답이 없으면 관리자에게 Slack DM과 E-mail을 보낸다

 

- Grafana : Prometheus와 항상 함께 연동되는 시각화 툴입니다. Prometheus 자체 UI 도 있고, API 제공을 하기에 직접 시각화 대시보드를 구성할 수도 있습니다. 아래에서 더 자세히 설명하겠습니다. 

 

- PromQL : Prometheus 가 저장한 데이터 중 원하는 정보만 가져오기 위한 Query Language 제공합니다. Time Series Data이며, Multi-Dimensional Data 이기 때문에 처음 보면 다소 복잡할 수 있으나 Prometheus 및 Grafana를 잘 사용하기 위해서는 어느 정도 익혀두어야 합니다. 아래 Doc를 보시면서 연습을 하실 수 있습니다.

https://prometheus.io/docs/prometheus/latest/querying/basics/

 

Querying basics | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

 

 

4. Prometheus 단점

Prometheus server가 싱글 노드로 운영되어야 하는 문제가 있습니다. 그렇기 때문에 scalability, high availability 이 보장하기 어렵습니다. 그래서 나오게 된 project가 Thanos입니다. 이 오픈소스를 활용하여 프로메테우스 클러스터 같은 것을 운영한다고 생각하면 됩니다. 

https://thanos.io/

 

Thanos

Thanos - Highly available Prometheus setup with long term storage capabilities

thanos.io

 

 

 

 

 

 

 

 

 

 

 

 

5. Grafana

정의는 아래 주소 썸네일에 적혀있듯이 The open and composable observability and data visualization platform입니다. 

https://github.com/grafana/grafana

 

GitHub - grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and tr

The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many mo...

github.com

Grafana의 역사는 2014 년 릴리즈 된 프로젝트로 처음에는 InfluxDB, Prometheus와 같은 TimeSeriesDB 전용 시각화 툴로 개발되었으나 이후 MySQL, PostgreSQL과 같은 RDB 도 지원합니다. 현재는 Grafana Labs 회사에서 관리하고 있으며, 실습을 진행할 Open Source Project 인 Grafana 외에도 상용 서비스인 Grafana Cloud, Grafana Enterprise 제품 존재합니다. 

아래 playground 페이지도 제공하여 치를 별도로 할 필요 없이 플레이그라운드 페이지를 가보면 실제 그라파나 서버로 가서 여러 Dashboard들을 구경 및 사용을 할 수 있습니다. 

https://play.grafana.org/

 

Grafana

If you're seeing this Grafana has failed to load its application files 1. This could be caused by your reverse proxy settings. 2. If you host grafana under subpath make sure your grafana.ini root_url setting includes subpath. If not using a reverse proxy m

play.grafana.org

마찬가지로 쿠버네티스에 종속적이지는 않고 docker로 쉽게 설치할 수는 있지만, 여러 Datasource 와의 연동성이 뛰어나고 특히 Prometheus 와의 연동이 뛰어나 함께 발전하는 것이 Grafana입니다. 

 

6. Grafana의 다양한 외부 Plugins & Dashboard

- Plugins

https://grafana.com/grafana/plugins/

 

Grafana Plugins - extend and customize your Grafana

Build your own Plugins platform Don’t see what you’re looking for? The Plugins Platform makes it easy for all Grafana users to build high-quality plugins. Designed for everyone from power users who have been using Grafana for years to people who are ju

grafana.com

- Dashboard

https://grafana.com/grafana/dashboards/

 

Dashboards

 

grafana.com

 

7. Grafana Dashboard 모범사례

수많은 metric 중 모니터링해야 할 대상을 정하고 어떤 방식으로 시각화할 것인지에 대한 정답은 Task마다 달라지는 요구사항 때문에 없다고 할 수 있습니다. 하지만 Google에서 전통 SW 모니터링을 위한 4가지 황금 지표라는 것이 있습니다.

 

- Latency : 사용자가 요청 후 응답을 받기까지 걸리는 시간

- Traffic : 시스템이 처리해야 하는 총 부하

- Errors : 사용자의 요청 중 실패한 비율

- Saturation : 시스템의 포화 상태

ML 기반의 서비스를 모니터링할 때에도 위의 4가지 지표를 염두하고 Dashboard를 구성하는 것을 권장합니다. 처음 base로는 다양한 오픈소스 Dashboard 중 하나를 import 하는 것부터 시작하는 것을 권장합니다. 

 

 

 

다음 글에서는 미니큐브에 쿠버네티스 클러스터에 Prometheus, Grafana를 설치하고 사용해보도록 하겠습니다. 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!