Графит - собирать метрики только из активных экземпляров сервиса - PullRequest
0 голосов
/ 02 января 2019

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

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 Ответ

0 голосов
/ 05 января 2019

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

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

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

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

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

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

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

...