포스트

웹 애플리케이션 모니터링 도구 - 프로메테우스 / 그라파나


개요

우선 실제로 샐로그 프로젝트에 적용해보기 전에 프로메테우스가 어떤 것인지, 그리고 시각화를 위해 사용한 그라파나가 어떤 것인지 먼저 알아보아야 한다.

모니터링이 무엇인지, 원리는 어떻게 되는지 생각하면서 진행해보자.


실제 사용에 관해서는 샐로그에 적용해보면서 진행할 예정이기 때문에 샐로그 카테고리의 포스트를 별도로 작성할 예정이다.




“모니터링”이란?

모니터링(Monitoring)은 시스템의 상태와 성능을 실시간으로 감시하고 분석하는 과정을 말한다.

이를 통해 시스템이 정상적으로 작동하는지, 문제가 있다면 어떤 문제가 있는지, 성능이 어떻게 변화하는지를 파악할 수 있다.

특히, 샐로그와 같은 웹 애플리케이션을 부하 테스트하는 경우, 모니터링은 매우 중요하다.

모니터링을 통해 애플리케이션이 높은 트래픽을 처리할 수 있는 지, 병목 현상이 발생하는 부분이 어디인지, 자원 사용량이 적절한지 등을 확인하고 평가할 수 있다.




모니터링의 주요 요소

모니터링의 주요 요소는 네 가지가 있다.

  1. 메트릭(Metric) : 시스템의 상태를 나타내는 숫자 데이터이다. 예를 들어, CPU 사용률, 메모리 사용량, 응답 시간 등이 있다.
  2. 로그(Log) : 애플리케이션이 실행되는 동안 생성되는 텍스트 기록이다. 이를 통해 오류 메시지나 중요한 이벤트를 확인할 수 있다.
  3. 트레이싱(Tracing) : 요청이 시스템 내부를 어떻게 통과하는지 추적하는 것이다. 성능 문제의 원인을 찾을 수 있다.
  4. 경고(Alert) : 특정 조건이 만족되면 알림을 보내주는 기능이다. 예를 들어, CPU 사용률이 90%를 초과하면 알림을 보내는 등의 기능이다.




모니터링의 중요성

그렇다면 이 모니터링이 왜 중요하고 모두가 하려고 하는 걸까?

여러 이유가 있겠지만 주요한 이유는 다음과 같다.

1. 성능 최적화

모니터링을 통해 애플리케이션의 성능을 분석하고, 성능을 저하시키는 요소를 찾아 최적화 할 수 있다.

요즘의 애플리케이션이 성능이 떨어진다면 경쟁력을 갖추기 어렵다.

예를 들어, 쇼핑몰에서 제품을 검색하는 데 3초 이상 씩 걸린다면 누구나 싫어할 것이다.

성능 향상은 유저 경험과 깊게 연관되어 있으며, 모니터링은 이러한 성능 향상의 지표가 된다.



2. 문제 감지 및 해결

성능을 최적화하는 것 뿐만 아니라 실시간으로 시스템 상태를 모니터링하여 문제를 빠르게 감지하고, 해결에 접근할 수 있다.

갑작스럽게 문제가 발생하면 곧바로 알아채고 즉시 문제를 해결할 수 있도록 돕는다.

24시간 가동되어야 하는 애플리케이션 특성상 사람이 24시간 동안 문제가 발생하는지 확인하고 있을 수는 없다.

이 때 모니터링을 통해 편하게 감시할 수 있는 것이다.



3. 자원 관리

성능 최적화와 비슷한 맥락이다.

시스템 자원의 사용량을 모니터링하여 효율적으로 관리할 방향을 찾을 수 있다.

예를 들어 메모리가 부족하여 애플리케이션에 문제가 생긴다면 모니터링을 통해 즉시 캐치하고 해결하도록 노력할 수 있다.

사람이 즉각적으로 확인하기 어려운 자원 사용량 등을 알 수 있게 해주기 때문이다.




모니터링 도구 “프로메테우스”

시스템의 상태를 모니터링하고, 문제가 발생하면 경고를 보내주는 도구들은 여러 가지가 있다.

그 중 가장 기본적으로 널리 사용되는 프로메테우스는 무엇일까?


프로메테우스는 앞서 말한 대로 시스템 모니터링 도구이다.

이 도구는 특히 클라우드 네이티브 애플리케이션과 컨테이너화된 환경에서 많이 사용된다.

또한 오픈 소스이며 타깃 시스템의 메트릭을 pull 방식으로 수집한다.

커스텀 포맷을 통해 효율적인 데이터 식별이 가능하며 프로메테우스 쿼리 언어(PromQL)을 통해 타임 시리즈 데이터를 실시간으로 선택하고 집계할 수 있다.

(타임 시리즈 데이터(시계열 데이터)는 시간의 흐름에 따라 순차적으로 기록된 데이터를 뜻한다.)

