일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tool
- ubuntu
- jsp
- MySQL
- laravel
- AWS
- Oracle
- Spring Boot
- javascript
- java
- db
- linux
- Web Server
- JVM
- jenkins
- redis
- Spring
- php
- devops
- elasticsearch
- Design Patterns
- IntelliJ
- it
- Git
- springboot
- ReactJS
- Spring Batch
- 요리
- Gradle
- 맛집
Archives
- Today
- Total
아무거나
[Spring Actuator] Example 2편 - 각 Info Endpoint 설명 및 Custom Info Endpoint 생성 설명 본문
Java & Kotlin/Java
[Spring Actuator] Example 2편 - 각 Info Endpoint 설명 및 Custom Info Endpoint 생성 설명
전봉근 2023. 11. 26. 13:53반응형
이전글: https://bkjeon1614.tistory.com/782
각 Info Endpoint 설명 및 Custom Info Endpoint 생성 설명
- Health Endpoint
- show-details
- health 정보에서 components > diskSpace 의 details 필드에 상세 정보를 보여줌
[application.yml]... management: endpoint: health: show-details: always ...
- 이렇게 하면 /actuator/health 접근 시 ping, diskSpace 2가지 밖에 표시가 안되는데 예를들어 "spring-boot-starter-data-jpa" 를 연결한다고하면 해당 라이브러리에서 상태 bean 까지 등록해주므로 이것을 사용할 경우 components 아래 jpa 관련 또 다른 정보가 추가되어 보여진다.
- health 정보에서 components > diskSpace 의 details 필드에 상세 정보를 보여줌
- health 정보 들은 각 시스템관련 HealthIndicator 클래스에서 정보를 제공한다.
- Custom HealthIndicator 를 만들어 보자.
- 샘플코드
[ApplicationHealthIndicator.java]
[ApplicationLibInfoEndpointConfig.java]import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; public class ApplicationHealthIndicator implements HealthIndicator { @Override public Health health() { boolean status = getStatus(); // 해당 Status 가 DOWN 이면 최상단의 Status 도 동일하게 DOWN 으로 된다. if (status) { // withDetail 는 details 포함여부 기능 제공 return Health.up().withDetail("key1", "value2").withDetail("key2", "value2").build(); } return Health.down().withDetail("key3", "value3").withDetail("key4", "value4").build(); } boolean getStatus() { return System.currentTimeMillis() % 2 == 0; } }
... @Bean public ApplicationHealthIndicator applicationHealthIndicator() { return new ApplicationHealthIndicator(); }
- /actuator/health 에 접근하면 components > application (HealthIndicator 를 제외한 앞부분의 문자로 표시된다.) 객체에 status, details 에 key/value가 추가되어 표시되는걸 확인할 수 있다.
- 샘플코드
- STATUS
- /actuator/health 접근시 status: DOWN 일 때 503 Error 를 표시하는걸 볼 수 있다.
- STATUS 종류
- DOWN: 503
- OUT_OF_SERVICE: 503
- UP: 200
- UNKNOWN: 200
- show-details
- Info Endpoint
- 종류
- build (default enable 이며 /META_INF/build-info.properties 파일이 있어야 된다.)
- env
- git (default enable 이며 /META_INF/git.properties 파일이 있어야 된다.)
- java
- os
- 적용
- Gradle
[build.gradle]
[application.yml]... group 'com.bkjeon.codebase' version '0.0.0' sourceCompatibility = 11 ext { projectName = 'base-api' } processResources { filesMatching('**/application.yml') { expand(project.properties) } } ...
... management: ... info: # /actuator/info 정보가 표시되는것을 볼 수 있다. 각 환경변수들은 build.gradle 정의된 내용을 가져온다. 또한 VM 으로도 주입받을 수 있다. (Ex: -Dinfo.name=bkjeon) app-info: projectName: ${ext.projectName} // gradle 에서는 ${xxx.xxx} 와 같은 형태인 특수문법을 사용하여 properties 에 해당하는 값을 읽어올 수 있다. group: ${group} version: ${version} javaVersion: ${sourceCompatibility}
- Maven
[pom.xml]
[application.yml]... <groupId>..</groupId> <artifactid>..</artifactid> <properties> <java.version>11</java.version> <custom.value>bkjeon</custom.value> </properties>
... management: ... info: # /actuator/info 정보가 표시되는것을 볼 수 있다. 각 환경변수들은 build.gradle 정의된 내용을 가져온다. 또한 VM 으로도 주입받을 수 있다. (Ex: -Dinfo.name=bkjeon) app-info: group-id: "@project.groupId@" # maven 에서는 @project.groupId@ 와 같은 방식으로 pom.xml 에 지정된 <artifactId>..</artifactId> 값을 가져올 수 있는 특수문법이다. artifact-id: "@project.artifactId@" custom: "@custom.value@" # 상기 선언한 <custom.value>..</custom.value> 를 가져올 수 있다.
- Gradle
- 종류
- Env Endpoint
- /actuator/env 에서는 모든 환경변수가 들어가 있다.
- Git Info Endpoint
- 필수 파일인 git.properties 생성이 필요하다. 해당 파일을 자동으로 생성되게끔 설정을 추가해보자.
- maven 방법
[pom.xml]... <build> <plugins> <plugin> <groupId>io.github.git-commit-id</groupId> <artifactId>git-commit-id-maven-plugin</artifactId> </plugin> </plugins> </build> ...
- gradle plugin 추가
[build.gradle]plugins { id "com.gorylenko.gradle-git-properties" version "2.2.3" } ...
- 빌드를 완료하면 /build/resources/main/git.properties 파일이 생성된 걸 확인할 수 있다. 실행해보면 git 의 정보들을 볼 수 있다. 그 상태에서 이제 서버를 구동한 후 /actuator/info 에 git 정보가 표시되는걸 확인할 수 있다.
- 더 많은 정보를 보려면 yml 파일에 추가하자 [application.yml]
management: ... info: ... git: enabled: true mode: full # 기본이 simple 모드이므로 full 변경
- 더 많은 정보를 보려면 yml 파일에 추가하자 [application.yml]
- Build Info Endpoint
- 필수 파일인 build-info.properties 생성이 필요하다. 해당 파일을 자동으로 생성되게끔 설정을 추가해보자.
- 설정 (https://docs.spring.io/spring-boot/docs/3.0.4/reference/html/howto.html#howto.build.generate-info)
- maven (spring boot 버전하고 플러그인 버전하고 맞춰주자)
[pom.xml]... <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.0.4</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ...
- gradle
[build.gradle]springBoot { buildInfo() }
- clean 후 빌드를 완료하면 /build/resources/main/META_INF/build-info.properties 파일이 생성된 걸 확인할 수 있다. 그 다음 서버를 구동하면 /actuator/info 에 build 가 추가된 걸 확인할 수 있다.
- maven (spring boot 버전하고 플러그인 버전하고 맞춰주자)
- Custom Info Endpoint (하드코딩인경우 .yml 에 선언하는 방식이 더 유용하다. 해당 방식은 로직이 들어가야 될 경우에 사용)
참고
- https://semtul79.tistory.com/
- https://docs.spring.io/
- https://www.inflearn.com/course/spring-boot-actuator-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0/dashboard
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
Java ThreadLocal (0) | 2024.11.13 |
---|---|
Java Fork Join Pool 과 비동기 프로그래밍 (0) | 2024.11.08 |
Redis 성능 개선을 위한 GZIP 압축 로직을 적용시 Native OOM 이슈에 대한 분석 (0) | 2023.07.26 |
JDK8 에서 Perm 영역 삭제와 Metaspace 영역의 추가 (0) | 2023.07.17 |
JVM Heap 모니터링 및 Heap Dump 분석 (0) | 2023.03.09 |
Comments