모니터링 시스템(Prometheus, Grafana)(1)
2018년 유지보수중이던 시스템이 기존 NT 서버에서 AWS로 모든 인프라를 옮기는 대공사를 진행하게 되었다.
인프라 전면전환 작업은 2년 가까운 시간이 되어서야 반영이 되었고, 2020년경부터 새로운 AWS인프라 위의 시스템을 유지보수하기 시작했다. 각종 문제들이 많이 생기기 시작했지만 가장 시급한 문제는 모니터링 시스템의 부재였다.
현재 내가 운영하고 있는 시스템은 실시간 대용량 트랜잭션을 처리하는 시스템으로, 장애발생시 5분 이내에 복구조치가 되도록 계약되어 있었고, 이를 위해서 모니터링 체계 구축은 필수적인 작업이었다.
많은 조사가 있었고 결국 우리는 프로메테우스와 그라파나라는 오픈소스를 사용하여 모니터링 체계를 구축하기 시작했다.
왜 프로메테우스인가?
회사생활을 하다보면, 아니 개발자로서 살아가다보면 기술을 이유없이 의미없이 가져다 쓰는 경우가 굉장히 많다. 얼마전 지인으로부터 모니터링 시스템에 관해 이야기하다 프로메테우스를 선택한 이유에 대한 질문을 받게되었다. 답변을 하기 위해 횡설수설 프로메테우스의 장점에 대해 이야기했지만, 막상 생각해보니 시스템을 구축할 당시 많은 고민을 해보고 선택하지는 않았음을 깨달았다. 물론 그 당시 나름의 이유가 있었지만 잘 기억이 안나기에 다시 한번 리마인드 하기 위해 관련 내용을 정리해보고자 한다.
Prometheus 장점
프로메테우스 Github에서 설명하고 있는 장점들은 다음과 같다.
- 다차원 데이터 모델 가능
- 다차원 데이터 모델을 활용할 수 있는 유연한 쿼리언어(PromQL)
- 분산 스토리지에서 어떠한 의존성도 없음
- 모든 데이터는 HTTP(REST) Pull 기반으로 가져온다. 물론 Push도 가능함
- 모니터링 타겟은 프로메테우스의 YAML 설정값을 통해 Discovery
많은 장점들이 있지만 결국 프로메테우스의 가장 큰 특징이자 장점은 Pull방식의 모니터링 오픈소스라는 점이다. Pull 방식이란 대상 애플리케이션의 Exporter Enpoint로부터 데이터를 scrape 해오는 방식을 말한다.
이 방식 덕분에 모니터링 설정을 Data Backend에서 효율적으로 관리할 수 있고, 혹시라도 Prometheus 장애 발생시에도 애플리케이션에 지장이 가지 않을수가 있다.
위와 같은 장점들이 결국 프로메테우스를 선택하게 된 가장 큰 이유가 되었다.물론 프로메테우스가 장점만 존재하는것은 아니다. 이제부터는 프로메테우스의 한계점에 대해 알아보고자 한다.
Prometheus 한계점
- 클러스터링 구조에 대한 미지원
프로메테우스는 좋은 모니터링 시스템이긴 하지만 결정적인 문제점들이 있다. 그 첫번째가 바로 클러스터링 구조에 대한 미지원 문제이다. 이는 확장성과 가용성에 문제를 가져오게 된다.확장성
시스템에서 모니터링 할 대상들이 많지 않다면 하나의 프로메테우스 서버로 감당이 가능하겠지만, 볼륨이 늘어난다면 버거워지기 마련이다. 이 문제를 해결하는 방법으로 Federation 이라는 방법을 사용한다. 프로메테우스 인스턴스를 여러개 기동한 다음, 중앙에 다른 프로메테우스로부터 메트릭을 수집하는 중앙 집중 프로메테우를 놓는 방식이고, 데이터 양에 대한 문제는 데이터 해상도를 줄이거나 평균, 합등의 대표값을 사용해서 해결 할 수 있다.가용성
프로메테우스는 하나의 서버로 기동되기 때문에 그 서버가 장애로 내려갈 경우, 그 시간동안은 매트릭을 수집할 수 없다는 단점을 가지고 있다. 이를 해결하기 위해서는 프로메테우스 인스턴스를 두개 이상 띄운 다음 같은 대상 시스템으로부터 매트릭을 수집하는 방식인데 이렇게 되면 해당 문제를 해결 할 수 있기는 하다.위의 아키텍쳐들은 역시 클러스터링의 대용일 뿐 제대로 되어 보이지는 않는다. 이를 해결하기 위해 오픈소스 타노스가 나왔지만 이는 나중에 다뤄보도록 한다.
- 오래 된 값 저장
프로메테우스의 다른 문제점 중 하나는 로컬 디스크를 사용하기 때문에 일정 기간이 지나 오래된 데이터는 삭제가 된다는 점이다. 그래서 오래된 데이터에 대한 조회가 불가능하다.
물론 이 문제에 대한 해결책 또한 오픈소스 타노스를 이용한다면 어느정도 해결이 되겠지만 이는 다루는 내용을 벗어나므로 다루지 않겠다.
이러한 한계점들이 존재하지만 현재 운영시스템에서는 위와 같은 한계들을 인정하고서라도 프로메테우스의 장점을 높이 쳐줬기에 선택하게 되었다.
현 시스템이 그렇게 크지 않기때문에 클러스터링 구조는 필요가 없을것이라 판단했고, 오래된 값 또한 아쉽긴 하지만 실시간 모니터링에 초점을 두다보니 크게 문제가 되지 않았다.- 클러스터링 구조에 대한 미지원
왜 Grafana인가?
프로메테우스와 달리 그라파나는 초기 선택에 있어서 큰 고민이 필요하지 않았다. 많은 자료들을 찾아봐도 프로메테우스와 그라파나는 거의 짝궁처럼 붙어다니는 기술이었기 때문이다. 하지만 그라파나 또한 장단점이 있으니 이에 대해 알아보도록 하자.
Grafana 장점
공식 홈페이지를 통해서 말하고 있는 그라파나의 장점은 다음과 같다.
- 데이터베이스가 아닌 데이터 통합
- Grafana에서는 데이터를 수집할 필요가 없다. 대신 기존 데이터들을 통합하여 시각화 하는 방식을 취합니다.
- 누구나 사용할 수 있는 대시보드
- Grafana 대시보드는 다양한 소스에서 수집된 데이터를 다른 팀원과 공유하여 함께 데이터를 탐색할 수 있습니다.
- 누구나 동적 대시보드를 만들고 공유하여 협업과 투명성을 높일 수 있습니다.
- 누구나 볼 수 있는 데이터
- Grafana는 단일 담당자가 아니라 조직의 모든 사람이 데이터에 엑세스 할 수 있어야 한다는 원칙에 따라 구축되었다.
- 데이터를 민주화함으로써 필요로 하는 사람들이 데이터를 쉽게 사용하고 액세스 할 수 있는 문화를 촉진하여 팀의 역량을 강화하는데 도움이 된다.
- 유연성 및 다용성
- 모든 데이터를 유연하고 다용도 대시보드로 변환한다.
- 고급 쿼리 및 변환 기능을 사용하여 패널을 사용자 정의하여 실제로 도움이 되는 시각화를 생성 할 수 있다.
위와 같은 장점들이 공식 홈페이지에서 설명하는 장점들이지만 사실 이러한 장점들은 다른 시각화 툴도 가지고 있는 장점들이다. 내가 생각하는 그라파나의 가장 큰 장점들은 다양한 데이터 소스와의 연동, 그리고 손쉬은 Alert 기능 추가라고 생각한다.
- 데이터베이스가 아닌 데이터 통합
서론이 너무 길었고 이제부턴 프로메테우스 & 그라파나의 설치 및 시스템 구축에 대해 다뤄보자
모니터링 시스템(Prometheus, Grafana)(1)
https://seoyoonho.github.io/2022/03/28/모니터링-시스템-Prometheus-Grafana/