지금 유지보수 중인 시스템 중에서 .Net Framework로 개발한 것이 있는데, 이 시스템이 가끔 불안정한 모습을 보였다.
시스템에 특정 문제가 발생하면 나를 포함은 유지보수 담당자에게 SMS로 전송되고, 그 문자를 받은 사람은 바로 접속하여 확인을 하는 방식으로 진행하고 있었다.
그러나 우리는 SMS로 문자를 받는 것 보다 더 빠르게 실시간으로 확인을 하고 싶었고 특정 문제 뿐만 아니라 CPU 점율과 시스템이 받고 있는 실시간 패킷정보 등을 알고 싶었다.
팀장님께서 내게 프로메테우스 라는 것이 있고 이것을 통해 시스템 메트릭을 수집할 수 있는 것 같으니 프로메테우스가 정확인 어떤 아이이며 어떻게 동작하는 것인지, 우리가 원하는 메트릭 정보를 커스텀하여 수집 할 수 있는 것인지 알아보라고 하셨다.
새로운 어떤 기능을 내가 알아보다니.. 조금 두렵고 떨렸다. 제대로 알아볼 수 있을까.
하지만 이런마음을 가진다면 나는 발전할 수 없다.
왜냐?? 새롭고 더 좋은 기술들이 나오는데 이런것들을 내가 스스로 찾아서 습득해야한다. 그러기 위해서는 이런 두려움을 이겨내자!!
==> 결과. 재밌다!! 내가 해당 시스템에 내가 원하는 특정 메트릭 정보를 커스텀하여 수집 프로메테우스가 수집하게 했다!!
프로메테우스(prometheus) 란?
- 프로메테우스는 메트릭 기반의 오픈소스 모니터링 시스템이다.
- 이벤트 모니터링 및 경고에 사용되는 무료 소프트웨어 응용 프로그램이다.
- PromQL 및 실시간 경고가 가능하다.
- Go 언어로 작성되었다. 아파치2 라이선스를 사용한다.
메트릭(Metric)이란?
수집하는 시계열 데이터를 일컫는 말이다. 프로메테우스의 메트릭은 아래와 같이 수집된다.
메트릭명{필드1=값, 필드2=값} 샘플링데이터
- 프로메테우스의 메트릭
https://prometheus.io/docs/concepts/data_model/
기능 및 구성
- 메트릭 수집, 시계열 데이터 저장
- PromQL을 활용하여 저장된 시계열 데이터에 대한 집계 -> 성능분석 가능
- 그라파나를 이용한 데이터 시각화
- alertmanager를 통한 알림
그라파나(Grafana)
데이터를 시각화하여 분석 및 모니터링을 용이하게 해주는 오픈소스 플랫폼이다. 여러 데이터 소스를 연동하여 사용할 수 있으며 시각화된 데이터들을 대시보드로 만들 수 있다.
아키텍처
프로메테우스가 메트릭을 수집하는 방식은 push가 아닌 pull방식이다.
즉, 프로메테우스 메인 서버(Prometheus server)에서 주기적으로 클라이언트에 접속해서 메트릭을 가져오는 방식이다.
- Service Discovery :
DNS나 Hashicorp사의 Consul또는 쿠버네티스를 통해서, 모니터링해야 할 타겟 서비스 목록을 가지고 있다. - Pushgateway :
Proxy Forwarding을 해서 접근할 수 없는 곳에 데이터가 존재하는 경우에 사용할 수 있는 대안이다.
애플리테이션이 Pushgateway에 메트릭을 push한 후, Prometheus server가 Pushgateway에 접근하여 메트릭을 pulling한다. - Exporter :
모니터링 에이전트로 타셋 시스템에서 메트릭을 읽어서, 프로메테우스가 pulling을 할 수 있도록 한다.
또한 단순한 HTTP GET으로 메트릭을 텍스트 형태로 프로메테우스에게 리턴한다. 요청 당시 데이터를 리턴하는 것 뿐, 저장하지는 않는다. - Prometheus server :
프로메테우스의 메인 서버로 메트릭 데이터를 수집하고 저장한다. Prometheus server 내부에는 Retrieval, TSDB, HTTP server 모듈이 있다. - Retrieval :
Service Discovery로 부터 모니터링 대상 목록을 받아오고, Exporter로 부터 주기적으로 메트릭을 수집하는 모듈이다. - TSDB(Time-series Database) :
수집된 메트릭은 Prometheus server 내의 메모리와 (default)로컬 디스크에 저장된다. (필요에 따라 원격 서버에 데이터를 저장할 수 있다.)
데이터베이스에 별도로 저장하지 않기 때문에 대상 시스템이 늘어날 수 록 디스크를 늘려야한다. - HTTP Server :
프로메테우스에 저장된 데이터를 조회하기 위해서 필요한 서버이다. 프로메테우스는 데이터를 가져가기 위한 프로토콜로 HTTP REST API를 제공하고, 직접 API를 통해 데이터를 가져가던지, Web UI 대시보드에서 데이터를 조회하던지해서 그라파나를 통해 데이터를 시각화 할 수 있다. - Alertmanager :
프로메테우스에서 문제가 발생했다고 생각되는 시점에 slack, mail, hipchat등을 통해 알람을 보내준다.
알람을 거는 기준은 Rule을 작성해서 load시키는 방식으로 정할 수 있다.
(ex. expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 )와 같이 특정 메트릭의 값이 어느정도 선(threshold)를 넘거나, 낮아지는 것을 판단할 수 있다.
저장된 메트리 정보는 PromQL 쿼리 언어를 이용해서 조회 가능하고, 이를 외부 API나 프로메테우스 웹 콘솔 또는 웹에서 대쉬보드를 통해 조회가 가능하다.
장/단점
장점
- 모든 메트릭에 대한 데이터를 중앙서버로 보내지 않아도 된다. (부하가 높은 상황에서 메트릭을 수집하기 위해 전송한다면, 부하와 더불어 실제 어플리케이션에 문제를 유발할 수 있다.)
- 모든 데이터를 수집하지 않고, 일정 주기(default 15s)로 발생하는 메트릭을 수집하기 때문에 어플리케이션에 무리가 없다.
- 구조가 복잡하지 않고 간단하기 때문에 특정 솔루션에 대한 export가 어렵지 않다.
- Linux, Window 등의 다양한 OS 메트릭 expoter를 제공한다.
단점
- 클러스터링(Clustering)이 안된다. 프로메테우스를 여러대에 구성하려면 Hierarchy구조를 만들어서 사용해야한다.
- 모든 메트릭을 수집하지 않기 때문에 사실상 "추리"를 보는데에는 좋지만 APM(Application Performance Monitoring)과 같이 모든 로그를 추적하기에는 적합하지 않다. polling하는 그 순간의 스냅샷 정보만 알수 있다.
- 싱글 호스트 아키텍처이기 때문에 저장용량이 부족하면 디스트 용량을 늘리는 방법 뿐이다.
- Prometheuse server가 다운도거나, 설정 변경 등의 위해서 재시작할 경우 그동안의 메트릭은 유실된다.
프로메테우스(prometheus) 사용법
- 프로메테우스 설치
2021.07.17 - [IT story] - 프로메테우스(Prometheus) 설치 및 사용
- 프로메테우스 설정
2021.07.17 - [IT story] - 프로메테우스(Prometheus) Configuration
https://prometheus.io/docs/introduction/overview/
'기술 > Prometheus' 카테고리의 다른 글
프로메테우스(Prometheus) Exporter - 모니터링 에이전트 (0) | 2021.07.17 |
---|---|
프로메테우스(Prometheus) 설치 및 사용 (0) | 2021.07.17 |
프로메테우스(Prometheus) Configuration (0) | 2021.07.17 |