Spring Actuator 기초 설정 & IntelliJ 활용하기
해당 코드는 Github에 공개되어 있습니다.
스프링은 Actuator를 이용해서 애플리케이션 상태를 종합적으로 모니터링할 수 있습니다.
의존성 주입
1 2 3
dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' }
actuator 호출
http://localhost:8890/actuator
를 호출하면 위와 같은 Response를 받을 수 있습니다. 기본 설정으로는 모든 endpoint가 노출돼있지는 않습니다. 모든 endpoint를 노출하도록 설정해보겠습니다.
endpoints 전체 노출
1 2 3 4 5 6
# application.yml management: endpoints: web: exposure: include: "*"
application.yml
설정을 변경하고 다시 /actuator
호출하면 아래 Response와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
{ "_links": { "self": { "href": "http://localhost:8890/actuator", "templated": false }, "auditevents": { "href": "http://localhost:8890/actuator/auditevents", "templated": false }, "beans": { "href": "http://localhost:8890/actuator/beans", "templated": false }, "caches-cache": { "href": "http://localhost:8890/actuator/caches/{cache}", "templated": true }, "caches": { "href": "http://localhost:8890/actuator/caches", "templated": false }, "health": { "href": "http://localhost:8890/actuator/health", "templated": false }, "health-component": { "href": "http://localhost:8890/actuator/health/{component}", "templated": true }, "health-component-instance": { "href": "http://localhost:8890/actuator/health/{component}/{instance}", "templated": true }, "conditions": { "href": "http://localhost:8890/actuator/conditions", "templated": false }, "configprops": { "href": "http://localhost:8890/actuator/configprops", "templated": false }, "env": { "href": "http://localhost:8890/actuator/env", "templated": false }, "env-toMatch": { "href": "http://localhost:8890/actuator/env/{toMatch}", "templated": true }, "info": { "href": "http://localhost:8890/actuator/info", "templated": false }, "loggers": { "href": "http://localhost:8890/actuator/loggers", "templated": false }, "loggers-name": { "href": "http://localhost:8890/actuator/loggers/{name}", "templated": true }, "heapdump": { "href": "http://localhost:8890/actuator/heapdump", "templated": false }, "threaddump": { "href": "http://localhost:8890/actuator/threaddump", "templated": false }, "metrics-requiredMetricName": { "href": "http://localhost:8890/actuator/metrics/{requiredMetricName}", "templated": true }, "metrics": { "href": "http://localhost:8890/actuator/metrics", "templated": false }, "scheduledtasks": { "href": "http://localhost:8890/actuator/scheduledtasks", "templated": false }, "httptrace": { "href": "http://localhost:8890/actuator/httptrace", "templated": false }, "mappings": { "href": "http://localhost:8890/actuator/mappings", "templated": false } } }
경로 | 설명 |
---|---|
/beans | 초기화된 모든 스프링 빈의 목록을 표시 |
/env | 스프링 설정 가능한 환경 속성 목록욜 표시, OS 환경 변수 및 컨피규레이션 파일의 속성 목록 |
/health | 애플리케이션 상태 정보 표시 |
/info | 애플리케이션의 임의 정보 표시 properties 등 |
/loggers | 로거 컨피규레이션 정보를 표시하고 수정 |
/metrics | 매트릭스 정보를 표시(메모리, 실행중인 스레드 수, REST 메서드 응답 시간) |
/trace | 트레이스 정뵤 표시(기본적으로 마지막 100개의 HTTP Request) |
다양한 정보들이 포함되어 있습니다. 필요한 정보들을 확인한 후 아래와 같이 필요한 정보들만 노출할 수 있습니다.
1 2 3 4 5 6 7 8
management: endpoints: web: exposure: include: - "info" - "health" - "httptrace"
application.yml
변경이후 다시 /actuator
을 호출하면 include
에 포함시킨 endpoint만 Response 받게 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
{ "_links": { "self": { "href": "http://localhost:8890/actuator", "templated": false }, "health": { "href": "http://localhost:8890/actuator/health", "templated": false }, "health-component": { "href": "http://localhost:8890/actuator/health/{component}", "templated": true }, "health-component-instance": { "href": "http://localhost:8890/actuator/health/{component}/{instance}", "templated": true }, "info": { "href": "http://localhost:8890/actuator/info", "templated": false }, "httptrace": { "href": "http://localhost:8890/actuator/httptrace", "templated": false } } }
Info Git Info 노출하기
기본 설정에서 actuator/info
호출시 아무 정보도 Response를 하지 않습니다. plugin을 이용하면 git에 대한 정보를 쉽게 노출할 수 있습니다.
1 2 3 4 5 6 7 8 9
<code>buildscript { ... dependencies { ... classpath "gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:2.0.0" } } apply plugin: "com.gorylenko.gradle-git-properties" </code>
필요한 디펜던시를 추가합니다.
1 2 3 4 5
management: ... info: git: mode: SIMPLE # FULL or SIMPLE
git 정보에 대한 mode를 SMPLE, FULL을 지정할 수 있습니다. 이후에 서버를 실행시키면 아래 그림처럼 git.properties
파일에 Git에 대한 정보가 담겨있습니다.
SIMPLE Mode
1 2 3 4 5 6 7 8
{ "git": { "commit": { "time": "2019-07-02T16:31:35Z", "id": "293e840" }, "branch": "master" }
FULL Mode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
{ "git": { "build": { "host": "yun", "version": "0.0.1-SNAPSHOT", "time": "2019-07-03T16:49:41Z", "user": { "name": "Yun", "email": "cheese10yun@gmail.com" } }, "branch": "master", "commit": { "message": { "short": "오타 수정", "full": "오타 수정\n" }, "id": { "describe": "", "abbrev": "293e840", "full": "293e840b752531eafb1be55e9cec78113743dd8d" }, "time": "2019-07-02T16:31:35Z", "user": { "email": "cheese10yun@gmail.com", "name": "Yun" } }, "closest": { "tag": { "name": "", "commit": { "count": "" } } }, "dirty": "true", "remote": { "origin": { "url": "https://github.com/cheese10yun/blog-sample.git" } }, "tags": "", "total": { "commit": { "count": "212" } } } }
mode
에 따라서 출력되는 정보가 다릅니다.
Health Database
기본 설정에서 /actuator/health
를 호출하면 아래와 같은 응답 정보를 받을 수 있습니다. (데이터베이스 정보를 표시하기 위해서 H2 의존성을 추가했습니다.)
1 2 3
{ "status": "UP" }
데이터베이스에 대한 정보를 추가적으로 확인하기 위해서는 application.yml
을 추가적으로 설정하면 됩니다.
1 2 3 4 5 6
management: ... endpoint: health: enabled: true show-details: always
위 설정을 추가하시고 /actuator/health
를 다시 호출하면 아래와 같은 Response를 확인할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
{ "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "H2", "hello": 1 } }, "diskSpace": { "status": "UP", "details": { "total": 500068036608, "free": 389070479360, "threshold": 10485760 } } } }
Base Path 변경하기
기본으로 제공해주는 URL 정보는 변경해서 사용하는 것이 바람직합니다. base-path
속성을 이용하면 endpoint base path를 변경할 수 있습니다.
1 2 3 4 5
management: endpoints: ... web: base-path: "/system"
base-path
을 변경하면 아래와 같이 endpoint base path가 변경되는 것을 확인할 수 있습니다.
IntelliJ Endpint
IntelliJ를 이용하면 Actuator를 더욱 잘 활용할 수 있습니다.
Run/Debug Tab에서 Endpoints에서는 전체 Request Mapping를 볼 수 있습니다. 실제 Run HTTP Request
를 이용하면 요청을 보낼 수 있습니다.
우 클릭 이후 Edit을 활용하면 실제 매핑된 Controller 코드로 이동되어 컨트롤러에 있는 특정 Request Mapping 정보를 쉽게 찾을 수 있습니다.
Beans
Tab에서는 등록돼있는 Bean들을 볼 수 있습니다. 스프링 부트에서는 특정 빈의 유무에 따라서 설정들이 변경되는 일이 많기 때문에 디버깅 시 유용하게 사용할 수 있습니다.
Health
Tab에서는 위에서 확인한 heath 정보도 확인할 수 있습니다. Http 요청을 보내서 확인하는 것보다는 인텔리 제이에서 확인하는 것이 개인적으로는 편리한 거 같습니다.
Controller에서 HTTP Call을 위 그림처럼 진행할 수 있습니다.