SpringBoot Metric - Prometheus + Grafana 연동 2

dragonappear·2022년 9월 27일
0

Metric

목록 보기
2/2

출처

제목: "Spring Boot + Prometheus + Grafana를 이용한 모니터링(2/3)"
작성자: tistory(devbksheen)
작성자 수정일: 2021년12월14일
링크: https://devbksheen.tistory.com/entry/Spring-Boot-Prometheus-Grafana%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%8123-1?category=900285
작성일: 2022년9월27일
제목: "[Prometheus] Prometheus 설치하기"
작성자: tistory(yoo11052)
작성자 수정일: 2022년7월27일
링크: https://yoo11052.tistory.com/201
작성일: 2022년9월27일

Spring Boot Project 생성 및 설정

build.gradle

dependencies {
	
    ...

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'io.micrometer:micrometer-core'
    implementation 'io.micrometer:micrometer-registry-prometheus'
	
    ...
}

위와 같이 의존성을 주입해준다.

application.yml

spring:
  application:
    name: monitoring

management:
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true

  endpoints:
    web:
      exposure:
        include: health, info, metrics, prometheus

  metrics:
    tags:
      application: ${spring.application.name}
  • management.endpoint.{id}.enabled:true

    • endpoint들을 활성화한다.
    • web 과 관련된 endpoint들은 info, health를 제외하고는 모두 disabled 처리 되어있다.
    • Boot 2.0 이상에서는 endpoints.{id}가 아닌 endpoint.{id}로 설정해야 한다.
  • management.endpoints.web.exposure.include:{id},{id},{id}

    • {id} endpoint들을 활성화한다.
    • management.endpoints.web.exposure.exclude를 사용해서 제외시킬 수 도 있다.
  • metrics.tags.application: {application name}

    • metic application 정보를 설정한다.

테스트해볼 endpoint를 만들고 서버를 가동시킨다.

@RestController
public class MetricsController {

    @GetMapping("/end-point1")
    public String endPoint1() {
        return "Metrics for endPoint1";
    }

    @GetMapping("/end-point2")
    public String endpoint2() {
        return "Metrics for endPoint2";
    }
}

Prometheus 설치

Prometheus는 Docker로 설치하자
prometheus.yml을 생성해 다음과 같이 작성한다.

global:
  scrape_interval: 10s # 10초마다 매트릭을 수집 default 1분
  evaluation_interval: 1m # 1분마다 규칙을 평가 default 1분

  external_labels: # 외부 시스템에 표시할 이 서버의 레이블
    monitor: 'devbeekei-monitor'

rule_files: # 규칙을 로딩하고 evaluation_interval 설정에 따라 정기적으로 평가한다.
# - "first.rules"
# - "second.rules"
        
scrape_configs:
  - job_name: 'monitoring-app' # 잡 이름
    metrics_path: '/actuator/prometheus' # 메트릭을 수집할 path 설정
    static_configs:
      - targets: ['host.docker.internal:8080'] # 도커 인스턴스 내부 호스트:8080

Spring boot Application이 기본 포트인 8080으로 가동하고 있기 때문에 targets을 8080으로 잡아준다.

이제 도커로 Prometheus를 설치한다.

docker run \
    -p 9090:9090 \
    -v {%상위경로%}/prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/prometheus

컨테이너가 생성되고 실행됐으면 http://localhost:9090으로 접속해보면 Prometheus 홈페이지가 나올것이다.

혹은 직접 설치를 해도 된다.

https://prometheus.io/download/

wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
 
tar xzvf prometheus-2.37.0.linux-amd64.tar.gz

압축을 풀고 ./prometheus로 실행한다.

위 두가지 방법으로 실행 가능하고, 실행 후 9090포트로 접속하여 Status -> Targets 로 접속하면 아래와 같은 화면을 볼 수 있다.


prometheus.yml

  • global

    • 전역 설정을 할 수 있다.
  • scrape_interval

    • 매트릭을 수집할 주기를 설정할 수 있다. 디폴트 1분
  • evaluation_interval

    • 규칙늘 평가할 주기를 설정할 수 있다. 기본값 1분
  • alerting

    • Alertmanager에 대해 설정할 수 있습니다.
  • rule_files

    • 규칙을 로딩하고 evaluation_interval 설정에 따라 주기적으로 평가합니다.
  • scrape_configs

    • 메트릭을 수집할 엔드포인트에 대해 설정할 수 있습니다.
  • job_name

    • 이 설정에서 수집한 타임시리즈에 대해 'job=<job_name>'으로 라벨을 추가합니다.
  • static_configs

    • 타겟(엔드포인트)과 타겟에 대한 라벨을 지정해 줄 수 있습니다.
  • targets

    • 메트릭을 수집할 엔드포인트를 지정해 줄 수 있습니다.

0개의 댓글