Инструменты пользователя

Инструменты сайта


linux:prom

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:prom [2023/12/02 12:58]
admin
linux:prom [2024/06/28 05:46] (текущий)
admin
Строка 4: Строка 4:
 ==== Установка ==== ==== Установка ====
 ==== Использование ==== ==== Использование ====
 +
 +=== Варианты тегов в легенде ===
 +{{:linux:label.png?direct&400|}}
 +
 +
 +=== Дефотное значение при отсутствии данных ===
 +<code>
 +sum() OR vector(0)
 +
 +или, в случае с VictoriaMetrics
 +sum() OR default 0
 +</code>
 +
 +
 +=== ===
 +
  
  
Строка 263: Строка 279:
 | {{:linux:ettekatxiaad76a.png?direct&400|}} | {{:linux:ettekayxaaa0kpq.png?direct&400|}} | | {{:linux:ettekatxiaad76a.png?direct&400|}} | {{:linux:ettekayxaaa0kpq.png?direct&400|}} |
  
 +
 +
 +=== PromQL ===
 +Каждая метрика это временной ряд, отдельная таблица, имя таблицы это уникальный набор всех тегов а значение одно число записанное в разные моменты времени\\
  
  
 <details> <details>
-<summary>:!: </summary>+<summary>:!: Извлечение данных</summary> 
 +В самом простом случае, в запросе достаточно указать только имя метрики, извлекутся данные со всеми тегами\\
  
-</details>+<code> 
 +http_requests_total
  
 +  # Имя метрики тоже является тегом
 +{__name__="http_requests_total"}
  
 +  # Теги можно фильтровать
 +http_requests_total{job="prometheus",group="canary"}
 +</code>
 +
 +
 +**Range vector**\\
 +Так же можно задать временной диапазон, с помощью которого график будет сглаживается\\
 +В таком случае мы получаем т.н. **"range vector"**\\
 +<code>
 +http_requests_total{job="prometheus",group="canary"}[1m]
 +</code>
 +
 +Простой запрос возвращает **"instant vector"**, перечень одиночных значений, привязанных ко времени, график спокойно рисуется, ничего сложного\\ 
 +
 +В случае с **range вектором**, каждая точка содержит в себе значение в запрошенный момент времени + массив из предыдущих значений за этот указанный интервал\\
 +<code>
 +[ 5,   6,   7 ]
 + [2], [3], [4]
 + [3], [4], [5]
 + [4], [5], [6]
 +</code>
 +
 +Но такие данные на двумерном графике ес-но рисоваться не могут, поэтому их нужно сначала привести к простому виду, к "instant" вектору, делается это с помощью функций агрегации\\
 +т.е. если мы применяем диапазон времени для сглаживания графика, необходимо так же применить ф-цию агрегирования, получить instant вектор\\
 +
 +:!: На счет интервала, по умолчанию интервал сборка метрик у прометеуса 30 секунд, для в данном случае нужно не меньше двух точек с-но выбирать следует не меньше минуты, иначе данных просто не будет\\
 +
 +<code>
 +В случае с графаной, для группировки интервалов следует использовать переменную **$__rate_interval**, вместо "$__interval", она поддерживается только в для прометеуса\\
 +Переменная интервала призвана динамически подбирать интервал, для прометея rate_interval оптимизирована гораздо лучше
 +</code>
 +</details>
  
  
-=== PromQL === 
  
 <details> <details>
-<summary>:!: Примечания</summary>+<summary>:!: Запросы</summary>
  
-В случае с Прометеем, для группировки интервалов следует использовать переменную **$__rate_interval** вместо "$__interval", она поддерживается только в нем\\ +<code> 
-Переменная интервала призвана динамически подбирать интервалдля прометея rate_interval оптимизирована гораздо лучше\\+  # OR  
 +http_requests_total{app=~"apache|nginx|iis.*"
 + 
 +  # AND (# найдет все tag, начинающиеся на aaa И заканчивающиеся на bbb) 
 +metric{tag=~"aaa.*", tag=~".*bbb"
 + 
 +  # запрос, который умножит значения на 10 и вернет только те, которые больше или равны 50: 
 +metric{tag="value"} * 10 >= 50 
 + 
 +  # вернет пересечение: значения, у которых полностью совпадающий набор тегов в обоих запросах 
 +metric1 and metric2{tag="something"
 + 
 +  # Запроскоторый вернет разницу. Например, посчитаем сколько RAM занято 
 +total_ram{instance="host"} - free_ram{instance="host"
 +</code> 
 + 
 + 
 +**Агрегация**\\ 
 +<code> 
 +  # Сумма. Например есть метрика с двумя разными тегами  
 +http_requests_total{app="nginx"
 +http_requests_total{app="apache"
 + 
 +    # Просуммируем значения со всеми вариантами (! попавшими под запрос) 
 +sum(http_requests_total) 
 + 
 +  # Для того чтобы отображать не все теги, их можно группировать, группировка по указанным 
 +sum (http_requests_total) by (app, instance) 
 + 
 +  # Группировка по всем кроме указанных 
 +sum (http_requests_total) without (instance) 
 +</code> 
 + 
 + 
 +**Функции**\\ 
 +Популярна ф-я **rate**. Применяется к постоянно возрастающим счетчикам, считает скорость прироста в секунду\\ 
 +Учитывает сбросы метрик приложения (рестарт например), есть ф-я "irate" для резко прыгающих графиков\\ 
 + 
 +**deriv** аналог rate() но не для счетчиков а для метрик которые меняются в обе стороны, "gauge"\\ 
 +Обе ф-ии принимают **range vector**\\ 
 + 
 +**histogram_quantile**\\ 
 +Принимает **instant vector**, позволяет посчитать нужный перцентиль из гистограммы, при этом сами гистограммы можно агрегировать\\ 
 + 
 + 
 + 
 +<code> 
 +rate(http_requests_total{app="nginx"}[5m]) 
 +deriv(ram_free{host="postgresql"}[5m]) 
 + 
 + 
 +histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) 
 +histogram_quantile( 
 +    0.95, 
 +    sum by (url, le) ( 
 +        rate(http_request_duration_seconds_bucket[5m]) 
 +    ) 
 +
 +</code>
  
  
linux/prom.1701521894.txt.gz · Последнее изменение: 2023/12/02 12:58 — admin