Turbine Server
마이크로 서비스에서 발생하는 각종 로그나 결과값들을 Hystrix 클라이언트의 스트림을 통해서 전송하게 되면 전송된 내용들을 모아서 (수집)로그파일처럼 가지고 있다가 Hystrix Dashboard나 다른 모니터링 도구에 전달하는 역할

Hystrix Dashboard
Hsytrix 클라이언트에서 생성하는 스트림을 시각화


Micrometer + Monitoring System으로 대신한다.
Micrometer
- JVM 기반의 어플리케이션의 Metrics 제공 -> 모니터링 할 정보 수집
- Spring Framework 5, Spring Boot 2 부터 Spring의 Metrics 처리
- Prometheus 등의 다양한 모니터링 시스템 지원
Timer
- 짧은 지연 시간, 이벤트의 사용 빈도를 측정
- 시계열로 이벤트의 시간, 호출 빈도 등을 제공
- @Timed 제공
Microservice 수정
Spring Boot 2.0 이상부터는 애플리케이션의 metric 측정을 위해서 Micrometer를 제공한다. Micrometer는 Spring Boot 2의 Actuator에 포함되어 있기 때문에 spring-boot-starter-actuator를 dependency에 추가해주면 쉽게 사용할 수 있다.
dependencies
user-service, order-service, api-gateway -> pom.xml
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Spring Boot 2.0 이상부터 사용하는 Actuator는 1.x 버전에서 사용하던 것과는 달리 대부분의 endpoint가 disabled로 설정되어 있다. 기본적으로 /health와 /info 2가지 endpoint만 default로 사용 가능하다. 따라서 /Prometheus endpoint를 사용할 수 있도록 다음과 같이 application.yml에서 설정이 필요하다. -> info, metrics, prometheus 추가
application.yml
management:
endpoints:
web:
exposure:
include: refresh,health,beans,busrefresh, info, metrics, prometheus
UserController.java
@GetMapping("/health_check")
@Timed(value = "users.status", longTask = true)
public String status() {
return String.format("It's Working in User Service on Port"
+ ", port(local.server.port)=" + env.getProperty("local.server.port")
+ ", port(server.port)=" + env.getProperty("server.port")
+ ", token secret=" + env.getProperty("token.secret")
+ ", token expiration time=" + env.getProperty("token.expiration_time"));
}
@GetMapping("/welcome")
@Timed(value = "users.welcome", longTask = true)
public String welcome() {
// return env.getProperty("greeting.message");
return greeting.getMessage();
}
welcome, health_check 실행 후 확인


users.status와 users.welcome 추가된거 확인
모니터링 도구를 연결해서 시각화 해야한다.
클라우드 네이티브 어플리케이션을 모니터링 하기 위해서 각 프로세서를 관찰할 수 있어야 한다. 각각의 엔티티는 자동화된 문제에 대해서 감지, 경고를 하고 필요한 경우 디버깅, 상태 분석 같은 적절한 서비스를 생성해야 한다.
이러한 서비스는 시스템 분석을 위해서 health, metrics, log, end-to-end의 trace 정보 등을 수집할 수 있어야 한다.
Prometheus
- Metrics 를 수집하고 모니터링 및 알람에 사용되는 오픈소스 어플리케이션
- 2016년부터 CNCF에서 관리되는 2번째 공식 프로젝트 (쿠버네티스 다음으로 두번째)
- 초창기 Level DB 에서 Time Series Database로 변경되었다. (시계열 DB에 Metrics 저장 -> 조회 가능 (Query))
- Pull 방식의 구조와 다양한 Metrics Exporter 제공
Grafana
- 데이터 시각화, 모니터링 및 분석을 위한 오픈소스 어플리케이션
- 시계열 데이터를 시각화하기 위한 대시보드 제공

Prometheus 설치
prometheus.yml 파일 수정

Prometheus 서버 실행 -> 9090 포트로 실행
./promethues --config.file=prometheus.yml

metrics 검사 - Table

metrics 검사 - Graph

Grafana 설치
brew install grafana
Grafana 실행 -> 3000 포트로 실행
./bin/grafana-server web

- username : admin
- password : admin (처음 들어가면 비밀번호 재설정 하라고 함)

Grafana와 Prometheus 연동

Grafana Dashboard 추가
- JVM(Micrometer)
- Prometheus
- Spring Cloud Gateway
import 로 다른 사용자 등록해둔 내용 가져올 수 있다. https://grafana.com/grafana/dashboards/






3 개 등록 확인

추가됐지만 대시보드의 정보가 나오지 않는다. -> 수정 필요
Edit 들어간다.

sum 에 들어갈 지표는 Prometheus에서 가져올 수 있는 값이어야 한다.
job은 prometheus 설정에 등록한 job_name 확인

이 값은 가져올 수 없다.

spring_cloud_gateway_requests_seconds_count 로 변경 후 값 가져오는 거 확인

값 가져온거 확인

전체 적용

다른 DashBoard는 확인가능하다.
'Spring > [인프런] Spring Cloud' 카테고리의 다른 글
어플리케이션 배포 - Docker Container (1) (0) | 2022.07.24 |
---|---|
어플리케이션 배포를 위한 컨테이너 가상화 (0) | 2022.07.09 |
장애 처리와 Microservice 분산 추적 (0) | 2022.07.05 |
데이터 동기화를 위한 Kafka 활용 2 (0) | 2022.07.04 |
데이터 동기화를 위한 Kafka 활용 1 (0) | 2022.06.30 |