kok202
스프링 부트 강의 정리 (35~37 : Actuator)

2019. 5. 25. 18:03[공부] 영상/스프링 부트 강의

Actuator

production 에서 App의 모니터링 기능을 제공한다.

Auditing, health, metric 등을 자동으로 감시할 수 있도록 해준다.

 

 

 

 

 

Spring security 를 사용할 경우 Actuator 의 접근 경로를 풀어주도록한다.

webSecurity
    .ignoring()
    .requestMatchers(EndpointRequest.toAnyEndpoint())

 

 

 

 

 

Endpoint : 모니터링 하는 대상

Actuator를 Remote 로 모니터링 할 때 두가지 방법이 존재한다.

방법 1. JMX

방법 2. Http (web)

 

 

 

 

 

Http web을 통해 endpoint 모니터링 하기

/actuator
web을 통해 접근 가능한 actuator endpoint 목록 열람
/actuator/health Healthcheck
/actuator/beans application context안의 bean 들을 열람
/actuator/heapdump heap dump 열람
/actuator/threaddumbp thread dump 열람
/actuator/logger logger 열람
... ...
이외의 endpoint 가 궁금하다면 : https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html#production-ready-endpoints

Actuator를 가져오면 기본적으로 대부분의 endpoint가 활성화 되어있다.

but. endpoint는 민감한 정보를 노출하기 때문에 health와 info 외에 web으로의 노출은 활성화 되어있지 않다.

즉 예를들어 /actuator/beans 는 web을 통해서 열람할 수 없다. 모든 endpoint 를 web에서 활성화 시키고 싶다면 property를 통해 활성화 해주면된다.

management.endpoints.web.exposure.include=*

actuator 에 접근하는 base path(/actuator) 를 변경하고 싶으면 아래와 같이 property를 주면된다.

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

actuator 에 접근하는 port 를 변경하고 싶으면 아래와 같이 property를 주면된다.

management.server.port=9090

health 정보를 좀 더 디테일 하게 얻고 싶다면 아래 property를 주면 된다.

management.endpoints.health.show-details=always

 

 

 

 

 

Custom 한 Endpoint를 만들 수도 있다.

ex. /actuator/myEndpoint 를 만들 수 있다.

@Component
@Endpoint(id="myEndpoint")
public class MyEndpoint{
    private String value="Hello world";
    
    @ReadOperation
    public String getValue(){
        return value;
    }
    
    @WriteOperation
    public void setValue(String value){
        this.value = value;
    }
    
    @DeleteOpertation
    public void deleteValue(){
        this.value = null;
    }
}

 

 

 

 

 

Health check 할 때 원하는 데이터의 health 를 볼 수 있도록 만들기

@Component
public class MyHealthIndicator implements HealthIndicator{
    @Autowired
    MyEndpoint myEndpoint;
    
    @Override
    public Health health(){
        if(!myEndpoint.getValue().equals("Hello world")){
            return Health.down().withDetail("value was changed").build();
         else
             return Health.up().build();
    }
}

/actuator/health 에 들어가면 myEndpoint 에대한 health 정보가 나오는 것을 확인 할 수 있다.

 

 

 

 


Loggers

런타임 중에 서버에 찍히는 로깅 레벨을 바꿀 수 있다. 예를들어 서버에 아무런 설정도 하지 않았다면 서버는 INFO 레벨의 로깅 정보를 찍어내고 있다. 이러한 서버에 찍히는 로깅 정보를 읽어보고 싶으면 /actuator/loggers 엔드포인트에 접근하면 확인 할 수 있다.

Acuator remote 를 통해 이러한 로깅 레벨을 변경할 수 있다.

curl -XPOST http://localhost:8080/actuator/loggers/org.springframework.web 
     -H 'Content-Type: application/json; charset=utf-8' 
     -d '{ "configuredLevel":"debug" }'

서버에 찍히는 로깅 레벨이 info 에서 debug로 바뀌게 된다.

 

 

 

 

SignalFX : Actuator를 통해 모니터링을 gui 로 할 수 있도록 도와주는 모니터링 시스템 (like influx)

1. signalFX에 가입하여 Access token을 얻는다.

2. 스프링 부트에 signalFX 에 의존성을 걸어준다.

3. 스프링 부트에 signalFX 설정을 해준다.

management.metrics.export.signalfx.access-token=YOUR_ACCESS_TOKEN
management.metrics.export.signalfx.step=30s

30 초마다 actuator 정보를 signalFX로 보낸다.

signalFX는 이를 바탕으로 그래프와 같은 보드를 그려준다.

 

컨트롤러나 메소드에 @Timed 를 달아주면 metric 정보를 측정할 때 해당 컨트롤러, 메소드의 시간을 측정한다.