로컬에 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를 확인할 수 있다.
'Docker' 카테고리의 다른 글
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock (0) | 2023.02.14 |
---|---|
docker에 Rancher 설치 (0) | 2023.02.11 |
Docker에 Jenkins설치 (0) | 2022.10.28 |
Dockerfile 내에서 gradle 빌드 후 spring boot 이미지 생성 (Multi Stage) (0) | 2022.10.28 |
Docker image offline 설치 이미지 오프라인에서 사용 (0) | 2022.03.17 |