[Системное администрирование, Серверное администрирование] Знакомство с PromQL + Cheatsheet (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
13-Июн-2021 18:40
Скачать Cheatsheet по запросам PromQL
Начало работы с PromQL может быть непростым, если вы только начинаете свое путешествие в увлекательный мир Prometheus. Это руководство поможет понять принципы его работы, статья включает интересные и полезные советы, необходимые для начала работы.Поскольку Prometheus хранит данные в виде временных рядов (time-series data model), запросы PromQL радикально отличаются от привычного SQL. Понимание, как работать с данными в Prometheus, является ключом к тому, чтобы научиться писать эффективные запросы.Не забудьте скачать Cheatsheet по запросам PromQL!Как работают time-series databasesВременные ряды — это потоки значений, связанных с меткой времени.
Каждый временной ряд можно идентифицировать по названию метрики и меткам, например:
mongodb_up{}
или
kube_node_labels{cluster="aws-01", label_kubernetes_io_role="master"}
В приведенном выше примере присутствует имя метрики (kube_node_labels) и метки (cluster и label_kubernetes_io_role). На самом деле, метрики тоже являются метками. Приведенный выше запрос можно записать так:
{__name__ = "kube_node_labels", cluster="aws-01", label_kubernetes_io_role="master"}
В Prometheus есть четыре типа метрик:
  • Gauges (Измеритель) — значения, которые могут меняться. Например, метрика mongodb_up позволяет узнать, есть ли у exporter соединение с экземпляром MongoDB.
  • Counters (Счетчик) показывают суммарные значения и обычно имеют суффикс _total. Например, http_requests_total.
  • Histogram (Гистограмма) — это комбинация различных счетчиков, используется для отслеживания размерных показателей и их продолжительности, таких как длительность запросов.
  • Summary (Сводка) работает как гистограмма, но также рассчитывает квантили.
Знакомство с выборкой данных PromQLВыбрать данные в PromQL так же просто, как указать метрику, из которой вы хотите получить данные. В этом примере мы будем использовать метрику http_requests_total.Допустим, мы хотим узнать количество запросов по пути / api на хосте 10.2.0.4. Для этого мы будем использовать метки host и path из этой метрики:
http_requests_total{host="10.2.0.4", path="/api"}
Запрос вернет следующие значения:namehostpathstatus_codevaluehttp_requests_total10.2.0.4/api20098http_requests_total10.2.0.4/api50320http_requests_total10.2.0.4/api4011Каждая строка в этой таблице представляет собой поток с последним доступным значением. Поскольку http_requests_total содержит определенное количество запросов, сделанных с момента последнего перезапуска счетчика, мы видим 98 успешных запросов.Это называется instant vector, самое раннее значение для каждого потока на указанный в запросе момент времени. Поскольку семплы берутся в случайное время, Prometheus округляет результаты. Если длительность не указана, то возвращается последнее доступное значение.
Кроме того, вы можете получить instant vector из другого отрезка времени (например, день назад).Для этого вам нужно добавить offset (смещение), например:
http_requests_total{host="10.2.0.4", path="/api", status_code="200"} offset 1d
Чтобы получить значение метрики в пределах указанного отрезка времени, необходимо указать его в скобках:
http_requests_total{host="10.2.0.4", path="/api"}[10m]
Запрос вернет следующие значения:namehostpathstatus_codevaluehttp_requests_total10.2.0.4/api200641309@1614690905.515641314@1614690965.515641319@1614691025.502http_requests_total10.2.0.5/api200641319@1614690936.628641324@1614690996.628641329@1614691056.628http_requests_total10.2.0.2/api401368736@1614690901.371368737@1614690961.372368738@1614691021.372Запрос возвращает несколько значений для каждого временного ряда потому, что мы запросили данные за определенный период времени, а каждое значение связано с отметкой времени.Это называется range vector — все значения для каждой серии в пределах указанного временного интервала.
Знакомство с агрегаторами и операторами PromQLКак видите, селекторы PromQL помогают получить данные метрик. Но что, если вы хотите получить более сложные результаты?Представим, что у нас есть метрика node_cpu_cores с меткой cluster. Мы могли бы, например, суммировать результаты, объединяя их по определенной метке:
sum by (cluster) (node_cpu_cores)
Запрос вернет следующие значения:clustervaluefoo100bar50С помощью этого простого запроса мы видим, что имеется 100 ядер ЦП для кластера cluster_foo и 50 для cluster_bar.Кроме того, мы можем использовать в запросах PromQL арифметические операторы. Например, используя метрику node_memory_MemFree_bytes, которая возвращает объем свободной памяти в байтах, мы могли бы получить это значение в мегабайтах с помощью оператора деления:
node_memory_MemFree_bytes / (1024 * 1024)
Мы также можем получить процент доступной свободной памяти, сравнив предыдущую метрику с node_memory_MemTotal_bytes, которая возвращает общий объем памяти, доступной на узле:
(node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100
Теперь мы можем использовать этот запрос для создания оповещения, когда на узле остается менее 5% свободной памяти:
(node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100 < 5
Знакомство с функциями PromQLPromQL поддерживает большое количество функций, которые мы можем использовать для получения более сложных результатов. Например, в предыдущем примере мы могли бы использовать функцию topk, чтобы определить, какой из двух узлов имеет больший объем свободной памяти (в процентах):
topk(2, (node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100)
Prometheus позволяет не только получить информацию о прошедших событиях, но даже строить прогнозы. Функция pred_linear предсказывает, где будет временной ряд через заданный промежуток времени.Представьте, что вы хотите узнать, сколько свободного места будет доступно на диске в следующие 24 часа. Вы можете применить функцию pred_linear к результатам за прошлую неделю из метрики node_filesystem_free_bytes, которая возвращает доступное свободное место на диске. Это позволяет прогнозировать объем свободного дискового пространства в гигабайтах в ближайшие 24 часа:
predict_linear(node_filesystem_free_bytes[1w], 3600 * 24) / (1024 * 1024 * 1024) < 100
При работе со счетчиками Prometheus удобно использовать функцию rate. Она вычисляет среднюю скорость увеличения временного ряда в векторе диапазона в секунду, сбросы счетчика автоматически корректируются. Кроме того, вычисление экстраполируется к концам временного диапазона.Что делать, если нам нужно создать оповещение, которое срабатывает, если мы не получали запрос в течение 10 минут. Мы не можем просто использовать метрику http_requests_total, потому что при сбросе счетчика в течение указанного временного диапазона результаты были бы неточными:
http_requests_total[10m]
namehostpathstatus_codevaluehttp_requests_total10.2.0.4/api200100@1614690905.515300@1614690965.51550@1614691025.502В приведенном выше примере после сброса счетчика мы получаем отрицательные значения от 300 до 50, поэтому нам недостаточно только этой метрики. Мы можем решить проблему с помощью функции rate. Поскольку он считает сбросы счетчика, результаты фиксируются, как если бы они были такими:namehostpathstatus_codevaluehttp_requests_total10.2.0.4/api200100@1614690905.515300@1614690965.515350@1614691025.502
rate(http_requests_total[10m])
namehostpathstatus_codevaluehttp_requests_total10.2.0.4/api2000.83Независимо от сбросов за последние 10 минут в среднем было 0,83 запроса в секунду. Теперь мы можем настроить оповещение:
rate(http_requests_total[10m]) = 0
Что дальше?В этой статье мы узнали, как Prometheus хранит данные, рассмотрели примеры запросов PromQL для выборки и агрегирования данных.Вы можете скачать Cheatsheet по PromQL, чтобы узнать больше об операторах и ​​функциях PromQL. Вы также можете проверить все примеры из статьи и Cheatsheet с нашим сервисом Prometheus playground.
===========
Источник:
habr.com
===========

===========
Автор оригинала: Jesus Ángel Samitier
===========
Похожие новости: Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_servernoe_administrirovanie (Серверное администрирование), #_prometheus, #_promql, #_monitoring (мониторинг), #_monitoring, #_shpargalka (шпаргалка), #_cheatsheet, #_blog_kompanii_timeweb (
Блог компании Timeweb
)
, #_sistemnoe_administrirovanie (
Системное администрирование
)
, #_servernoe_administrirovanie (
Серверное администрирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 27-Апр 22:50
Часовой пояс: UTC + 5