Регистрация состояния работоспособности Spring Boot Actuator в файле журнала приложения - PullRequest
1 голос
/ 08 октября 2019

В настоящее время мы используем привод весенней загрузки vr 1.5.10 , и мы можем получить доступ к нашей странице здоровья с конечной точкой / health . Но при доступе к нашей конечной точке работоспособности нам необходимо также регистрировать это состояние работоспособности в файле журнала нашего приложения, чтобы позже мы могли создать предупреждение наблюдателя Kibana на основе этого состояния.

Я видел, что мы можем расширить конечную точку работоспособности с помощью " @ EndpointWebExtension " и зарегистрировать там состояние, как предложено в здесь . Но похоже, что это не поддерживается vr 1.5.10.

Любое направление будет по-настоящему оценено!

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Spring вставит список всех компонентов, которые реализуют определенный интерфейс. Например: private List<HealthIndicator> healthIndicatorList будет содержать каждый класс, который реализует класс HealthIndicator.

Вы можете реализовать класс HealthIndicator в своем собственном компоненте, а затем вызвать метод health() для каждого члена healthIndicatorListи зарегистрируйте результат.

Конечно, не рекурсивно вызывайте метод health() вашего индикатора работоспособности. Вот некоторый код:

@Component
public class LoggingHealthIndicator implements HealthIndicator
{
    @Autowired
    private List<HealthIndicator> healthIndicatorList

    @Override
    public Health health()
    {
        for (final HealthIndicator current : healthIndicatorList)
        {
            if (current != this)
            {
                // assumes SLF4j
                logger.log("blam message; {}", current.health());
            }
        }       
        return Health.up().build();
    }
}

Этот код может не работать, поскольку ваш класс требует всех реализаций HealthIndictor и сам HealthIndicator.

Возможно, вам потребуется добавить метод @PostConstruct и получитьсписок компонентов HealthIndictor самостоятельно.

1 голос
/ 08 октября 2019

Вы можете написать свой собственный HealthAggregator, установить в нем агрегатор Spring Spring по умолчанию и использовать его.

public class OwnHealthAggregator implements HealthAggregator {

private final HealthAggregator defaultHealth;

public OwnHealthAggregator(HealthAggregator defaultHealth) {
    this.defaultHealth = defaultHealth;
}

@Override
public Health aggregate(Map<String, Health> healths) {
    Health result = this.defaultHealth.aggregate(healths);
    // LOG Result here
    return result;
}

}

Определение компонента и использование компонента по умолчанию:

@Bean
public HealthAggregator health() {
    return new OwnHealthAggregator(new OrderedHealthAggregator());
}

Не по теме, когда вы используете привод в этой версии, вы должны быть осторожны, так как многие конечные точки включеныпо умолчанию (например, / beans, / env, /dump).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...