프로덕션 준비 기능
- 지표, 추적, 감사
- 모니터링
- 액추에이터는 프로덕션 준비 기능을 매우 편리하게 사용할 수 있도록 다양한 편의 기능 제공
=> 마이크로미터, 프로메테우스, 그라파나
액츄에이터 관련 내용
localhost:8080/actuator
localhost:8080/actuator/health
management:
endpoints:
web:
exposure:
include: "*"
액츄에이터 endpoint.
1. 앤드포인트 활성화
2. 앤드포인트 노출
Http를 통해서 웹에 노출할지, jmx에 노출할지.
근데 jmx는 거의 안쓰므로 http에 노출할지말지 선택하면 된다.
엔드포인트 노출
management:
endpoints:
web:
exposure:
include: "*"
exclude: ""
endpoint:
health:
show-details: always
운영서버는 보통 info 로그 레벨을 많이 사용.
서비스 운영중에 급하게 로그를 남겨서 확인하고 싶을 경우
로깅 설정을 변경 후 다시 서버를 시작해야하지만, loggers 엔드 포인트를 사용하면 바로 변경할 수 있다.
# 엑츄에이터 보안
-> 엑츄에어티의 엔드포인트는 외부 인터넷의 접근을 막고, 내부에서만 접근 가능한 내부망을 사용한다.
엑츄에이터를 다른 포트에서 실행
-> management.server.port=9292
마이크로미터
- 중간에 사용하는 모니터링 툴을 변경하면 코드를 모두 변경해야하지 않을까?
-> 이걸 해결한것이 마이크로미터라는 라이브러리이다. (표준 측정 방식)
- 스프링 부트 액츄에이터는 마이크로미터를 기본으로 내장해서 사용한다.
- 마이크로미터라는 추상화가 있기 때문에 스프링은 이것을 활용.
- 로그를 추상화하는 slf4j를 떠올려보면 쉽게 이해가 될 것이다. (마이크로미터 - 모니터링 관련 추상화)
마이크로미터는 다양한 지표 수집 기능을 이미 만들어서 제공한다.
metrics - 측정 수치 값
* 서버 매트릭 유용 (켜놓는것을 추천!)
server:
tomcat:
mbeanregistry:
enabled: true
1. tomcat.threads.config.max
2. tomcat.threads.busy
* 사용자 정의 매트릭
예를 들어서 주문수, 취소수를 매트릭으로 만들 수 있다. => 유용하다!
사용자 정의 매트릭을 만들기 위해서는 마이크로미터의 사용법을 먼저 이해해야한다.
엑츄에이터를 통해서 수많은 매트릭이 자동으로 만들어진다.
-> 하지만, 어딘가에 보관해야 과거의 데이터도 확인할 수 있다.
-> 매트릭을 보관할 db가 필요하다, 또한 그래프를 통해 한눈에 볼 수 있도록 확인할 수 있는 대시보드도 필요하다!
프로메테우스, 그라파나
스프링부트 액츄에이터와 마이크로미터를 사용해서 수 많은 매트릭을 자동으로 생성한다.
어디선가 매트릭을 지속해서 수집하고 db에 저장한다 -> 프로메테우스
사용자가 보기 편하게 보여주는 대시보드가 필요하다 -> 그라파나
https://prometheus.io/download/
-> os(darwin - 맥사용) 설치
-> 터미널에서 parkdongjun@dongjun-park prometheus-2.54.0-rc.0.darwin-amd64 % ./prometheus 실행
-> http://localhost:9090/ url 접속 (프로메테우스는 9090이 기본 포트이다.)
프로메테우스 - 애플리케이션 설정
프로메테우스가 매트릭을 수집할 수 있도록 연동해보자!
1. 애플리케이션 설정 implementation 'io.micrometer:micrometer-registry-prometheus'
2. 프로메테우스 설정 (수집 설정)
# 프로메테우스 url 확인
http://localhost:18099/htx/api/actuator/prometheus
# prometheus.yml에 추가
- job_name: "spring-actuator"
metrics_path: '/actuator/prometheus'
scrape_interval: 1s
static_configs:
- targets: ['localhost:18099']
# scrape_interval 운영환경에서는 10s ~ 1m 권장
프로메테우스 - 필터 기능
http_server_requests_seconds_count{uri != "/actuator/prometheus"}
프로메테우스 - 게이지와 카운터
게이지 : 임의로 오르내릴 수 있는 값 => 그대로 사용
카운터 : 단일 누적 값 => increase(), rate() 등을 사용해서 표현(특정 시간에 얼마나 고객의 요청이 들어왔는지 확인할 수 있다.)
시간 단위 요청 그래프 : increase()
프로메테우스의 단점은 한눈에 들어오는 대시보드를 만들어보기 어렵다 => 그라파나 사용해서 해결!
# 그라파나
다운 -> bin -> ./grafana-server
=> http://localhost:3000/login
직접 만들 수 있지만, 미리 만들어진 것을 가져와서 사용할 수 있다.
https://grafana.com/grafana/dashboards - 공유 대시보드 활용
# 매트릭 만들기
- 비즈니스 매트릭 => 주문수, 취소수 등.
- 주문수, 취소수는 계속 증가하므로 카운터를 사용하자.
- 재고 수량은 증가하거나 감소하므로 게이지를 사용하자.
=> 매트릭이 관리하는 로직이 핵심 비즈니스 로직에 추가된다.
=> 어떻게 해결할까?
=> AOP로 분리하자.
# 실무 모니터링 환경 팁
모니터링 3단계
1. 대시보드
2. 애플리케이션 추적 - 핀포인트(오픈소스)
3. 로그
제품
마이크로미터, 프로메테우스, 그라파나
모니터링 대상
시스템 매트릭(CPU,메모리)
애플리케이션 매트릭(톰캣 스레드 풀, db커넥션 풀, 애플리케이션 호출 수)
비즈니스 매트릭(주문수, 취소수)