오늘은 저번에 알아봤던 spring boot 2.0 actuator의 내용이 조금 변경된 내용이나 추가할 내용이 있어 다시 포스팅을 작성한다. 마일스톤 버전으로 알아봤더니 몇가지 내용이 바뀌었다. 현재는 RC2 버전이니 이제는 바뀌지 않을테야.. 내일모레가 2.0인데 바뀌면…

prefix

마일스톤 버전에서는 http endpoint prefix가 기본적으로 /application이였지만 현재는 /actuator로 변경되었다. 하지만 기본적인 prefix이므로 언제든지 변경 가능하다.

management.endpoints.web.base-path=/application

위와 같이 작성했을 경우 다음과 같이 요청을 할 수 있다.

http http://localhost:8080/application

enabled

enabled 프로퍼티도 변경 되었다. 기존 마일스톤 버전에서는 endpoints.{id}.web.enabled=true 같이 사용했으나 이제는 management.endpoint.{id}.enabled=true 로 변경 되었다. endpoints.으로 시작하는 프로퍼티들은 모두 사용되지 않는다.
2.0에서 다음과 같이 사용해도 적용되지 않는다.

endpoints.env.enabled=false

다음과 같이 작성해야 Spring boot 가 적용 시킨다.

management.endpoint.env.enabled=false

web 과 관련된 endpoint들은 몇가지를 제외하고 모두 disabled되어 있다. info, health를 제외하고는 모두 disabled 처리 되어있다. 아마 각 정보들은 외부의 노출 시킬 필요가 없으니 disabled 처리 되어진 것으로 보인다. 만약 각 다른 정보들을 enabled 시키고 싶다면 다음과 같이 처리하면 안된다.

management.endpoint.env.enabled=true

만약 위와 같이 처리한다해도 Spring boot actuator는 env endpoint를 활성화 하지 않는다. 정말로 활성화하고 싶다면 다음과 같이 처리해야 한다.

management.endpoints.web.exposure.include=health,info,env,metrics

위와 같이 management.endpoints.web.exposure.include 를 사용해서 활성화하고 싶은 endpoint들의 id를 작성해주면 된다. include는 포함하는 것이지만 management.endpoints.web.exposure.exclude를 사용해서 제외시킬 수 도 있다.

그래서 만약 다음과 같이 처리한다면 해당 endpoint를 제외 시킬 수 있다.

management.endpoints.web.exposure.include=health,info,env,metrics
management.endpoints.web.exposure.exclude=health

위와 같이 작성한다면 info,env,metrics 관련 endpoint만 활성화가 된다. 또한 모든 endpoint들을 활성화 하고 싶다면 굳이 모든 id를 작성할 필요 없이 다음같이 작성하면 모든 enpoint들이 활성화가 된다.

management.endpoints.web.exposure.include=*

참고로 jmx는 모두 활성화 되어 있다. 기본값이 다음과 같다.

management.endpoints.jmx.exposure.include=*

path-mapping

기존의 2.0 이전에는 endpoint들의 path를 다음과 같이 변경하였다.

endpoints.info.path=/foo

spring boot 2.0 부터는 조금 더 길어졌다. management.endpoints.web.path-mapping.{id}=/bar 만약 info의 endpoint url을 변경하고 싶다면 다음과 같이 작성해야 한다.

management.endpoints.web.path-mapping.info=/bar

어노테이션

기존 포스팅에서 설명한 @WebEndpointExtension 어노테이션은 사라졌고 @EndpointWebExtension 으로 변경 되었다.

그리고 저번에 언급했던 @ConditionalOnEnabledEndpoint, @ReadOperation, @WriteOperation, @DeleteOperation 들은 동일하게 존재하고 하는일도 기존의 설명했던 내용과 동일하다.

어노테이션 @WebEndpoint, @JmxEndpoint이 새로 추가 되었다. @WebEndpoint 어노테이션을 사용할 경우에는 web에서만 노출이 되고 @JmxEndpoint 어노테이션을 사용할 경우에는 jmx에만 노출이 된다.

@WebEndpoint(id = "hello")
@Component
public class HelloWebEndpoint {

  @ReadOperation
  public String hello() {
    return "hello world";
  }
}

위와 같이 작성하면 web에서만 hello endpoint가 노출 된다.

@JmxEndpoint(id = "hello")
@Component
public class HelloJmxEndpoint {

  @ReadOperation
  public String hello() {
    return "hello world";
  }
}

만약 위와 같이 작성한다면 web에는 노출되지 않고 jmx에만 노출 된다. 만약 jmx web 모두 노출 시키고 싶다면 다음과 같이 작성하면 된다.

@Endpoint(id = "hello")
@Component
public class HelloEndpoint {

  @ReadOperation
  public String hello() {
    return "hello world";
  }
}

@Endpoint를 이용해 코드를 작성하면 web, jmx 모두 노출 된다.

micrometer

spring boot 2.0 actuator 에서 micrometer Metrics 라이브러리를 지원해준다. 필자도 spring boot 2.0을 보다가 알게 되어서 아직 micrometer에 대해서 모른다. 나중에 필자가 관심이 가게 된다면 살펴보도록 하고 일단 spring boot 2.0에서 지원을 해준다고만 알자.

오늘은 이렇게 spring boot 2.0 actuator 의 변경된 사항을 알아봤다. 여러모로 spring boot 2.0 actuator는 기존 버전의 비해 많이 변경되었다. 우리가 사용할 때는 변경된 부분이 없어 보이지만 실제 개발한 소스 코드는 엄청나게 변경이 많이 된 듯 싶다.

곧 릴리즈 될 2.0을 기대하면서 오늘 포스팅은 여기서 마치겠다.