Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:prom [2023/12/02 07:46] admin |
linux:prom [2024/06/28 05:46] (текущий) admin |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
==== Установка ==== | ==== Установка ==== | ||
==== Использование ==== | ==== Использование ==== | ||
+ | |||
+ | === Варианты тегов в легенде === | ||
+ | {{: | ||
+ | |||
+ | |||
+ | === Дефотное значение при отсутствии данных === | ||
+ | < | ||
+ | sum() OR vector(0) | ||
+ | |||
+ | или, в случае с VictoriaMetrics | ||
+ | sum() OR default 0 | ||
+ | </ | ||
+ | |||
+ | |||
+ | === === | ||
+ | |||
Строка 181: | Строка 197: | ||
По сути получается что считаются квантили, | По сути получается что считаются квантили, | ||
:!: интерпретация " | :!: интерпретация " | ||
+ | :!: Саммари не рекомендуется агрегировать или делать это аккуратно, | ||
Строка 231: | Строка 248: | ||
Будет полезно посчитать например 90%, 95%, 99% от подобного ряда, чтобы охватить как можно больше | Будет полезно посчитать например 90%, 95%, 99% от подобного ряда, чтобы охватить как можно больше | ||
Это и будет называться 90ым, 95ым, 99ым перцентилем, | Это и будет называться 90ым, 95ым, 99ым перцентилем, | ||
+ | |||
+ | :!: Перцентили позволяют нарезать слоями наш массив и понять на какие группы делятся элементы, | ||
Строка 239: | Строка 258: | ||
Медиана (он же 50% перцентиль) 8с\\ | Медиана (он же 50% перцентиль) 8с\\ | ||
p90,95 и 99 в данном случае будут 17с т.к. выборка очень небольшая они совпадают\\ | p90,95 и 99 в данном случае будут 17с т.к. выборка очень небольшая они совпадают\\ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | Для подсчета такой статистики нужна история данных, | ||
+ | Например в случае с временем запросов к приложению можем выделить несколько бакетов типа "<= 3,5,7 секунд" | ||
+ | </ | ||
+ | Возвращаясь к Prometheus, перцентили в нем встречаются в двух случаях, | ||
+ | **Процентиль** просто вариант перевода на русский язык т.е. полный синоним слова перцентиль\\ | ||
- | ****\\ | + | **Квартиль** - это четверти т.е 25%, 50%, 75% и 100% (первый, |
+ | **Квантиль** - тоже самое что и перцентиль только в случае если вероятность выражается не в процентах\\ | ||
- | </ | + | | {{: |
+ | | {{: | ||
+ | |||
+ | |||
+ | === PromQL === | ||
+ | Каждая метрика это временной ряд, отдельная таблица, | ||
< | < | ||
- | < | + | < |
+ | В самом простом случае, | ||
- | </details> | + | <code> |
+ | http_requests_total | ||
+ | # Имя метрики тоже является тегом | ||
+ | {__name__=" | ||
+ | # Теги можно фильтровать | ||
+ | http_requests_total{job=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Range vector**\\ | ||
+ | Так же можно задать временной диапазон, | ||
+ | В таком случае мы получаем т.н. **" | ||
+ | < | ||
+ | http_requests_total{job=" | ||
+ | </ | ||
+ | |||
+ | Простой запрос возвращает **" | ||
+ | |||
+ | В случае с **range вектором**, | ||
+ | < | ||
+ | [ 5, | ||
+ | [2], [3], [4] | ||
+ | [3], [4], [5] | ||
+ | [4], [5], [6] | ||
+ | </ | ||
+ | |||
+ | Но такие данные на двумерном графике ес-но рисоваться не могут, поэтому их нужно сначала привести к простому виду, к " | ||
+ | т.е. если мы применяем диапазон времени для сглаживания графика, | ||
+ | |||
+ | :!: На счет интервала, | ||
+ | |||
+ | < | ||
+ | В случае с графаной, | ||
+ | Переменная интервала призвана динамически подбирать интервал, | ||
+ | </ | ||
+ | </ | ||
- | === PromQL === | ||
< | < | ||
- | < | + | < |
- | В случае с Прометеем, для группировки интервалов следует использовать переменную | + | < |
- | Переменная интервала призвана | + | # OR |
+ | http_requests_total{app=~" | ||
+ | |||
+ | # AND (# найдет все tag, начинающиеся на aaa И заканчивающиеся на bbb) | ||
+ | metric{tag=~" | ||
+ | |||
+ | # запрос, который умножит значения на 10 и вернет только те, которые больше или равны 50: | ||
+ | metric{tag=" | ||
+ | |||
+ | # вернет | ||
+ | metric1 and metric2{tag="something"} | ||
+ | |||
+ | # Запрос, который вернет разницу. Например, посчитаем сколько | ||
+ | total_ram{instance=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Агрегация**\\ | ||
+ | < | ||
+ | # Сумма. Например есть | ||
+ | http_requests_total{app=" | ||
+ | http_requests_total{app=" | ||
+ | |||
+ | # Просуммируем значения со всеми вариантами (! попавшими под запрос) | ||
+ | sum(http_requests_total) | ||
+ | |||
+ | # Для того чтобы отображать не все теги, их можно группировать, группировка по указанным | ||
+ | sum (http_requests_total) by (app, instance) | ||
+ | |||
+ | # Группировка по всем кроме указанных | ||
+ | sum (http_requests_total) without (instance) | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Функции**\\ | ||
+ | Популярна ф-я **rate**. Применяется к постоянно возрастающим счетчикам, считает скорость | ||
+ | Учитывает сбросы метрик приложения (рестарт например), | ||
+ | |||
+ | **deriv** аналог rate() но не для | ||
+ | Обе ф-ии принимают **range vector**\\ | ||
+ | |||
+ | **histogram_quantile**\\ | ||
+ | Принимает **instant vector**, позволяет посчитать нужный перцентиль из гистограммы, при этом сами | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | rate(http_requests_total{app=" | ||
+ | deriv(ram_free{host=" | ||
+ | |||
+ | |||
+ | histogram_quantile(0.95, | ||
+ | histogram_quantile( | ||
+ | 0.95, | ||
+ | sum by (url, le) ( | ||
+ | rate(http_request_duration_seconds_bucket[5m]) | ||
+ | ) | ||
+ | ) | ||
+ | </ | ||