프로메테우스의 주요 구성 요소

  1. 프로메테우스 서버
    • 메트릭 데이터를 수집, 저장, 쿼리 및 시각화하는 핵심 컴포넌트
  2. Exporter
    • 다양한 시스템 및 애플리케이션에서 메트릭을 수집하여 프로메테우스가 이해할 수 있는 형식으로 변환하는 역할
    • 대표적인 예로 Node Exporter(서버 메트릭 수집), cAdvisor(컨테이너 메트릭 수집) 등
  3. Alertmanager
    • 프로메테우스에서 생성된 경고를 관리하고, 알림을 전송하는 역할
    • 경고의 분류, 집합, 라우팅 등을 설정
  4. Pushgateway
    • 단기적인 작업(job)이나 배치 작업(batch job)에서 생성된 메트릭을 프로메테우스로 푸시
    • 주기적으로 실행되지 않는 작업의 메트릭을 수집하는 데 유용



프로메테우스의 작동 방식

  1. 데이터 수집(Scraping)
    • 프로메테우스는 주기적으로 다양한 대상(Targets)으로부터 메트릭 데이터를 수집한다. 이러한 대상은 애플리케이션, 서버, 데이터베이스 등 다양한 시스템이 될 수 있다.
    • 데이터를 수집하는 방식은 ‘Pull’ 방식으로, 프로메테우스 서버가 설정된 주기에 따라 대상에서 데이터를 가져온다.
    • 각 대상은 /metrics 엔드포인트를 노출하며, 프로메테우스는 이 엔드포인트를 통해 데이터를 수집한다.
  2. 메트릭 저장 (Storage)
    • 수집된 메트릭 데이터는 로컬 디스크에 시계열 데이터베이스로 저장된다.
    • 고도의 압축 및 효율적인 저장 방식을 사용하여 대량의 데이터를 효과적으로 관리한다.
  3. 데이터 쿼리 (Querying)
    • PromQL(Prometheus Query Language)이라는 강력한 쿼리 언어를 제공한다. 이를 통해 사용자는 복잡한 데이터 분석 및 집계를 수행할 수 있다.
    • PromQL을 사용하여 특정 시점의 메트릭 값, 시간에 따른 메트릭 변화, 메트릭 간의 계산 등을 쉽게 수행할 수 있다.
  4. 시각화 (Visualization)
    • 기본적인 시각화 도구를 제공하지만, 주로 그라파나(Grafana)와 같은 외부 시각화 도구와 함께 사용된다.
    • 그라파나는 프로메테우스와 통합되어, 수집된 데이터를 시각적으로 표현하고, 대시보드를 통해 모니터링할 수 있다.
  5. 경고 및 알림 (Alerting)
    • 프로메테우스는 Alertmanager와 통합되어 경고 및 알림 기능을 제공한다.
    • 사용자는 알림 규칙을 설정하여 특정 조건이 충족될 때 경고를 생성할 수 있다.
    • 발생한 경고는 이메일, Slack, PagerDuty 등 다양한 채널을 통해 알림을 보낼 수 있다
  6. 서비스 디스커버리 (Service Discovery)
    • 프로메테우스는 다양한 서비스 디스커버리 메커니즘을 지원하여 동적으로 대상 목록을 관리할 수 있다.
    • 이는 클라우드 환경이나 컨테이너 오케스트레이션 시스템(Kubernetes 등)에서 유용하게 사용된다.



프로메테우스 아키텍처

1. 데이터 수집

프로메테우스 서버를 이루는 요소 중 하나인 Retrieval에서 Service discovery에 정의 되어 있는 Target을 식별한다.

이 때 kubernetes 뿐만 아니라 클라우드 환경, 로컬, 도커 등 다양한 시스템을 대상으로 설정할 수 있다.


Target이 정의되고 나면 Retrieval에서 Target에 존재하는 Exporter를 통해 메트릭을 스크래핑 한다.

여기서 Exporter는 시스템의 메트릭을 수집하고 HTTP endpoint로 메트릭을 노출시켜주는 기능을 갖고 있다.


2. 데이터 저장

Retrieval는 데이터 수집을 총괄하는 역할을 한다.

TSDB는 Time Series Database의 약자로, 시계열 데이터 형식의 Local Storage와 Remote Storage를 사용할 수 있다.

HTTP server는 HTTP API로 데이터를 수집, 추가, 삭제하는 것으로 프로메테우스 서버가 갖고 있는 메트릭을 시각화 등에 활용을 하기 위해 존재한다.
모든 메트릭은 API와 쿼리문을 통해 컨트롤할 수 있다.


3. 알림 기능

Alertmanager는 프로메테우스와 함께 작동하여 알림 및 경고 관리를 위한 도구이다.

이를 통해 모니터링 중 알림을 보낼 수 있도록 설정할 수 있다.

예를 들어 CPU 사용률이 80% 초과한다거나 하면 이메일 등으로 알림을 보내도록 설정할 수 있다.


4. 시각화

프로메테우스 서버로부터 데이터를 제공 받아 사용하는 부분이다.

Third-party client또는 Module을 사용하여 데이터 분석을 위해 사용할 수 있다.



프로메테우스 사용 이유

정리하면 프로메테우스는 일단 오픈 소스기 때문에 비용을 절감할 수 있다.

