Published on

Prometheus와 Grafana는 어떤 차이가 있을까?

Authors
  • avatar
    Name
    손예지(Liv)

애플리케이션을 개발하는데 조금 익숙해지고 나면 성능에 관심이 생깁니다. MSA 환경에서 개발을 할 때 모니터링을 위해서 사용할 수 있는 도구가 있다는 것을 알게 되었습니다. 주로 Prometheus와 Grafana가 많이 언급되는데 두 가지 도구를 함께 사용할 때 어떤 이점이 있는지, 어떤 차이가 있는지 궁금해졌습니다.

Spring Boot Actuator

Prometheus를 사용하기 위해서 Spring Boot Actuator 의존성을 추가하면 손쉽게 사용할 수 있습니다. Actuator없이도 Prometheus를 사용할 수 있지만, Actuator는 자동으로 /actuator/Prometheus 엔드포인트를 생성해줍니다. \Prometheus 엔드포인트를 생성해준다는 게 얼마나 이점이 있을까요? 라는 생각이 들어서 조금 더 알아보았습니다.

예를 들어, 아래와 같이 "/할 때/users" 라는 API를 호출할 때 요청 수나, 응답 시간을 측정하려고 할 때 actuator를 사용하면 HTTP 요청 메트릭, JVM 메트릭과 같은 표준 메트릭들이 자동으로 수집됩니다. 그리고 수집된 메트릭은 Prometheus가 이해할 수 있는 형식으로 자동으로 변환이 됩니다.

@RestController
public class UserController {
    @GetMapping("/api/users")
    public List<User> getUsers() {
        return userService.findAll();
    }
}

Prometheus와 Grafana

Prometheus가 수집한 값을 Grafana는 시각화해주는 역할을 담당합니다. Prometheus와 Grafana 모두 시각화할 수 있는데 Grapana를 사용했을때 어떤 장점이 있을까요? Prometheus도 시각화 기능을 제공하지만 주로 자료를 수집하고 저장하는데 특화되어 있습니다. Prometheus는 시계열 데이터베이스(Time Series Database) 라고 하는데, 모든 데이터가 타임스탬프와 함께 저장되고 시간 순서로 데이터가 쌓입니다.

Grafana는 시각화에 특화된 도구입니다. 화면을 만드는 과정 없이 간단한 설정만으로 아래와 같이 대시보드를 생성하고 정보를 확인할 수 있습니다. Prometheus 외에도 Loki(로깅), MYSQL(관계형 데이터베이스) 와 같은 다양한 데이터 소스를 사용할 수 있습니다. 대시보드에 직관적으로 출력이 되기 때문에 JVM 호출 같은 부분도 쉽게 확인할 수 있습니다.

알게된 점

모니터링이라는 단어가 애플리케이션을 잘 이해하고 있어야만 사용할 수 있다고 생각했는데, Prometheus와 Grafana를 사용해서 손쉽게 바로 화면을 구현할 수 있다는 것을 알게 되었습니다. 대시보드에 포함할 수 있는 항목들이 많아서 어떤 부분을 중점으로 확인하면 좋을지 살펴볼 필요가 있을 것 같습니다.

참고자료

What is Prometheus?