본문 바로가기

Docker

docker에 prometheus + grafana 올리기 (Spring boot)

728x90
반응형

로컬에 prometheus랑 grafana를 설치해서 올렸더니 잘 안됐다.

Spring boot모니터링하려고 job에 등록했는데 계속 406뜨고 프로메테우스에서 서비스가 Down된 걸로 나왔다.

그래서 도커로 올려봤는데 동작을 잘해서..(-ㅅ -)

결국 도커로 올렸다.

 

 

Spring-boot Project 생성

build.gradle

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

 

application.yml

management:
  endpoints:
    web:
      exposure:
        include: prometheus

 

api대충 하나 만들어서 올린다.

http://localhost:8080/actuator/prometheus

호출해본다.

이렇게 호출이 되면 일단 Spring boot세팅은 끝.

 

 

Prometheus/Grafana 도커로 올리기

 

docker-compose.yml

version: "3.7"

services:

  prometheus:
      image: prom/prometheus
      ports:
        - "9090:9090"
      volumes:
        - /home/pliz/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml
      command:
        - '--config.file=/etc/prometheus/prometheus.yml'
      restart: always

  grafana:
    image: "grafana/grafana"
    ports:
      - "3000:3000"
    volumes:
      - /home/pliz/grafana/conf_grafana:/config_files
    restart: always
    depends_on:
      - prometheus
    privileged: true

docker-compose파일에 그라파나와 프로메테우스를 함께 서비스로 넣었다.

prometheus.yml은 별도로 작성한 뒤 볼륨으로 넣어줘야 한다.

 

prometheus.yml

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]


  - job_name: "java_application"
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["host.docker.internal:8080"]

기존에 있던 파일에 job_name : java_application부터 추가한 부분이다.

spring boot를 모니터링할 것이고 해당 프로젝트는 호스트에 있기 때문에 target에 아이피가 아닌 host.docker.internal로 작성했다.

docker-compose -f docker-compose.yml up --detach

 

http://localhost:9090

프로메테우스에 접속한다.

그리고 Status > Targets메뉴로 들어가서 어플리케이션이 정상 동작중인지 확인한다.

http://localhost:3000/login

그라파나는 3000번 포트로 접속한다.

초기 비밀번호는 admin/admin이다.

 

메인화면에 보이는 DATA SOURCES를 누른다.

프로메테우스를 선택한다.

URL에 프로메테우스 URL을 넣어야 한다.

컨테이너 내부에서 호출하는 것이기 때문에 localhost:9090으로 하면 안된다.

프로메테우스 컨테이너 ip를 확인한 후 넣어주면 된다.

아래쪽에 Save & test 버튼을 눌러준다.

 

Dashboards > Import 메뉴로 들어간다.

 

가장 유명한 대시보드이다.

import via grafana.com에 https://grafana.com/grafana/dashboards/4701-jvm-micrometer/ 를 입력한 후 Load한다.

 

 

그라파나 화면을 확인할 수 있다.

 

 

irate(http_server_requests_seconds_count{application="spring-boot-monitoring", uri="/test"}[3m])

3분동안 해당 uri를 호출한 count를 확인할 수 있다.

728x90
반응형