от
Я пытаюсь программно прочитать Метры следующим образом: Получить реестр:
MeterRegistry registry = Metrics.globalRegistry.getRegistries().iterator().next();
Читать измерения:
    double systemCpuUsage = registry.get("system.cpu.usage").gauge().measure().iterator().next().getValue();
Проблема в том, что иногда я получаю
NaN
. Я читал об этом в документации: почему мой датчик сообщает NaN или исчезает? но я не уверен, что я буду делать. Кроме того, я читаю «встроенный» датчик привода Spring Boot (который представлен
management.metrics.enable.process.cpu.usage=true
), поэтому я не могу изменить его конструкцию.              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
Это связано с использованием микрометром «слабых эталонов» в манометрах. Так как датчик не содержит строгой ссылки на объект, когда объект собирается мусором, значение становится
NaN
. Если вы управляли созданием датчика, вы бы хотели сохранить ссылку самостоятельно или вызвать
strongReference(true)
для датчика. Если вы сталкиваетесь со встроенными датчиками Spring Boot, я считаю, что вы столкнулись с ошибкой. Что очень странно, так как связующее устройство
ProcessorMetrics
, которое создает этот датчик, имеет свою собственную опорную точку (хотя и может иметь значение null). Работаете ли вы в другой среде JVM или среде выполнения, когда видите
NaN
?     
0 голосов
от
В этом случае, поскольку вы используете «встроенную» метрику, вы можете переопределить
io.micrometer.core.instrument.binder.MeterBinder#bindTo
, переопределить
system.cpu.usage
с помощью пользовательской реализации MeterBinder и определить system.cpu.usage как (наряду с другими, которые вы используете)
Gauge.builder("system.cpu.usage", operatingSystemBean, x 

Обратитесь к io.micrometer.core.instrument.binder.system.ProcessorMetrics
, например, который определяет его на данный момент. Bean-компонент на ProcessorMetrics определен в
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration
, вам также нужно где-то определить свой bean-компонент. (или отметьте @Component) Если вы не хотите полагаться на какую-то предопределенную метрику по микрометру, например, для захвата какого-то нестандартного размера списка, это то, что вы можете сделать.
private static Map
...