또한, 강력한 메트릭 수집 및 저장 기능을 갖추고 있고, PromQL 이라는 유연한 쿼리 언어를 사용하여 메트릭을 분석하고 시각화할 수 있도록 지원된다.

다양한 환경에서 쉽게 확장 및 통합이 가능하며 그라파나와 같은 시각화 도구와 쉽게 연결할 수 있다.




모니터링 시각화란?

앞선 프로메테우스 등 모니터링 도구로 메트릭을 수집했다고 해서 숫자나 텍스트로만 표현된 데이터를 분석하기 쉽지 않다.

이를 위해 사용하는 것이 모니터링 시각화 도구이다.

즉, 그래프나 차트를 통해 한 눈에 보기 편하게 만들어주는 도구인 셈이다.


모니터링 시각화의 중요성

그렇다면 이러한 시각화 도구를 왜 사용하는 걸까?

솔직히 한 가지를 딱 고르라면 나는 “협업”에 가장 큰 이유가 있다고 생각한다.

개발자나 이러한 데이터를 다루는 데에 익숙한 사람은 수집된 메트릭을 텍스트 형태로도 알아볼 수 있다.

그러나 경영진이나 다른 분야의 이해관계자들에게는 직관적으로 전달되지 않을 것이다.

하지만 시각화 도구를 사용하면 그래프나 차트로 표현이 되기 때문에 잘 모르는 사람도 확실하게 파악이 가능하다.

데이터를 이해하거나 분석에 용이하다는 것은 문제 감지를 보다 빠르게 할 수 있다는 것이기 때문에 이 점이 가장 중요하다.




모니터링 시각화 도구 “그라파나”

그라파나는 앞서 말한 모니터링 시각화 도구이다.

오픈소스 데이터 시각화 솔루션으로, DB를 비롯한 다양한 데이터 소스를 그래프, 차트, 테이블 형식으로 생성한다.

데이터 소스에 대한 암호화도 지원하기 때문에 안전하다.

또한 다양한 위젯을 사용하여 커스텀 대시보드를 생성할 수 있기 때문에 간편하며, 다양한 용도로 사용할 수 있다.


그라파나 사용 이유

  1. 강력한 데이터 시각화 옵션
    • 그라파나는 그래프, 차트, 게이지, 테이블 등 다양한 시각화 도구를 제공하여 데이터를 직관적으로 표현할 수 있다.
    • 사용자 정의 대시보드를 생성하여 필요한 메트릭과 데이터를 한 화면에 통합할 수 있다.
  2. 다양한 데이터 소스 지원
    • 프로메테우스 뿐만 아니라 InfluxDB, Graphite, Elasticsearch, MySQL, PostgreSQL 등 다양한 데이터 소스와 통합할 수 있다.
    • 여러 데이터 소스를 동시에 사용하여 하나의 대시보드에서 다양한 데이터를 시각화할 수 있다.
  3. 실시간 모니터링
    • 대시보드는 실시간으로 데이터를 업데이트하며, 최신 상태를 항상 확인할 수 있다.
    • 대시보드를 자동으로 새로 고침하여 최신 데이터를 지속적으로 반영한다.
  4. 알림 및 경고 설정
    • 특정 메트릭이 임계값을 초과하면 알림을 설정할 수 있다.
    • 이메일, Slack, PagerDuty, OpsGenie 등 다양한 알림 채널을 통해 경고를 받을 수 있다.
  5. 사용자 관리 및 협업 기능
    • 여러 사용자가 대시보드를 공유하고 협업할 수 있도록 사용자 관리 및 권한 설정 기능을 제공한다.
    • 다양한 조직 및 팀 단위로 대시보드를 관리할 수 있다.
  6. 확장성 및 플러그인 지원
    • 다양한 플러그인을 설치하여 기능을 확장할 수 있다.
    • 활발한 오픈 소스 커뮤니티에서 지속적으로 업데이트 및 기능 개선이 이루어지고 있다.
  7. 쉬운 설치 및 사용
    • 그라파나는 설치가 간편하며, Docker를 포함한 다양한 배포 방법을 지원한다.
    • 사용하기 쉬운 인터페이스를 제공하여 비전문가도 쉽게 대시보드를 생성하고 관리할 수 있다.




참고

오픈소스 컨설팅 - 시스템 운영 환경의 인프라 모니터링
prometheus.io
hyunshoon.log - Monitoring Prometheus 총 정리
44Bits - 그라파나(Grafana)란?





후기

내용이 좀 많아졌다.

사실 이것도 수박 겉햝기 식이겠지만 이 정도라도 알고 하느냐 모르고 하느냐 좀 차이가 많이 날 것이라 생각했다.

관련 유튜브를 봤을 때, 화자가 말하길 이런 오픈 소스 도구도 깊게 파면 끝도 없다고 한다.

나는 일단 적용해보는 것이 의의를 두고 있기 때문에 당장은 이 정도 수준까지만 알고 시작해보려 한다.


이제 샐로그에 프로메테우스와 그라파나를 적용하고 모니터링을 통해 어느 부분을 고쳐 최적화할 수 있는 지 알아보자.

이 블로그는 저작권자의 CC BY 4.0 라이센스를 따릅니다.