Я пытаюсь опубликовать sh количество событий, которые обрабатывает мое приложение. Вот код, который у меня есть на приемном конце:
public void process(List<String> batch) {
logger.info ("Processing batch of size " + batch.size())
metrics.incrementCounter(MetricsType.CONSUMER_TOTAL_PROCESSED, batch.size)
}
Класс Metrics:
public class Metrics {
private static final Map<MetricsType, Counter> COUNTER_MAP = new ConcurrentHashMap<>();
public Metrics(
@Autowired MeterRegistry meterRegistry
) {
COUNTER_MAP.put(
MetricsType.CONSUMER_TOTAL_PROCESSED,
Counter.builder("CONSUMER_TOTAL_PROCESSED").register(meterRegistry)
);
COUNTER_MAP.put(
MetricsType.CONSUMER_DUPLICATE_PROCESSED,
Counter.builder("CONSUMER_DUPLICATE_PROCESSED").register(meterRegistry)
);
}
public void increment(MetricsType metricsType, int size) {
COUNTER_MAP.get(metricsType).increment(size);
}
}
Перечисление MetricsType
содержит все типы счетчиков.
Метод process
может быть вызван 16 потоками в любое время. Проблема, с которой я сталкиваюсь, заключается в том, что регистратор, который печатает счетчик, и общий счетчик, указанный в графане, отключены.
Нужно ли синхронизировать каждый раз, когда я увеличиваю счетчик?
Редактировать - я имею в виду, что отсчет отключен, если есть два журнала с размером 200, тогда графана должна сообщить общий счетчик 400. Я проверяю это, используя временной интервал 2 часа, я извлекаю все размеры из журналов и добавьте их.
Если вы наткнулись на это и увидите разницу между двумя источниками, пожалуйста, проверьте, какое максимальное количество точек данных в Grafana, это было реальной проблемой, почему я думал, что счетчики не могут быть поточно-ориентированными. ,