SpringBoot 프로젝트 건강검진 및 모니터링

Spring Boot의 가장 주요한 특징은 AutoConfig(자동 구성)입니다. 우리 사용자들에게는 다양한 starter가 있습니다.
Spring Boot-Actuator도 starter를 제공하여 자동으로 설정합니다. 사용에 있어서 starter를 의존에 추가하고 프로젝트를 시작하면 됩니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
일반 Endpoint
Spring Boot-actuator는 많은 유용한 EndPoint를 제공하고 Spring Boot 응용 프로그램에 다양한 모니터링을 제공합니다. 다음은 제가 자주 사용하는 EndPoint를 설명합니다.
/health 응용 프로그램의 건강 상태
/configprops는 Spring Boot이 발표될 때 단독 Jar 패키지이기 때문에 프로필이 포함될 수 있습니다. 프로필을 확인해야 할 때 ConfigpropsEndPoint를 사용하여 프로필이 정확한지 확인할 수 있습니다.
/trace 최근 몇 차례의 http 요청 정보
HealthEndPoint
http://localhost:8088/health을 방문하면 HealthEndPoint가 디스크 검사와 데이터베이스 검사를 포함하는 기본 모니터링 결과를 제공합니다.

{
 "status": "UP",
 "diskSpace": {
  "status": "UP",
  "total": 398458875904,
  "free": 315106918400,
  "threshold": 10485760
 },
 "db": {
  "status": "UP",
  "database": "MySQL",
  "hello": 1
 }
}
사실 Spring Boot-actuator 원본을 보면 Health EndPoint가 제공하는 정보는 여기에 국한되지 않는다는 것을 알 수 있습니다, org.springframework.boot.actuate.health 가방을 싸면 Elasticsearch Health Indicator, Redis Health Indicator, Rabbit Health Indicator 등을 발견할 수 있습니다.
즉, HealthEndPoint는 ES, Redis 등 구성 요소의 건강 정보를 제공합니다.
사용자 지정 Indicator 확장 HealthEndPoint
원본 코드를 보면 디스크와 데이터베이스 건강 정보는 바로 DiskSpaceHealthIndicator, DataSourceHealthIndicator로 이루어진다. 우리가 사용자 정의한 구성 요소를 감시할 때 우리는 하나의 Indicator를 실현할 수 있다.

@Component
public class User implements HealthIndicator {
 /**
  * user   : http://localhost:8088/health
  *
  * @return  Health 
  */
 @Override
 public Health health() {
  return new Health.Builder().withDetail("usercount", 10) // 
    .withDetail("userstatus", "up").up().build();
 }
}
이 때 다시 방문합니다. http://localhost:8088/health 이 때 돌아온 결과는 다음과 같습니다. 사용자 정의 User 건강 정보를 포함하고 있습니다.

{
 "status": "UP",
 "user": {
  "status": "UP",
  "usercount": 10,
  "userstatus": "up"
 },
 "diskSpace": {
  "status": "UP",
  "total": 398458875904,
  "free": 315097989120,
  "threshold": 10485760
 },
 "db": {
  "status": "UP",
  "database": "MySQL",
  "hello": 1
 }
}
EndPoint 사용자 정의
사실 HealthEndPoint를 확장하여 건강검진을 추가하는 것 외에도 EndPoint를 정의하여 프로그램이 실행될 때 정보를 표시할 수 있습니다.

@Configuration
public class EndPointAutoConfig {
 @Bean
 public Endpoint<Map<String, Object>> customEndPoint() {
  return new SystemEndPoint();
 }
}
@ConfigurationProperties(prefix="endpoints.customsystem")
public class SystemEndPoint extends AbstractEndpoint<Map<String, Object>> {
 public SystemEndPoint(){
  super("customsystem");
 }
 @Override
 public Map<String, Object> invoke() {
  Map<String,Object> result= new HashMap<>();
  Map<String, String> map = System.getenv();
  result.put("username",map.get("USERNAME"));
  result.put("computername",map.get("COMPUTERNAME"));
  result.put("userdomain",map.get("USERDOMAIN"));
  return result;
 }
}
http://localhost:8088/customsystem에 액세스하여 사용자 정의 EndPoint를 확인하면 다음과 같은 결과가 표시됩니다.

{
 "username": "xxx",
 "userdomain": "DESKTOP-6EAN1H4",
 "computername": "DESKTOP-6EAN1H4"
}
Spring Boot 응용 프로그램에 actuator를 추가한 후 원하는 health 인터페이스 반환 결과는 다음과 같습니다.

{
 status: "UP",
 diskSpace: 
 {
 status: "UP",
 total: 250182889472,
 free: 31169568768,
 threshold: 10485760
 },
 db: 
 {
 status: "UP",
 database: "H2",
 hello: 1
 }
}
status만 돌아왔다면

{
 status: "UP"
}
새로운 구성을 적용하기 위해 yml 프로필을 예로 들면 다음과 같은 설정을 추가해야 합니다.

management:
 security:
 enabled: false
endpoints:
 health:
 sensitive: false

management.endpoint.health.show-details=always
총결산
위에서 말한 것은 편집자가 여러분께 소개한 SpringBoot의 프로젝트 건강 검사와 모니터링을 실현하는 것입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기