Software Engineer

김상훈

Sanghun Kim

데이터 정합성과 시스템 신뢰성을 최우선으로 설계하는 금융 도메인 소프트웨어 엔지니어입니다.

rlatkdgns042@naver.com+82 10-2627-0378
대한민국 서울특별시 성동구

Prometheus + Grafana

June 16, 2024

모니터링 서비스

CloudWatch

  • AWS의 각종 리소스 및 해당 리소스 내에서 실행되는 애플리케이션에 대한 실시간 모니터링이 가능
  • AWS EC2와 연계하기 쉽고 대시보드, 알림, 통합 로그 등 다양한 기능을 지원함

ELK 스택(Elasticsearch, Logstash, Kibana)

+ Kafka(실제로 구현한 서비스)

ELK Stack: Elasticsearch, Kibana, Beats, Logstash

  • 로그 모니터링에 특화된 Elasticsearch, Logstash, Kibana 세 개를 함께 사용하는 ELK 스택
  • Elasticsearch로 인해 유연한 로그 분석이 가능하다. 검색 및 필터링 기능이 강력함
  • 메트릭 데이터보다는 로그 처리에 특화되어 있음

Prometheus + Grafana

  • 서버 메트릭 수집 및 시각화를 위해 함께 사용
  • Prometheus는 서버 메트릭을 처리하며 Grafana를 함께 사용하면 이 메트릭 데이터를 더 효과적으로 시각화할 수 있음

  • Promtail, Loki를 각각 Application Server, Monitoring Server에 설치하면 SpringBoot App에서 발생시킨 로그 데이터를 Monitoring Server에서 Grafana가 처리 가능한 형태로 가공하고 저장할 수 있음 (Loki Stack)

SpringBoot Actuator + Prometheus

Web Server Side

  • build.gradle에 애플리케이션 모니터링을 위해 actuator를 추가하고 prometheus를 위한 micrometer를 추가하면 별도의 세부 설정 없이도 관심을 가질 만한 대부분의 서버 메트릭을 수집해줌
javascript
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-actuator'
	implementation 'io.micrometer:micrometer-registry-prometheus'
}
  • application.yml
yaml
management:
  endpoints:
    web:
      exposure:
        include: prometheus
  endpoint:
    prometheus:
      enabled: true
  • 메트릭으로 포함할 수 있는 사항들
    • CPU 사용량
    • GC
    • HTTP 요청, 응답 시간
    • DataSource
    • 가동 시간
    • Logback 관련
      • Logback으로 남긴 로그 자체를 볼 수는 없음
  • javascript
    /actuator/prometheus
    에 접속하면 상상할 수 있는 대부분의 서버 메트릭을 이미 수집하는 것을 볼 수 있음

actuator를 사용하는 방식을 선택한다면 외부인이 접속 가능한 endpoint를 하나 여는 것과 같으므로 보안에도 신경을 써야 함

Nginx와 같은 Reverse Proxy로 접근을 제한하거나 Spring Security, 혹은 IP Whitelisting과 같은 절차를 추가해 주는 것이 좋음

Prometheus

  • WAS가 만든 데이터를 Monitoring Server의 Prometheus에서 수집해 Grafana가 시각화할 수 있는 형태로 가공하도록 함

  • javascript
    prometheus.yml

    • 15초마다 설정된 job들에 대한 데이터를 수집
    • 설정한 job이 수집하는 데이터
      1. Monitoring Server의 Prometheus 프로세스에 대한 Metric
        • 메모리 사용, 처리량, 쿼리 성능 등을 포함
      2. 추가적으로 설치한 Node Exporter가 수집하는 Monitoring Server의 CPU, RAM, Disk 등의 리소스
      3. 목표한 Spring Boot App의 actuator로 열어둔 endpoint를 통한 데이터
  • 각 job에 대한 scrape 주기 등을 더 세밀하게 조정할 수 있음

Grafana

Spring Boot 3.x Statistics | Grafana Labs

  • Prometheus 자체적으로도 기본적인 시각화가 가능함
  • 보다 사용자에게 편한 형태는 Grafana에서 제공함
    • 다양한 대시보드 템플릿을 손쉽게 선택해서 사용할 수 있음

  • Prometheus 자체에 대한 데이터도 별도의 대시보드로 시각화할 수 있음

  • javascript
    /lib/systemd/system/prometheus.service

  • prometheus에 대한 추가적인 설정은 프로세스를 실행시킬 때 옵션을 주면 됨

  • 스토리지 관련 옵션

    • 기본 설정에서는 데이터를 15일간 유지함
    javascript
    prometheus --config.file=prometheus.yml --storage.tsdb.retention.time=30d

댓글

댓글을 불러오는 중...