Ответ
NaN (Not a Number) в системах мониторинга, таких как Prometheus, означает, что для данной метрики в указанный момент времени нет числового значения.
Основные причины появления NaN:
- Источник метрик недоступен: Целевой экспортер (например,
node_exporter) или приложение не отвечает, поэтому сбор данных не произошёл. - Метрика перестала существовать: Сервис, который публиковал метрику, был удалён или перезапущен с другим набором меток, и старая временная серия (time series) завершилась.
- Ошибка в запросе (PromQL): Арифметическая операция, не имеющая математического смысла (например, деление на ноль или логарифм от отрицательного числа).
# Пример: если `http_requests_total` отсутствует, результат будет NaN rate(http_requests_total[5m]) - Пропуск данных: Проблемы с сетью или кратковременная высокая нагрузка на Prometheus могли привести к пропуску сбора данных за интервал.
Как диагностировать:
# 1. Проверить, «жив» ли target (экспортер)
curl -s http://<exporter-ip>:9100/metrics | head -5
# 2. В Prometheus UI проверить статус target на странице /targets
# 3. Проверить логи экспортера на предмет ошибок
journalctl -u node_exporter -f
# 4. Использовать запрос, устойчивый к отсутствию данных
up{job="node-exporter"} == 0 # Покажет, какие инстансы недоступны
Важно: NaN распространяется через арифметические операции. В дашбордах и алертах его нужно обрабатывать функциями вроде clamp_max(), or или default.
# Замена NaN на 0 в запросе для графика
(rate(http_requests_total[5m]) > 0) or vector(0)