Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

모니터링 도구 파헤치기 with. 프로메테우스 ,그라파나 #20

Open
KIMSEI1124 opened this issue Oct 8, 2023 · 1 comment
Assignees
Labels
ch20 about chapter20 🥇 week4

Comments

@KIMSEI1124
Copy link
Contributor

KIMSEI1124 commented Oct 8, 2023

👍 문제

자바에서 제공하고 있는 JMX는 뭔가 구식같아 보입니다.
그러면 현재 가장 많이 사용하고 있는 모니터링 도구로는 어떠한 것이 있을까요??

✈️ 선정 배경

백엔드 개발을 하다가 보면 실제 모니터링에 관심이 생길 수 있습니다.
이때 사용하는 대표적인 도구가 프로메테우스그라파나입니다.
해당 기술은 실제로 많은 기업들에서도 사용하고 있어서 선정하게 되었습니다.

📺 관련 챕터 및 레퍼런스

Ch20. 모니터링 API인 JMX

🐳 비고

어쩌다보니... 어려운 주제를 선정하였는데 진짜 자세하게 할 필요 없이 이런것이다~ 만 해주세요
진짜 진짜 간단하게 해주세요 (2번 강조)

@KIMSEI1124 KIMSEI1124 added ch20 about chapter20 🥇 week4 labels Oct 8, 2023
@KIMSEI1124 KIMSEI1124 changed the title 프로메테우스 파헤치기 with. 그라파나 모니터링 도구 파헤치기 with. 프로메테우스 ,그라파나 Oct 8, 2023
@kgh2120
Copy link
Member

kgh2120 commented Oct 11, 2023

들어가며

모니터링이란 지속적으로 특정 대상을 감시하고 있는 행위라고 한다. 굳이 개발분야가 아니더라도, 다양한 산업에서도 쓰이는 용어이다. 하지만 개발 분야에서는 어플리케이션의 상태를 지속적으로 관찰하고, 특이점을 보이는 지표에 대해서 적절한 조치를 취하는 것이 주 목적이라고 할 수 있다. 모니터링을 쉽게 하기 위해서 이용하는 툴 중에서는 프로메테우스그라파나가 대표적이다. 질문의 취지에 맞게 프로메테우스그라파나가 무엇인지와 Spring 환경에서 어떻게 사용하는지에 대해서 간단하게 알아보자.

프로메테우스와 그라파나

프로메테우스그라파나에 대한 설명은 공식 문서에서 소개한 문구로 알아보자.

프로메테우스

Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud.
Prometheus collects and stores its metrics as time series data, i.e. metrics information is stored with the timestamp at which it was recorded, alongside optional key-value pairs called labels.
- 프로메테우스 Docs

프로메테우스는 모니터링과 알림 툴킷이고, 지표를 시계열 데이터로 수집, 저장을 한다고 한다.

아래 그림은 프로메테우스 공식 홈페이지에 있는 프로메테우스의 아키텍쳐이다. 프로메테우스는 targets으로부터 metrics를 수집하고, 이를 저장을 한다. 알람을 전달할 필요가 있다면 전달을 하고, 그라파나와 같은 데이터 시각화 도구가 PromQL이라는 쿼리를 통해 데이터를 질의하면 데이터를 전달해준다.

프로메테우스 아키텍쳐

그라파나

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data-driven culture - 그라파나 Github

그라파나는 지표를 질의, 시각화, 알림을 주고, 대시보드를 만들어준다고 한다. 대시보드를 만드는 것이 그라파나의 핵심 기능이다. 앞서 프로메테우스에서 수집, 저장한 지표를 통해 보기 좋은 대시보드를 만들어내는 기능을 실제로 많이 사용한다고 한다.

프로메테우스 그래프 vs 그라파나 대시보드

프로메테우스 역시 그래프를 그릴 수 있는 기능이 있는데, 그라파나를 이용하는 이유는 다음 사진으로 아주 간단하게 이해할 수 있다.

프로메테우스 그라파나
프로메테우스 그래프 그라파나 대시보드

|

