Search
Duplicate
📒

[Spring MSA] 03-2. 액츄에이터 실습

상태
수정중
수업
Spring MSA
주제
4 more properties
참고

액추에이터 - health

NOTE
애플리케이션에 문제가 발생했는지 확인하는 앤드포인트!
{"status": "UP"}
YAML
복사
기본적으로 status를 제공해준다. curl localhost:8080/actuator/health
헬스 정보는 단순히 애플리케이션이 요청에 응답할 수 있는지 판단한다.
애플리케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량이 문제가 없는지와 같은 정보들을 포함해서 만들어진다.

상세보기

NOTE
management: endpoint: health: show-details: always
YAML
복사
자세한 정보를 위해서 show-details를 always로 해준다.
{ "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "H2", "validationQuery": "isValid()" } }, "diskSpace": { "status": "UP", "details": { "total": 2000396742656, "free": 1813467586560, "threshold": 10485760, "path": "D:\\study\\Spring\\Spring_final\\start\\do-actuator-start\\.", "exists": true } }, "ping": { "status": "UP" } } }
JSON
복사

컴포넌트 상태만 보기

NOTE
management: endpoint: health: show-components: always
YAML
복사
show-componests를 사용
{ "status": "UP", "components": { "db": { "status": "UP" }, "diskSpace": { "status": "UP" }, "ping": { "status": "UP" } } }
JSON
복사
기본정보인 status만 제공된다.

헬스 이상상태

NOTE
{ "status": "DOWN", "components": { "db": { "status": "DOWN" }, "diskSpace": { "status": "UP" }, "ping": { "status": "UP" } } }
JSON
복사
헬스 컴포넌트 중 하나라도 이상이있다면, 전체 상태는 DOWN이 된다.

액츄에이터 - info

기본/env 정보보기

NOTE
management: info: # 기본적으로 제공해주는 정보 java: enabled: true os: enabled: true env: enabled: true # 커스텀한 정보를 보기위해 true info: # 사용자가 커스텀한 정보 app: name: hello-actuator company: yh
YAML
복사
info에서 제공하는 정보를 볼수도있고, 직접 넣을수도 있음
{ "app": { "name": "hello-actuator", "company": "yh" }, "java": { "version": "19-ea", "vendor": { "name": "Oracle Corporation" }, "runtime": { "name": "OpenJDK Runtime Environment", "version": "19-ea+20-1369" }, "jvm": { "name": "OpenJDK 64-Bit Server VM", "vendor": "Oracle Corporation", "version": "19-ea+20-1369" } }, "os": { "name": "Windows 10", "version": "10.0", "arch": "amd64" } }
JSON
복사
java, os 등 여러 정보가 표기됨

build 정보

NOTE
build.info.properties를 가져옴!
springBoot { buildInfo() }
Groovy
복사
build.gradle에 다음코드를 추가
{ // ... "build": { "artifact": "actuator", "name": "actuator", "time": "2023-04-02T13:46:56.634Z", "version": "0.0.1-SNAPSHOT", "group": "hello" }, // ... }
JSON
복사
build에 대한 정보가 출력된다.
build-info.properties 코드

git 정보

NOTE
git.properteis를 가져옴!
plugins { ... id "com.gorylenko.gradle-git-properties" version "2.4.1" //git 버전작성 }
Groovy
복사
build.gradle에 다음코드를 추가 (해당 정보는 git으로 관뢰되어야 나온다)
{ // ... "git": { "branch": "master", "commit": { "id": "87c5211", "time": "2023-03-17T06:57:52Z" } }, // ... }
JSON
복사
commit정보를 볼 수 있음(더 많은 정보를 볼수도 있다)
management: info: git: mode: "full"
YAML
복사
자세한 정보를 알기 위해선 다음 옵션 작성
git.properties 코드

액츄에이터 - logger

NOTE
loggers 엔드포인트를 사용하면 로깅과 관련된 정보를 확인하고, 또 실시간으로 변경할 수도 있다.

LogController 생성

NOTE
@Slf4j @RestController public class LogController { @GetMapping("/log") public String log(){ log.trace("trace log"); log.debug("debug log"); log.info("info log"); log.warn("warn log"); log.error("error log"); return "ok"; } }
Java
복사
여러 레벨의 로그를 남기는 단순한 컨트롤러

로그레벨 확인

NOTE
logging: level: hello.controller: debug
YAML
복사
hello.controller 패키지와 그 하위는 debug 레벨을 출력하도록 함

실행결과

// ... { "hello": { "effectiveLevel": "INFO" }, "hello.ActuatorApplication": { "effectiveLevel": "INFO" }, "hello.controller": { "configuredLevel": "DEBUG", "effectiveLevel": "DEBUG" }, "hello.controller.LogController": { "effectiveLevel": "DEBUG" }, }
JSON
복사
로그를 별도로 설정하지 않으면 기본으로 INFO를 사용한다.
실행결과를 helloINFO, hello.controller부터는 DEBUG임을 확인할 수 있다.

자세히 조회하기

{ "configuredLevel": "DEBUG", "effectiveLevel": "DEBUG" }
JSON
복사
localhost:8080/actuator/loggers/hello.controller
로거이름을 뒤에 넣으면 해당 부분의 로거정보만 조회가 가능하다.

실시간 로그 레벨 변경

NOTE
개발 서버는 보통 DEBUG로그를 사용하지만, 운영 서버는 DEBUG로 하면 너무 많은 로그를 출력하게되 디스크에 영향을 주게된다.
서버는 중요하다고 판단되는 INFO레벨을 사용한다.
그런데 서비스 운영중에 문제가 있어서 DEBUGTRACE로그를 남겨야 하는경우 일반적으로는 로깅 설정을 변경하고, 서버를 다시 시작해야 한다.
loggers엔드포인트를 사용하면 다시 시작하지 않고, 실시간으로 로그 레벨을 변경할 수 있다.

POST 전달

{ "configuredLevel": "TRACE" }
JSON
복사
localhost:8080/actuator/loggers/hello.controller
{ "configuredLevel": "TRACE", "effectiveLevel": "TRACE" }
JSON
복사
hello.controller의 로그레벨이 TRACE로 변경됨!

액츄에이터 - httpexchanges

NOTE
HTTP 요청과 응답의 과거 기록을 확인하고 싶다면 httpexchanges 앤드포인트를 사용하면 된다.

InMemoryHttpExchangesRepository 추가

NOTE
@Bean public InMemoryHttpExchangeRepository httpExchangeRepository() { return new InMemoryHttpExchangeRepository(); }
Java
복사
기본적으로 제공해주는 InMemoryHttpExchangeRepository 추가
HttpExchangeRepository 인터페이스의 구현체를 빈으로 등로갛면 httpexchanges 앤드포인트를 사용할 수 있다.
스프링 부트는 기본으로 InMemoryHttpExchangeRepository 구현체를 제공한다.

httpexchanges 확인

NOTE
`{ "exchanges": [ { "timestamp": "2023-04-03T05:23:15.725426400Z", "request": { "uri": "http://localhost:8080/actuator/httpexchanges", "method": "GET", "headers": { "host": [ "localhost:8080" ], "connection": [ "keep-alive" ], // ...
JSON
복사
http://localhost:8080/actuator/httpexchanges http 요청기록에 대한 정보가 나온다.