Графит - собирать метрики только из активных экземпляров сервиса

Допустим, мой весенний микросервис обрабатывает данные. Каждый раз, когда происходит успешное событие обработки, для метрик я обновляю счетчик микрометров. Это зарегистрировано в Реестре Графита.

registry = new GraphiteMeterRegistry(new GraphiteConfiguration(), Clock.SYSTEM, HierarchicalNameMapper.DEFAULT);
Counter counter = Counter.builder("process").tag("status","success").register(registry);

Пока это звучит хорошо. Но что, если мне нужно создать и развернуть несколько экземпляров моего сервиса?

Как получить суммарное количество всех успешных событий из всех экземпляров?

Чтобы проиллюстрировать мой случай далее, я записываю значение counter.count() для каждого приращения. Вот что я вижу ->

<Instance 1> <time> <package-name> Count :122
<Instance 2> <time> <package-name> Count :53

Поэтому, когда я запускаю графитовый запрос на графане -

process.status.success.count

Я стремлюсь получить случайный счет в любом из этих случаев.

Мне нужен запрос типа -

process.service-instance.status.success.count 

так что в конце я могу запустить функцию summaze().

Обновление Теперь я могу получать данные из всех экземпляров, получая идентификатор экземпляра службы. Но это создает новую проблему - поскольку я перезагружаю свои сервисы снова и снова, и мой сервисный идентификатор меняется каждый раз, как я получаю данные из ТОЛЬКО АКТИВНЫХ сервисов?

Поскольку процесс.*. Status.success.count представляет собой совокупное количество ВСЕХ сервисов - мертвых или живых

1 ответ

Никогда не используйте идентификаторы экземпляров для агрегации. Когда экземпляры перезапускаются, идентификаторы экземпляров изменяются. (Используйте идентификатор экземпляра только для целей ведения журнала / отладки / ведения записей.)

Используйте сервис-идентификатор для агрегирования.

Для микрометра вы можете добавить имя сервиса в общие теги.

registry.config().commonTags("service", "xyz-service");

Общие теги определены на уровне реестра, и к каждой метрике, связанной с этим реестром, будут добавлены общие теги.

И для мертвой или живой ситуации: метрика была выдвинута, когда экземпляр был жив. Поэтому, если вы хотите узнать, сколько раз выполнялся какой-либо шаг, вам нужно учесть это значение.

Для получения данных из активных экземпляров используйте фильтр времени. Это вернет данные, выдвинутые экземплярами, которые были живы в течение этого времени (Почему? Потому что мертвые экземпляры не выдвигают метрики).

Другие вопросы по тегам