Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:prom [2023/12/02 05:13] admin |
linux:prom [2024/06/28 05:46] (текущий) admin |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
==== Установка ==== | ==== Установка ==== | ||
==== Использование ==== | ==== Использование ==== | ||
+ | |||
+ | === Варианты тегов в легенде === | ||
+ | {{: | ||
+ | |||
+ | |||
+ | === Дефотное значение при отсутствии данных === | ||
+ | < | ||
+ | sum() OR vector(0) | ||
+ | |||
+ | или, в случае с VictoriaMetrics | ||
+ | sum() OR default 0 | ||
+ | </ | ||
+ | |||
+ | |||
+ | === === | ||
+ | |||
Строка 181: | Строка 197: | ||
По сути получается что считаются квантили, | По сути получается что считаются квантили, | ||
:!: интерпретация " | :!: интерпретация " | ||
+ | :!: Саммари не рекомендуется агрегировать или делать это аккуратно, | ||
Строка 200: | Строка 217: | ||
+ | |||
+ | === Перцентили === | ||
+ | Перцентили нужны для того чтобы описать массив данных одним числом\\ | ||
+ | Например чтобы понять как ведет себя приложение в целом, отбрасывая единичные выбросы\\ | ||
< | < | ||
- | < | + | < |
+ | Метрика это временной ряд т.е. набор значений во времени, | ||
+ | условно [1, | ||
- | </ | + | Как обобщить эти данные ? самое популярное это вывести среднее, |
+ | В какой то теоретической сфере вполне правильно и удобно, | ||
+ | Но в какой то практическое сфере, прикладной, | ||
+ | |||
+ | |||
+ | **Медиана**\\ | ||
+ | Средний элемент т.е. буквально в середине (упорядоченного) массива, | ||
+ | Ну и даже на вскидку, | ||
+ | [0,1,3,7, 8, 12, | ||
+ | |||
+ | Восьмерка взята прямо из массива, | ||
+ | Так же можно выделить мин и макс в этом числовом ряду т.е. 0% и 100%\\ | ||
+ | < | ||
+ | 0% < 0 | ||
+ | 50% <= 8 | ||
+ | 100% <= 186 | ||
+ | </ | ||
+ | |||
+ | Будет полезно посчитать например 90%, 95%, 99% от подобного ряда, чтобы охватить как можно больше | ||
+ | Это и будет называться 90ым, 95ым, 99ым перцентилем, | ||
+ | |||
+ | :!: Перцентили позволяют нарезать слоями наш массив и понять на какие группы делятся элементы, | ||
+ | |||
+ | |||
+ | **Пример с мониторингом приложения**\\ | ||
+ | Предположим что этот массив чисел это длительность выполнения запросов в секундах к нашему приложению, | ||
+ | |||
+ | Среднее арифметическое будет 27.5с\\ | ||
+ | Медиана (он же 50% перцентиль) 8с\\ | ||
+ | p90,95 и 99 в данном случае будут 17с т.к. выборка очень небольшая они совпадают\\ | ||
+ | </ | ||
< | < | ||
- | < | + | < |
+ | Для подсчета такой статистики нужна история данных, | ||
+ | Например в случае с временем запросов к приложению можем выделить несколько бакетов типа "<= 3,5,7 секунд" | ||
</ | </ | ||
+ | Возвращаясь к Prometheus, перцентили в нем встречаются в двух случаях, | ||
+ | |||
+ | **Процентиль** просто вариант перевода на русский язык т.е. полный синоним слова перцентиль\\ | ||
+ | |||
+ | **Квартиль** - это четверти т.е 25%, 50%, 75% и 100% (первый, | ||
+ | |||
+ | **Квантиль** - тоже самое что и перцентиль только в случае если вероятность выражается не в процентах\\ | ||
+ | |||
+ | | {{: | ||
+ | | {{: | ||
=== PromQL === | === PromQL === | ||
+ | Каждая метрика это временной ряд, отдельная таблица, | ||
+ | |||
< | < | ||
- | < | + | < |
+ | В самом простом случае, | ||
- | В случае | + | < |
- | Переменная интервала призвана динамически подбирать интервал, | + | 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] | ||
+ | </ | ||
+ | |||
+ | Но такие данные на двумерном графике ес-но рисоваться не могут, поэтому их нужно сначала привести к простому виду, к " | ||
+ | т.е. если мы применяем диапазон времени для сглаживания графика, | ||
+ | |||
+ | :!: На счет интервала, | ||
+ | |||
+ | < | ||
+ | В случае с графаной, для группировки интервалов следует использовать переменную **$__rate_interval**, вместо " | ||
+ | Переменная интервала призвана динамически подбирать интервал, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | < | ||
+ | # OR | ||
+ | http_requests_total{app=~" | ||
+ | |||
+ | # AND (# найдет все tag, начинающиеся на aaa И заканчивающиеся на bbb) | ||
+ | metric{tag=~" | ||
+ | |||
+ | # запрос, | ||
+ | metric{tag=" | ||
+ | |||
+ | # вернет пересечение: | ||
+ | metric1 and metric2{tag=" | ||
+ | |||
+ | # Запрос, | ||
+ | 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]) | ||
+ | ) | ||
+ | ) | ||
+ | </ | ||