Я отправляю с внешнего клиента метрик-микросервису JSON со следующими данными:
{
totalTimeOnTheNetwork: number;
timeElasticsearch: number;
isSuccessful: boolean;
}
Метрика-микросервис в настоящее время обрабатывает данные следующим образом:
@AllArgsConstructor
@Service
public class ClientMetricsService {
@Autowired
MeterRegistry registry; // abstract class, SimpleMeterRegistry gets injected
public void metrics(final MetricsProperty metrics) {
final long networkTime = metrics.getTotalTime() - metrics.getElasticTime();
registry.timer(ELASTIC_TIME_LABEL).record(metrics.getElasticTime(), TimeUnit.MILLISECONDS);
registry.timer(TOTAL_TIME_LABEL).record(metrics.getTotalTime(), TimeUnit.MILLISECONDS);
registry.timer(NETWORK_TIME_LABEL).record(networkTime, TimeUnit.MILLISECONDS);
}
}
Как видите, я делаю новую метрику для каждого временного интервала.Мне было интересно, могу ли я поместить все интервалы в одну метрику?Было бы замечательно, если бы мне не приходилось рассчитывать сетевое время на метрике-микросервисе, а скорее в Grafana.
Кроме того, могу ли я поместить тег успеха / неудачи в Registry.timer?Я предполагаю, что мне нужно использовать timer.builder при каждом запросе, например, так:
Timer timer = Timer
.builder("my.timer")
.description("a description of what this timer does") // optional
.tags("region", "test") // optional
.register(registry);
Это типичный способ сделать это (например, создать новый таймер для каждого HTTP-запроса и связать его с реестром) или таймер должен быть получен из MeterRegistry, как в моей текущей версии?
Или вы бы использовали другую метрику для регистрации успеха / неудачи?В будущем, вместо логического значения, метрика может измениться, например, на http-код ошибки, поэтому я не уверен, как реализовать его в понятном виде