Графит - собирать метрики только из активных экземпляров сервиса
Допустим, мой весенний микросервис обрабатывает данные. Каждый раз, когда происходит успешное событие обработки, для метрик я обновляю счетчик микрометров. Это зарегистрировано в Реестре Графита.
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");
Общие теги определены на уровне реестра, и к каждой метрике, связанной с этим реестром, будут добавлены общие теги.
И для мертвой или живой ситуации: метрика была выдвинута, когда экземпляр был жив. Поэтому, если вы хотите узнать, сколько раз выполнялся какой-либо шаг, вам нужно учесть это значение.
Для получения данных из активных экземпляров используйте фильтр времени. Это вернет данные, выдвинутые экземплярами, которые были живы в течение этого времени (Почему? Потому что мертвые экземпляры не выдвигают метрики).