Метрики
Что такое метрики в Astra Monitoring?
Метрика — это числовое значение, характеризующее состояние системы, приложения или оборудования в определенный момент времени. В Astra Monitoring используется формат Prometheus, который позволяет собирать, хранить и анализировать временные ряды данных.
Основные понятия
Метрика (Metric) — именованное значение (например, cpu_usage, memory_free).
Лейбл (Label) — дополнительная метаинформация (например, host=»server1», service=»nginx»).
Таймстамп (Timestamp) — временная отметка.
Значение (Value) — числовые данные (целые/дробные числа).
Как формируются метрики в Prometheus-формате?
Метрика записывается в виде:
<имя_метрики>{<лейбл1>=<значение>, <лейбл2>=<значение>} <значение>
При сборе метрики к ней добавляется timestamp. В базе данных метрика хранится в таком виде:
<имя_метрики>{<лейбл1>=<значение>, <лейбл2>=<значение>} <значение> <таймстамп>
Когда и где добавляется таймстамп к метрикам?
В системе мониторинга Astra Monitoring, работающей с форматом Prometheus, применяется следующий принцип обработки временных меток:
На уровне экспортера
Экспортеры не добавляют таймстамп при предоставлении метрик
Пример сырых данных от node_exporter:
node_cpu_seconds_total{cpu="0",mode="idle"} 123456.78
node_memory_free_bytes 8589934592
Формат: <имя_метрики>{лейблы} значение
На уровне Prometheus-сервера
Таймстамп добавляется в момент сбора метрики сервером Prometheus
Временная метка соответствует моменту scrape’а
Хранится вместе с метрикой в базе данных временных рядов
Формат хранения метрик с таймстампом
В базе данных каждая запись содержит:
Имя метрики
Набор лейблов
Значение
Таймстамп (в Unix-формате, наносекунды)
Пример полной записи в хранилище:
{
"metric": {
"__name__": "http_requests_total",
"method": "GET",
"handler": "/api"
},
"values": [1500],
"timestamps": [1672531200000000000]
}
Особенности работы с таймстампами
Как правило, экспортер не предоставляет таймстамп, в таком случае используется время scrape’а агентом
Проблемы рассинхронизации
Ситуация |
Последствия |
Решение |
---|---|---|
Задержка сбора данных |
Метрики с неправильным временем |
Настроить scrape_timeout |
Разные часы на серверах |
Искажение временных рядов |
Использовать NTP на всех узлах |
Примеры метрик
Простая метрика (без лейблов)
cpu_temperature 65.3
Метрика с лейблами
http_requests_total{method="GET", endpoint="/api/users", status="200"} 1500
Best Practices работы с метриками
Именование метрик:
Используется snake_case (cpu_usage, а не cpuUsage).
Начинается с имени сущности (node_memory_free, а не просто memory_free).
Лейблы:
Не рекомендуется использовать постоянно меняющиеся лейблы (слишком много лейблов = нагрузка на БД).
Используйте лейблы для условно динамических параметров (ID пользователя, URL).
Частота записи:
Оптимально: 15-60 секунд (чаще — нагрузка, реже — потеря детализации).
Типы метрик:
Counter (монотонно растет, например, requests_total).
Gauge (может увеличиваться/уменьшаться, например, cpu_usage).
Histogram и Summary (для распределений, например, request_duration_seconds).
Нюансы хранения метрик в БД временных рядов
Особенности работы с данными
Сжатие данных: Старые метрики автоматически агрегируются (например, 1 точка в день вместо 1440).
Retention Policy: Данные хранятся ограниченное время (можно настроить).
Индексирование: Лейблы ускоряют поиск, но увеличивают объем БД.
Оптимальные стратегии
Для долгосрочного хранения используйте downsampling (агрегацию старых данных).
Избегайте «мусорных» метрик (например, debug_info), которые не используются.
Настройте алерты на аномалии (rate(http_errors[5m]) > 0.1).