Метрики вычислительного мониторинга Spring-Boot Micro-Service в Java - PullRequest
0 голосов
/ 13 апреля 2020

Постановка проблемы: Отображать задержку, частоту появления ошибок, пропускную способность, количество повторных попыток (для сохранения в SQL сбоях БД и публикациях Kafka) и Unsuccessful-Retries приложения Spring Boot как ManagedBeans на JConsole. В этом приложении нет конечных точек REST. Это чисто асинхронно управляемый событиями через Kafka (использование Spring StreamListener).

Я не могу использовать Prometheus из-за проблем с лицензированием на уровне производства.

Мой подход : создан класс MetricsBean (реализующий интерфейс), в основном содержащий POJO для Метрики выше:

import org.springframework.context.annotation.Lazy;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;

@Lazy(false)
@ManagedResource
public class ConfigMBean implements IConfigMBean {

    private Double latency;
    private Double errorRate;
    private Double throughput;
    private Long retryCount;
    private Long unsuccessfulRetries;

    public GatewayConfigMBean(Double latency, Double errorRate, Double throughput, Long retryCount,
            Long unsuccessfulRetries) {
        super();
        this.latency = latency;
        this.errorRate = errorRate;
        this.throughput = throughput;
        this.retryCount = retryCount;
        this.unsuccessfulRetries = unsuccessfulRetries;
    }

    public GatewayConfigMBean() {
    }

    @ManagedAttribute
    @Override
    public Double getLatency() {
        return latency;
    }

    @ManagedAttribute
    @Override
    public Double getErrorRate() {
        return errorRate;
    }

    @ManagedAttribute
    @Override
    public Double getThroughput() {
        return throughput;
    }

    @ManagedAttribute
    @Override
    public Long getRetryCount() {
        return retryCount;
    }

    @ManagedAttribute
    @Override
    public Long getUnsuccessfulRetries() {
        return unsuccessfulRetries;
    }

    @ManagedOperation
    @Override
    public String showMetrics() {
        StringBuilder builder = new StringBuilder();
        builder.append("GatewayConfigMBean [errorRate=").append(errorRate).append(", latency=").append(latency)
                .append(", retryCount=").append(retryCount).append(", throughput=").append(throughput)
                .append(", unsuccessfulRetries=").append(unsuccessfulRetries).append("]");
        return builder.toString();
    }

}

Затем я выставил этот Бин в классе Config:

@Bean("My_Microservice_Name")
    public ConfigMBean configMBean () {
        return new ConfigMBean ();
}

Мне удалось увидеть My_Microservice_Name на вкладке JConsole MBeans, но как и ожидалось, все значения были нулевыми.

Вопрос: Как использовать Spring Micrometer, чтобы каждому метрике были назначены правильные значения? Также, если мне нужно использовать какой-то AOP для получения этих метрик, как мне включить это в мой код?

Я искал по inte rnet и нашел несколько совпадений:

    import io.micrometer.core.instrument.Counter;
    import io.micrometer.core.instrument.Metrics;

    private Counter counter = Metrics.counter("ErrorCount");
    counter.increment();

    private Timer timer = Metrics.timer("Latency");
    // Assume startTime was declared earlier
    timer.record(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);

Но не знаете, как получить другие метрики и установить эти значения в класс ConfigMBean? Предположим, что все зависимости доступны для использования в Spring. Нужна помощь с вышеуказанными запросами, пожалуйста, укажите, требуется ли какая-либо другая информация.

...