Постановка проблемы: Отображать задержку, частоту появления ошибок, пропускную способность, количество повторных попыток (для сохранения в 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. Нужна помощь с вышеуказанными запросами, пожалуйста, укажите, требуется ли какая-либо другая информация.