위의 사진에서는 둘의 큰 차이점을 보기 힘들지만, 그라파나의 경우 대시보드를 커스텀할 수 있고, 다른 사람이 만든 대시보드를 이용할 수 있다는 장점이 있다.

아래 이미지는 Spring Boot 2.1 System Monitor라는 대시보드이다. 이 사진을 보면 왜 그라파나를 이용하는지 쉽게 이해가 간다. (나는 상상도 안가는 형태이다.)

그라파나 Spring Boot 2.1 System Monitor Image

Spring Actucator

Spring Actuactor란 Spring의 사이드 프로젝트로 어플리케이션을 모니터링할 수 있도록 도움을 주는 라이브러리다. Spring에서 알 수 있는 다양한 지표들을 제공하며, MicroMeter라는 라이브러리를 이용해 모니터링 툴에 맞는 형태로 데이터를 변환하여 이용할 수 있게 해준다.

Gradle, Maven에 다음과 같이 입력해주면 쉽게 이용이 가능하다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가
    implementation 'io.micrometer:micrometer-registry-prometheus' //프로메테우스 데이터 형태로 변환
}

MicroMeter에서 변환이 가능한 모니터링 툴들에 대한 정보는 Actuator Docs에 나와있다.

Actuator에서 제공하는 지표(Metric)

Actuator에서 제공하는 지표들은 정말 많지만 위에서 소개한 Spring boot 2.1 System Monitor에서 사용한 지표를 몇개 살펴보자. 전체 지표는 역시 docs에 있다.

큰 분류를 살펴보면 7개로 나뉜다. 각 분류에서 어떤 지표를 다루는지 간략하게 알아보자.

  • Basic Statistics
    시스템이 언제 시작했고, 얼마나 가동되었는지, CPU, Memory의 사용율에 대한 지표를 다룬다.

  • JVM Statistics - Heaps
    Heap과 Non-Heap 영역에서의 메모리를 얼마나 이용했는지에 대한 지표를 다룬다.

  • JVM Statistics - Threads/Buffers
    작동하는 Thread와 Buffere에 관련된 지표를 다룬다.

  • JVM Statistics - GC
    GC가 동작한 횟수, Stop the world 가 작동한 기간에 관한 지표를 다룬다.

  • HikariCP Statistics
    전체 커넥션의 수, 커넥션이 타임아웃된 횟수, 작동, 대기, 휴식중인 커넥션의 수 등 커넥션과 관련된 지표를 다룬다.

  • Tomcat Statistics
    작동중인 쓰레드, 초당 Http 요청의 수, 요청을 처리하는데 걸린 시간, 발생한 응답 코드 등 Web 관련된 지표를 다룬다.

  • Logback Statistics
    각 레벨(info, error, warn, debug, trace)에 해당하는 로그가 언제 몇개가 발생했는지에 대한 지표를 다룬다.

적용해보기

Spring과 Prometheus, Grafana를 함께 적용하는 것은 크게 어렵지 않다.

앞서 소개한 것 처럼 Spring 프로젝트의 빌드 도구에 PrometheusActuator 에 대한 의존성을 추가한 이후, Prometheus의 설정파일인 prometheus.ymlscrape_configs 하위에 다음과 같이 추가해주면 된다.

  - job_name: "spring-actuator" // 프로메테우스에 표기할 이름
    metrics_path: "/actuator/prometheus" // metrics를 제공받는 p경로
    scrape_interval: 1s                 // metrics를 수집할 시간
    static_configs: 
      - targets: ["localhost:8080"]   // 타겟의 주소

이후 Grafana에선 왼쪽 하단의 설정버튼 클릭 -> add datasource -> prometheus -> url 입력 -> 저장 버튼을 클릭하면 된다.

자세한 내용은 아래 이미지를 통해 살펴보면 된다.

그라파나-컨피그
그라파나-add datasource
그라파나 - 프로메테우스 추가
그라파나 - url 입력

참고 자료

Spring Actuator Docs
Prometheus Docs
Grafana Github

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ch20 about chapter20 🥇 week4
Projects
None yet
Development

No branches or pull requests

2 participants