7.04. Справочник по Prometheus
Справочник по Prometheus
Prometheus — это система мониторинга и база данных временных рядов с открытым исходным кодом, ориентированная на надёжность, масштабируемость и гибкость. Она предоставляет мощный язык запросов PromQL, поддерживает многомерную модель данных и включает встроенные механизмы алертинга и обнаружения целей. Ниже приведён подробный справочник по всем ключевым элементам Prometheus: конфигурации, метрикам, функциям, параметрам, типам данных и настройкам.
Модель данных
Prometheus хранит все данные как временные ряды. Каждый временной ряд состоит из:
- Метрического имени — основной идентификатор, например
http_requests_total. - Набора меток (labels) — пар «ключ=значение», добавляющих измерения к метрике, например
method="POST",status="200".
Полное имя временного ряда формируется как метрика{метка1="значение1", метка2="значение2"}.
Пример:
http_requests_total{method="POST", handler="/api/v1", status="200"}
Метки позволяют фильтровать, группировать и агрегировать данные по произвольным измерениям.
Типы метрик
Prometheus поддерживает четыре основных типа метрик, определяемых на стороне экспортера или приложения:
Counter (счётчик)
- Представляет монотонно возрастающее значение.
- Используется для подсчёта количества событий: запросов, ошибок, завершённых задач.
- Пример:
http_requests_total,errors_total.
Gauge (измеритель)
- Представляет значение, которое может произвольно расти и уменьшаться.
- Используется для измерения текущего состояния: температуры, использования памяти, числа активных соединений.
- Пример:
memory_usage_bytes,current_connections.
Histogram (гистограмма)
- Измеряет распределение значений (например, времени ответа).
- Автоматически создаёт несколько временных рядов:
_bucket{le="значение"}— количество наблюдений ≤ указанного значения._count— общее число наблюдений._sum— сумма всех наблюдений.
- Пример:
http_request_duration_seconds_bucket{le="0.5"}.
Summary (сводка)
- Похож на гистограмму, но вычисляет квантили на стороне клиента.
- Создаёт временные ряды:
_quantile{φ="0.95"}— значение, ниже которого находится 95% наблюдений._countи_sum— аналогично гистограмме.
- Используется реже, так как квантили не агрегируются между инстансами.
Конфигурация Prometheus
Основной файл конфигурации — prometheus.yml. Он использует формат YAML и содержит следующие корневые секции:
globalalertingrule_filesscrape_configsremote_writeremote_read
global
Задаёт глобальные параметры, применяемые ко всем остальным разделам.
Параметры:
scrape_interval: интервал по умолчанию между сборами метрик. Значение по умолчанию —1m.scrape_timeout: максимальное время ожидания ответа от цели. Значение по умолчанию —10s.evaluation_interval: интервал вычисления правил записи и алертов. Значение по умолчанию —1m.external_labels: метки, добавляемые ко всем временным рядам и алертам, отправляемым на внешние системы (например, Alertmanager или remote storage).
Пример:
global:
scrape_interval: 30s
scrape_timeout: 10s
evaluation_interval: 30s
external_labels:
monitor: "prod-cluster"
scrape_configs
Определяет цели для сбора метрик (scrape targets).
Основные параметры:
job_name: уникальное имя задания. Обязательное поле.scrape_interval,scrape_timeout: переопределяют глобальные значения.metrics_path: путь HTTP-эндпоинта, откуда берутся метрики. По умолчанию —/metrics.scheme: протокол (httpилиhttps). По умолчанию —http.static_configs: статический список целей.file_sd_configs: динамическое обнаружение через файлы.kubernetes_sd_configs,consul_sd_configsи другие: интеграции с системами обнаружения.relabel_configs: преобразование меток до сохранения.metric_relabel_configs: преобразование меток после получения метрик, но до сохранения в TSDB.
Пример static_configs:
scrape_configs:
- job_name: "node-exporter"
static_configs:
- targets: ["localhost:9100"]
relabel_configs
Используется для фильтрации, модификации или создания меток на основе исходных меток цели.
Доступные действия (action):
keep: оставить только совпадающие цели.drop: исключить совпадающие цели.replace: заменить значение метки (по умолчанию).labelmap: скопировать метки по шаблону.labeldrop,labelkeep: удалить или оставить указанные метки.
Пример:
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: "(.*):.*"
replacement: "$1"
Язык запросов PromQL
PromQL — это функциональный язык запросов, предназначенный для выборки и агрегации временных рядов.
Основные типы выражений:
- Instant vector — набор временных рядов с одним значением на момент времени.
- Range vector — набор временных рядов с массивом значений за интервал времени, например
[5m]. - Scalar — простое числовое значение.
- String — строковое значение (редко используется в практике).
Агрегационные операторы
Применяются к instant vector и возвращают новый instant vector.
sum,min,max,avg,stddev,stdvarcount,count_valuesbottomk,topkquantile
Синтаксис:
<aggr-op>([parameter,] <vector-expression>) [by|without (<label list>)]
Пример:
avg(http_requests_total) by (job, instance)
Бинарные операторы
Поддерживают арифметические, сравнительные и логические операции.
Арифметика: +, -, *, /, %, ^
Сравнение: ==, !=, >, <, >=, <=
Логика: and, or, unless
Режимы объединения:
on(<labels>)— совпадение только по указанным меткам.ignoring(<labels>)— игнорирование указанных меток при совпадении.group_left,group_right— для many-to-one и one-to-many соединений.
Пример:
rate(http_requests_total[5m]) / rate(http_requests_total{status=~"5.."}[5m])
Функции
Prometheus предоставляет более 60 встроенных функций.
Временные функции:
time()— текущая метка времени Unix.timestamp(v instant-vector)— метка времени последней точки вектора.day_of_month(),day_of_week(),days_in_month(),hour(),minute(),month(),year()
Диапазонные функции (принимают range vector):
rate(v range-vector)— средняя скорость роста counter’а в секунду.irate(v range-vector)— мгновенная скорость по двум последним точкам.increase(v range-vector)— прирост counter’а за интервал.delta(v range-vector)— разница между первой и последней точкой (для gauge).avg_over_time,min_over_time,max_over_time,sum_over_time,count_over_time,stddev_over_time,stdvar_over_time
Функции преобразования:
abs(),ceil(),floor(),round(),exp(),ln(),log2(),log10(),sqrt(),pow()clamp_min(v, min),clamp_max(v, max),clamp(v, min, max)sgn(),sort(),sort_desc()
Функции для работы с метками:
label_join(v, dst, sep, src_1, src_2, ...)label_replace(v, dst_label, replacement, src_label, regex)
Прочие:
vector(s scalar)— преобразует скаляр в instant vector без меток.scalar(v instant-vector)— преобразует вектор в скаляр (если один элемент).resets(v range-vector)— количество сбросов counter’а.changes(v range-vector)— количество изменений gauge.deriv(v range-vector)— производная временного ряда.predict_linear(v range-vector, t scalar)— линейная экстраполяция наtсекунд вперёд.
Правила (Rules)
Prometheus поддерживает два типа правил:
Recording rules
Создают новые временные ряды на основе выражений. Ускоряют сложные запросы.
Пример:
groups:
- name: http_rules
rules:
- record: job:http_requests:rate5m
expr: sum(rate(http_requests_total[5m])) by (job)
Alerting rules
Генерируют алерты при выполнении условий.
Пример:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m > 0.5
for: 10m
labels:
severity: warning
annotations:
summary: "High request latency on {{ $labels.job }}"
description: "{{ $labels.job }} has a mean latency above 0.5s for more than 10 minutes."
Ключевые поля:
for: длительность, в течение которой условие должно быть истинным, чтобы сработать алерт.labels: метки, добавляемые к алерту.annotations: информационные поля (не влияют на группировку).
Файл с правилами подключается через rule_files в основном конфиге:
rule_files:
- "rules/*.yml"
Alertmanager
Хотя Alertmanager — отдельный компонент, он тесно интегрирован с Prometheus.
Конфигурация Alertmanager определяет:
- Группировку алертов (
group_by) - Интервалы повторных уведомлений (
repeat_interval) - Маршрутизацию (
routes) - Получателей (
receivers) — email, Slack, PagerDuty и др.
Prometheus отправляет алерты в Alertmanager через секцию alerting:
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
Remote Storage
Prometheus может записывать и читать данные из внешних систем хранения.
remote_write
Отправка временных рядов в удалённую систему (Thanos, Cortex, VictoriaMetrics и др.).
Параметры:
url: адрес удалённого хранилища.write_relabel_configs: фильтрация перед отправкой.queue_config: настройки очереди (емкость, размер пакета, retry и т.д.).
remote_read
Чтение данных из удалённого хранилища при выполнении запросов.
HTTP API
Prometheus предоставляет RESTful API для программного доступа.
Основные эндпоинты:
/api/v1/query— мгновенный запрос./api/v1/query_range— диапазонный запрос./api/v1/series— поиск временных рядов по меткам./api/v1/labels— получение списка всех меток./api/v1/targets— информация о текущих целях сбора./api/v1/rules— текущие правила./api/v1/alerts— активные алерты.
Экспортёры и инструментарий
Prometheus не собирает метрики напрямую из большинства систем. Для этого используются экспортёры — промежуточные сервисы, преобразующие метрики в формат Prometheus.
Популярные экспортёры:
- Node Exporter — метрики хоста (CPU, память, диск, сеть).
- Blackbox Exporter — проверка доступности HTTP, TCP, ICMP.
- MySQL Exporter, PostgreSQL Exporter — метрики СУБД.
- cAdvisor — метрики контейнеров Docker.
- JMX Exporter — метрики Java-приложений.
Экспортёры предоставляют HTTP-эндпоинт /metrics в текстовом формате OpenMetrics.
Формат метрик
Текстовый формат метрик прост и читаем:
# HELP http_requests_total Total number of HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="POST",status="200"} 1027
http_requests_total{method="POST",status="400"} 3
# HELP— описание метрики.# TYPE— тип метрики (counter,gauge,histogram,summary).- Далее — строки значений с метками.
Параметры командной строки
Prometheus запускается как бинарный исполняемый файл с множеством флагов. Большинство значений можно задать через переменные окружения или в конфигурационном файле, но некоторые доступны только через CLI.
Основные флаги
--config.file: путь к основному файлу конфигурации (prometheus.ymlпо умолчанию).--web.listen-address: адрес и порт для HTTP-сервера (по умолчанию:9090).--web.config.file: путь к файлу с настройками TLS/HTTP Basic Auth (для безопасного доступа к UI/API).--storage.tsdb.path: директория хранения временных рядов (по умолчаниюdata/).--storage.tsdb.retention.time: срок хранения данных (например,15d,2y; по умолчанию15d).--storage.tsdb.retention.size: максимальный объём данных на диске (например,50GB; требует явного указания, не включено по умолчанию).--query.max-concurrency: максимальное число одновременных запросов (по умолчанию20).--query.timeout: максимальная длительность запроса (по умолчанию2m).--log.level: уровень логирования (debug,info,warn,error; по умолчаниюinfo).--log.format: формат логов (logfmtилиjson; по умолчаниюlogfmt).
Флаги для отладки и профилирования
--web.enable-lifecycle: включает эндпоинты/-/reloadи/-/quitдля управления процессом.--web.enable-admin-api: включает административные API (/api/v1/admin/tsdb/*), такие как очистка или удаление данных.--debug.dump-blocks: выводит информацию о блоках TSDB при старте.
Пример запуска:
prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=90d \
--web.listen-address=0.0.0.0:9090 \
--log.level=info
Настройки TSDB (Time Series Database)
Prometheus использует собственную базу данных временных рядов, оптимизированную под высокую плотность записи и эффективное сжатие.
Блоки данных
Данные хранятся в виде блоков — неизменяемых директорий, каждая из которых содержит:
chunks/— сырые данные метрик,index— индекс по меткам и временным рядам,meta.json— метаданные блока (временной диапазон, количество рядов и т.д.).
Блоки создаются каждые 2 часа. Старые блоки компактируются в более крупные (2h → 12h → 24h → ...), что ускоряет чтение.
WAL (Write-Ahead Log)
Все входящие образцы сначала записываются в WAL для обеспечения отказоустойчивости. При перезапуске Prometheus восстанавливает последние данные из WAL.
WAL хранится в поддиректории wal/ внутри tsdb.path.
Retention (срок хранения)
Поддерживается два режима:
- По времени:
--storage.tsdb.retention.time=30d - По объёму:
--storage.tsdb.retention.size=100GB
Если указаны оба, применяется более строгий (тот, который раньше приведёт к удалению данных).
Важно: размер retention влияет на потребление RAM и диска. Каждый активный временной ряд занимает ~1–2 КБ в памяти.
Head block и memory series
Текущие (ещё не записанные в блок) данные хранятся в памяти в структуре Head. Число активных рядов напрямую влияет на использование оперативной памяти.
Метрика prometheus_tsdb_head_series показывает текущее число активных временных рядов.
Безопасность
Prometheus по умолчанию не включает аутентификацию или шифрование. Для продакшена требуется дополнительная настройка.
TLS и HTTP Basic Auth
Используется файл, указываемый через --web.config.file. Пример содержимого:
tls_server_config:
cert_file: /etc/prometheus/cert.pem
key_file: /etc/prometheus/key.pem
basic_auth_users:
admin: $2y$10$... # хеш bcrypt
Хеш пароля генерируется утилитой htpasswd или через promtool basic-auth hash-password.
Защита scrape-эндпоинтов
Целевые сервисы должны защищать свои /metrics:
- Ограничивать доступ по IP или сети.
- Использовать токены или Basic Auth.
- Не выставлять чувствительные метрики (например, с персональными данными).
В scrape_configs можно указать учётные данные:
scrape_configs:
- job_name: "secure-app"
metrics_path: "/metrics"
scheme: "https"
basic_auth:
username: "monitor"
password: "secret"
static_configs:
- targets: ["app.example.com:8443"]
Административные API
Эндпоинты вроде /api/v1/admin/tsdb/delete_series позволяют удалять данные. Их следует отключать в продакшене или защищать строго.
Флаг --web.enable-admin-api включает эти функции.
Best Practices
Метрики
- Используйте
_totalдля counter’ов. - Избегайте высококардинальных меток (например,
user_id,request_id) — они взрывают число временных рядов. - Не используйте динамические значения в метках без ограничения уникальных комбинаций.
- Предпочитай histogram’ы summary’ам — они лучше агрегируются.
Конфигурация
- Выносите правила в отдельные файлы и подключайте через
rule_files. - Используйте
relabel_configsдля нормализации меток (например, приведение имён job’ов к единому виду). - Применяйте
metric_relabel_configsдля фильтрации ненужных метрик до записи в TSDB (экономия памяти и диска).
Пример фильтрации:
metric_relabel_configs:
- source_labels: [__name__]
regex: 'go_.*|process_.*'
action: drop
Производительность
- Ограничьте число активных временных рядов (< 1 млн на один инстанс — рекомендуемый предел).
- Используйте recording rules для предварительного агрегирования дорогих запросов.
- Не делайте запросы с большим шагом (
step) в Grafana — это создаёт нагрузку на CPU. - Настройте
remote_writeдля долгосрочного хранения и масштабирования.
Мониторинг самого Prometheus
Prometheus экспортирует собственные метрики:
up{job="..."}— доступность целей.prometheus_target_interval_length_seconds— реальный интервал сбора.prometheus_rule_evaluation_duration_seconds— время выполнения правил.prometheus_tsdb_wal_corruptions_total— ошибки WAL (должно быть 0).rate(prometheus_http_requests_total[5m])— нагрузка на HTTP API.
Рекомендуется мониторить эти метрики и настраивать алерты на аномалии.
Типичные ошибки
Counter reset
Counter может сбрасываться при перезапуске приложения. Используйте функцию rate() или increase(), которые корректно обрабатывают сбросы.
Неправильно:
http_requests_total
Правильно:
rate(http_requests_total[5m])
Использование irate() в графиках
irate() чувствителен к последним двум точкам и даёт «скачущие» графики. Используйте rate() для визуализации.
Группировка без by/without
Агрегация без указания меток приводит к потере контекста. Всегда указывайте, по каким меткам группировать.
Неправильный интервал в range vector
Интервал должен быть в 4–5 раз больше scrape_interval. Например, при scrape_interval=15s используйте [1m] или [2m].
Слишком короткий интервал ([15s]) может не содержать данных. Слишком длинный — теряет детализацию.
Отсутствие for в алертах
Без for алерт может «мигать» при кратковременных всплесках. Указывайте минимальную длительность состояния.
Функции PromQL
Prometheus предоставляет богатый набор встроенных функций, разделённых на категории. Ниже приведены все функции, доступные в актуальной версии (на момент 2026 года), с краткими пояснениями и примерами.
Функции для работы со временем
| Функция | Описание | Пример |
|---|---|---|
time() | Возвращает текущую метку времени Unix (в секундах). | time() > 1700000000 |
timestamp(v instant-vector) | Возвращает метку времени последней точки каждого ряда из вектора. | timestamp(up) |
day_of_month(v=vector(time()) instant-vector) | День месяца (1–31). | day_of_month() |
day_of_week(v=vector(time()) instant-vector) | День недели (0 — воскресенье, 6 — суббота). | day_of_week() |
days_in_month(v=vector(time()) instant-vector) | Количество дней в текущем месяце. | days_in_month() |
hour(v=vector(time()) instant-vector) | Час дня (0–23). | hour() |
minute(v=vector(time()) instant-vector) | Минута часа (0–59). | minute() |
month(v=vector(time()) instant-vector) | Месяц (1–12). | month() |
year(v=vector(time()) instant-vector) | Год. | year() |
Все временные функции принимают необязательный аргумент — instant vector. Если он не указан, используется
time().
Диапазонные функции (принимают range vector)
Эти функции работают только с диапазонными векторами, например metric[5m].
| Функция | Описание | Пример |
|---|---|---|
avg_over_time(v range-vector) | Среднее значение за интервал. | avg_over_time(cpu_usage[10m]) |
min_over_time(v range-vector) | Минимальное значение. | min_over_time(temperature[1h]) |
max_over_time(v range-vector) | Максимальное значение. | max_over_time(request_duration[5m]) |
sum_over_time(v range-vector) | Сумма значений. | sum_over_time(bytes_sent[1h]) |
count_over_time(v range-vector) | Количество точек. | count_over_time(up[1d]) |
stddev_over_time(v range-vector) | Стандартное отклонение. | stddev_over_time(latency[10m]) |
stdvar_over_time(v range-vector) | Дисперсия. | stdvar_over_time(latency[10m]) |
last_over_time(v range-vector) | Последнее значение в диапазоне. | last_over_time(metric[5m]) |
present_over_time(v range-vector) | Возвращает 1, если хотя бы одна точка существует. | present_over_time(metric[1m]) |
Функции для counter’ов
| Функция | Описание | Пример |
|---|---|---|
rate(v range-vector) | Средняя скорость роста counter’а в секунду (автоматически обрабатывает сбросы). | rate(http_requests_total[5m]) |
irate(v range-vector) | Мгновенная скорость по двум последним точкам. | irate(node_cpu_seconds_total[1m]) |
increase(v range-vector) | Прирост counter’а за интервал. Эквивалентно rate() * интервал. | increase(http_requests_total[1h]) |
resets(v range-vector) | Количество сбросов counter’а. | resets(process_start_time_seconds[1d]) |
Используйте
rate()для графиков и алертов.irate()подходит только для отладки краткосрочных всплесков.
Функции для gauge’ов
| Функция | Описание | Пример |
|---|---|---|
delta(v range-vector) | Разница между последним и первым значением. | delta(temperature[1h]) |
deriv(v range-vector) | Производная (скорость изменения) временного ряда. | deriv(cpu_usage[10m]) |
predict_linear(v range-vector, t scalar) | Линейная экстраполяция значения через t секунд. | predict_linear(disk_free_bytes[1h], 3600) < 0 |
Функции преобразования и округления
| Функция | Описание | Пример |
|---|---|---|
abs(v instant-vector) | Абсолютное значение. | abs(error_rate) |
ceil(v instant-vector) | Округление вверх до целого. | ceil(memory_usage_gb) |
floor(v instant-vector) | Округление вниз до целого. | floor(load_avg) |
round(v instant-vector, to_nearest=1 scalar) | Округление до ближайшего кратного to_nearest. | round(cpu_cores, 0.5) |
exp(v instant-vector) | Экспонента. | exp(log_likelihood) |
ln(v instant-vector) | Натуральный логарифм. | ln(request_count) |
log2(v instant-vector) | Логарифм по основанию 2. | log2(file_size_bytes) |
log10(v instant-vector) | Десятичный логарифм. | log10(population) |
sqrt(v instant-vector) | Квадратный корень. | sqrt(variance) |
pow(v instant-vector, y scalar) | Возведение в степень. | pow(signal, 2) |
sgn(v instant-vector) | Знак числа: -1, 0 или 1. | sgn(net_flow) |
Функции ограничения значений
| Функция | Описание | Пример |
|---|---|---|
clamp(v instant-vector, min scalar, max scalar) | Ограничивает значение в диапазоне [min, max]. | clamp(temperature, -50, 100) |
clamp_min(v instant-vector, min scalar) | Устанавливает нижнюю границу. | clamp_min(latency, 0) |
clamp_max(v instant-vector, max scalar) | Устанавливает верхнюю границу. | clamp_max(cpu_load, 100) |
Функции для работы с метками
| Функция | Описание | Пример |
|---|---|---|
label_join(v instant-vector, dst_label string, separator string, src_1 string, ..., src_n string) | Объединяет значения указанных меток в новую метку. | label_join(up, "instance_zone", "-", "instance", "zone") |
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) | Заменяет значение метки по регулярному выражению. | label_replace(up, "job", "$1-prod", "job", "(.*)") |
Прочие функции
| Функция | Описание | Пример |
|---|---|---|
vector(s scalar) | Преобразует скаляр в instant vector без меток. | vector(1) |
scalar(v instant-vector) | Преобразует вектор в скаляр (если один элемент). | scalar(count(up)) |
sort(v instant-vector) | Сортирует по возрастанию. | sort(instance_memory_usage) |
sort_desc(v instant-vector) | Сортирует по убыванию. | sort_desc(request_rate) |
changes(v range-vector) | Количество изменений значения gauge’а. | changes(process_open_fds[1h]) |
idelta(v range-vector) | Разница между последними двумя точками. | idelta(temperature[5m]) |
Интеграция с Grafana
Grafana — стандартная система визуализации для Prometheus.
Настройка источника данных
- В Grafana: Configuration → Data Sources → Add data source.
- Выбрать Prometheus.
- Указать URL (например,
http://prometheus:9090). - Нажать Save & test.
Типы панелей
- Time series — основной график временных рядов.
- Stat — отображение одного значения (например, текущая загрузка CPU).
- Gauge — круговой измеритель.
- Bar gauge — горизонтальные полосы.
- Table — табличное представление.
- Heatmap — тепловая карта (требует гистограмм).
Переменные (Variables)
Позволяют делать дашборды интерактивными:
$job,$instance,$region— выбираются из меток.- Запрос:
label_values(up, job)— получает все уникальные значения меткиjob.
Пример использования в запросе:
rate(http_requests_total{job="$job"}[5m])
Расширение возможностей: Thanos, Cortex, VictoriaMetrics
Thanos
Добавляет долгосрочное хранение, глобальный запрос и высокую доступность.
Компоненты:
- Sidecar — подключается к каждому Prometheus.
- Store Gateway — читает данные из объектного хранилища (S3, GCS).
- Query — объединяет данные из нескольких источников.
- Compactor — управляет компактификацией и downsampling’ом.
Преимущества:
- Хранение данных годами.
- Единый запрос по всем кластерам.
- Поддержка downsampling: 5m → 1h → 24h.
VictoriaMetrics
Альтернативная TSDB с лучшей производительностью и меньшим потреблением RAM.
Поддерживает:
- Prometheus-совместимый API.
- Встроенный
vmagentкак замена scrape’у. - Сжатие данных лучше, чем у Prometheus.
Cortex
Многоарендная (multi-tenant) система на основе Prometheus, ориентированная на SaaS.
Использует:
- DynamoDB или Cassandra для индексов.
- S3/GCS для блоков.
- Memcached для кэширования.
Мониторинг самого Prometheus
Рекомендуется создать отдельный дашборд с ключевыми метриками:
up{job="prometheus"}— доступность.prometheus_tsdb_head_series— число активных рядов.prometheus_target_interval_length_seconds— реальный интервал сбора.rate(prometheus_http_requests_total{handler=~"/api/v1/.*"}[5m])— нагрузка на API.prometheus_rule_group_last_duration_seconds— время выполнения правил.prometheus_tsdb_wal_corruptions_total— ошибки WAL (должно быть 0).prometheus_config_last_reload_successful— успешность последней перезагрузки конфигурации.
Алерты:
PrometheusTargetDown— еслиup == 0.PrometheusErrorSendingSamplesToRemoteStorage— ошибки remote_write.PrometheusTooManyActiveSeries— приближение к лимиту памяти.
Типовые шаблоны алертов
Доступность
- alert: TargetDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "{{ $labels.job }}/{{ $labels.instance }} is down"
Высокая задержка
- alert: HighLatency
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1
for: 10m
labels:
severity: warning
annotations:
summary: "95th percentile latency > 1s for {{ $labels.job }}"
Нехватка диска
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
for: 15m
labels:
severity: warning
annotations:
summary: "Disk space low on {{ $labels.instance }}"
Сбой правила записи
- alert: RecordingRuleFailing
expr: prometheus_rule_evaluation_failures_total > 0
labels:
severity: critical
annotations:
summary: "Recording rule evaluation failed"