Объяснение Prometheus PromQL на уровне няни и практическое использование
Объяснение Prometheus PromQL на уровне няни и практическое использование

1. Введение в PromQL

PromQL (язык запросов Prometheus) — это язык запросов Prometheus tsdb. Это ключевая часть отображения данных и настройки правил тревог в сочетании с графаной.

Официальная документация:https://prometheus.io/docs/prometheus/latest/querying/basics/

2. Четыре типа индикаторов

  • counter(считатьустройство)
  • gauge (тип инструмента)
  • гистограмма (тип гистограммы)
  • резюме (тип сводки)

1) счетчик

Counter (только увеличиваться, но не уменьшатьсяизсчитатьустройство) Индикаторы типа работают как счетчики, они только увеличиваются, а не уменьшаются. Общие индикаторы мониторинга, такие как http_requests_totalnode_cpu_seconds_total Все Counter тип индикаторов мониторинга.

В демонстрационных данных, возвращаемых узлом-экспортером, его аннотация также содержит тип выборки. Например:

Язык кода:javascript
копировать
# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="cpu0",mode="idle"} 362812.7890625
  • #HELP:Интерпретация текущего показателяиззначение,Вышеупомянутое указываетсуществоватьв каждом режиме node Узел из cpu Потратьте время на s для единицы.
  • #TYPE:Опишите текущий показательизтип данных,Выше указан тип счетчика.

counter это простой, но мощныйизинструмент,Например, мы можем существующее приложение середина записывать количество раз, когда происходят определенные события.,Сохраняя эти данные во временных рядах в форме,мы можем легкоиз Узнать о событииизизменение курса。PromQL Встроенные операции и функции агрегирования позволяют пользователям выполнять дальнейший анализ этих данных, например, путем rate() функция получить HTTP Темп роста запросов:

Язык кода:javascript
копировать
rate(http_requests_total[5m])

Запросите 10 самых посещаемых HTTP-запросов в текущей системе:

Язык кода:javascript
копировать
topk(10, http_requests_total)

2) манометр (тип прибора)

и Counter другой, Gauge(Можно увеличить или уменьшитьиз Панель управления)типиз Индикаторы ориентированы на реактивные системыиз Текущий статус。Поэтому этот тип индикатораизобразец данныхМожно увеличить или уменьшить。Общие индикаторы, такие как:node_memory_MemFree_bytes(Хост в данный момент простаиваетиз Объем памяти)、 node_memory_MemAvailable_bytes(Доступный Объем памяти)Все Gauge тип индикаторов мониторинга.проходить Gauge Индикаторы позволяют пользователям напрямую просматривать текущее состояние системы:

Язык кода:javascript
копировать
node_memory_MemFree_bytes

для Gauge Тип индикатора мониторинга, через PromQL встроенные функции delta() Могут быть получены изменения в образцах за определенный период времени. Например, вычислить CPU Разница температур в течение двух часов:

Язык кода:javascript
копировать
delta(cpu_temp_celsius{host="zeus"}[2h])

Также можно использовать напрямую predict_linear() Прогнозируйте тенденцию изменения данных. Например, прогнозирование системного дискового пространства в 4 Что осталось после закрытия:

Язык кода:javascript
копировать

3) Гистограмма (тип гистограммы) и Сводка (тип сводки)

Кроме Counter и Gauge Виды метрик мониторинга, кроме Prometheus также определено Histogram и Summary изиндекстип.Histogram и Summary В основном используется для статистического анализа распределения выборки.

  • существуют Большую часть времени люди склонны использовать определенные количественные показателиизсреднее. значение, например CPU средняя скорость использования, среднее время ответа страницы, этот метод также имеет очевидные проблемы с системой API Звонок со средним временем ответа, например: если большинство API Запросы сохраняются 100ms из диапазона времени ответа, в то время как отдельные запросы из времени ответа требуют 5s, то это приведет к некоторым WEB страницаиз Время ответа сокращается досередина Кусочекчислоначальство,Это явление называетсядляпроблема с длинным хвостом
  • для различает, средний ли он от медленного или длинный хвост от медленного,Самый простой способ — сгруппировать их по диапазону задержки запроса, который руководить. Например,Статистическая задержка существует 0~10ms Сколько запросов между 10~20ms междуиз Сколько запросов?。проходить Этот вид Способ Может Система быстрого анализа работает медленноизпричина。Histogram и Summary Вседля смогло решить такие проблемы с существованием, путем Histogram и Summary типиз Мониторинг показателей,Мы можем быстро понять распределение образцов мониторинга.

Например, показатели prometheus_tsdb_wal_fsync_duration_seconds Тип индикатора Краткое содержание. он записывает Prometheus Server середина wal_fsync время обработки, доступ к которому осуществляется Prometheus Server из /metrics Адрес, вы можете получить следующие данные мониторинга:

Язык кода:javascript
копировать
# HELP prometheus_tsdb_wal_fsync_duration_seconds Duration of WAL fsync.
# TYPE prometheus_tsdb_wal_fsync_duration_seconds summary
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005
prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173
prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002
prometheus_tsdb_wal_fsync_duration_seconds_count 216

из образца середина выше вы можете узнать текущий Prometheus Server руководить wal_fsync Общее количество операций для 216 раз, отнимает много времени 2,888716127000002с. Его серединасередина цифр (квантиль=0,5) взята для 0.012352463,9 Квантиль (квантиль=0,9) из затрат времени на 0.014458005s。

существовать Prometheus Server сам возвращает из выборки данных середина, мы также можем найти тип для Histogram из Мониторинг показателей prometheus_tsdb_compaction_chunk_range_seconds_bucket

Язык кода:javascript
копировать
# HELP prometheus_tsdb_compaction_chunk_range_seconds Final time range of chunks on their first compaction
# TYPE prometheus_tsdb_compaction_chunk_range_seconds histogram
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="100"} 71
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="400"} 71
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="1600"} 71
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="6400"} 71
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="25600"} 405
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="102400"} 25690
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="409600"} 71863
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="1.6384e+06"} 115928
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="6.5536e+06"} 2.5687892e+07
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="2.62144e+07"} 2.5687896e+07
prometheus_tsdb_compaction_chunk_range_seconds_bucket{le="+Inf"} 2.5687896e+07
prometheus_tsdb_compaction_chunk_range_seconds_sum 4.7728699529576e+13
prometheus_tsdb_compaction_chunk_range_seconds_count 2.5687896e+07

и Summary Тип из индикатора сходства существует Histogram Тип выборки также будет отражать текущий показатель записи общего количества (с _count каксуффикс) и его значение из суммы (в _sum каксуффикс)。другойсуществовать В Histogram Индикатор напрямую отражает количество отсчетов в разных интервалах, причем интервалы обозначаются метками. le руководитьопределение。

3. Четыре типа данных выражений

Операторы запроса PromQL являются выражениями и реализуют четыре типа данных:

  • Мгновенный вектор:набор временных рядов,Каждый временной ряд содержит один образец,У них одна и та же временная метка. То есть,Возвращаемое значение выражения середина будет содержать только последнее из выборочных значений временного ряда середина.
  • Вектор диапазона:набор временных рядов,Каждый временной ряд содержит выборочные данные за определенный период времени.
  • Скаляр:поплавокиззначение данных,Времени нет. Его можно записать в виде [-](цифры)[.(цифры)]из. Следует отметить, что из,использоватьвыражение Возвращаемый счетчик (http_requests_total) для типа данных по-прежнему является мгновенным вектором, пользователи могут передавать встроенные функции скаляр () Воля мгновенного преобразования вектора в скаляр.
  • Нить:Простое строковое значение. Строки могут использовать одинарные кавычки ('')、Двойные кавычки ("") или обратные кавычки (``) для указания.

1) Мгновенный вектор

Вектор экземпляра (мгновенный вектор) представляет собой набор временных рядов.,Но каждый временной ряд имеет только одну недавнюю точку.,вместо линий.

2) Вектор диапазона

Range вектор (вектор диапазона) представляет временной ряд за определенный период времени, каждый временной ряд может содержать несколько точек. 。

3) Скаляр

Скаляр (скаляр) обычно представляет собой числовое значение и может иметь только одну последовательность: вектор экземпляра, преобразованный в скаляр.

4) Строка

Простое строковое значение. Строки могут использовать одинарные кавычки ('')、Двойные кавычки ("") или обратные кавычки (``) для указания.

4. Временной ряд (векторный)

Записывайте данные об изменении состояния системы и оборудования в хронологическом порядке, и каждая информация становится образцом.

  • Данные собираются в определенное время,таким образом,со временем,Воля Эти примерные данные записаны,Воля генерирует последовательность дискретных выборочных данных.
  • Эту последовательность еще называют форвектор (Вектор).,Принимая ось времени для за абсциссу и последовательность для за ординату, эти точки данных при соединении образуют матрицу.

1) Состав временного ряда

Каждый временной ряд (Время Серия) определяется именем метрики (Metrics имя) и набор меток (Label набор) назвать из.

если время одинаковое, но название индикатора или набор меток другое, то и временной ряд тоже другой.

2) Состав образца

Каждую точку матрицы середина можно назвать образцом (Sample), причем образец в основном состоит из 3-х аспектной композиции.

  • Метрики: укажите имя метрики (Метрики имя) и набор меток (Label set) имя, например request_total{path="/status",method="GET"}。
  • Метка времени (TimeStamp): по умолчанию это значение имеет точность до миллиметров.
  • Пример значения (Значение): это значение по умолчанию использовать Float64 Тип с плавающей запятой.

Формат хранения временных рядов показателей (Metrics) для пары «ключ-значение».

http_request_total{status="200",method="GET"}@1434417560938=>94355 дляпример,существовать Key-Value связьсередина,94355 как Значение (то есть выборочное значение Sample Значение), фронт из http_request_total{status="200",method="GET"}@1434417560938 равномернокак Key。

3) Состав ключа

  • Metric Name:индексимя(примерребеноксерединаиз http_request_total)
  • Label:Этикетка(примерребеноксерединаиз{status="200",method="GET"})
  • Timestamp:Временная метка(примерребеноксерединаиз@1434417560938)

Метрика Prometheus имеет две формы выражения:

5. Фильтр тегов 4 оператора

  • =:инитьсоответствовать
  • !=:инить Нетсоответствовать
  • =~:иобычныйсоответствовать
  • !~:иобычный Нетсоответствовать

1) Матчер

Устройство соответствия действует на этикетке из,Тег соответствует фильтру позволяет фильтровать временные ряды руководить,Prometheus Полностью поддерживаетсясоответствоватьиобычныйсоответствовать Два режима:полностьюсоответствоватьиРегулярное выражение соответствует

2) Точное совпадение

1. Сопоставитель равенства (=)

Сопоставитель равенства Matcher), используемый для выбора и предоставления строк, идентичных из Этикетке. В следующем примере положения середина будет использоваться фильтр равенства соответствия в соответствии с рядом условий.

Язык кода:javascript
копировать
node_cpu_seconds_total{instance="ydzs-master"}
2. Обнаружитель неравенства (!=)

Сопоставитель неравенства (отрицательное Equality Matcher), используемый для выбора и предоставленной строки, не совпадает с из Этикетка. Оно и равно соответствует прямо противоположному. Например, если вы хотите просмотреть job Не совсем HelloWorld из HTTP Для общего количества запросов вы можете использовать следующий сопоставитель неравенств.

3) Сопоставление регулярных выражений

1. Сопоставитель регулярных выражений (=~)

Сопоставитель регулярных выражений (Regular Expression Matcher), используемый для выбора результата, полученного после предоставления строки, руководит обычной операцией, что эквивалентно соблюдению Этикетки.Prometheus изрегулярная операция — это строгая спецификация из, например регулярное выражение a Будет соответствовать только строкам а, и не будет соответствовать ab или ba или абв. Если вы не хотите указывать строгую функцию, например использовать, вы можете добавить «.*» перед и после регулярного выражения из. например Следующие примеры показывают, что job все основано на Hello Начало из HTTP Общее количество запросов.

Язык кода:javascript
копировать
node_cpu_seconds_total{instance=~"ydzs-.*", mode="idle"}

node_cpu_seconds_totalПрямой эквивалент В{__name__="node_cpu_seconds_total"},Последний также можно использовать так же, как и первый. 4 добрыйсоответствоватьустройство(=,!=,=,!)。напримерподизслучайпример Можетзначит все Hello Начало изиндекс。

Язык кода:javascript
копировать
{__name__="node_cpu_seconds_total",instance=~"ydzs-.*", mode="idle"}
2. Регулярное выражение противоположного сопоставления (!~)

Отрицательное сопоставление регулярного выражения (отрицательное Regular Expression Matcher), используется для выбора предоставленной строки после обычной операции. Результат не соответствует Этикетке. PromQL неправильное выражение, основанное на RE2 изграмматики, но RE2 Нет поддержки вперед, нет.соответствоватьвыражение,так!~из Кажется,какальтернатива,Реализовать функцию исключения указанных значений тегов на основе регулярных выражений. существует селектор, когда середина,Вы можете настроить таргетинг на несколько совпадений для одного и того же тега. примеры пример ниже,Поиск может быть достигнут job имя node и установитьсуществовать/prometheus каталог, но не существующий/prometheus/user извсех файловых систем в каталоге и определите их размер.

Язык кода:javascript
копировать
node_filesystem_size_bytes{job="node",mountpoint=~"/prometheus/.*", mountpoint!~ "/prometheus/user/.*"}

6. Селектор диапазона

Мы можем сделать это, разместив селектор временного диапазона range vector selectors добавить к оператору запросасередина,Указывает, как долго из временного диапазона следует извлекать каждое возвращаемое значение выборки векторного интервала середина. Каждая временная метка из значения Все записывается в обратном хронологическом порядке существования временного ряда серединаиз.,Значение представляет собой соответствующее значение, полученное из временной метки из в пределах временного диапазона.

Временные диапазоны представлены числами, а единицами измерения могут быть одни из следующих единиц времени:

  • с - секунды
  • м - минуты
  • ч - часы
  • д - день
  • ж - неделя
  • у - год

например node_cpu_seconds_total{instance="ydzs-master",mode="idle"} этот оператор запроса, если он добавлен [1m] С помощью этого селектора временного диапазона мы можем получить информацию, как показано ниже:

Язык кода:javascript
копировать
node_cpu_seconds_total{instance="ydzs-master",mode="idle"}[5m]

Это связано с тем, что каждый временной ряд существует и имеет несколько временных меток и несколько значений.,Так что нет возможности визуализировать,Для рисования графики это должен быть скаляр или мгновенный вектор.

Однако обычно интервальный вектор применяет функцию и становится доступным для мгновенного вектора Prometheus. середина имеет множество операций с мгновенными векторами и интервалами векториз функция,Однако в интервальном векторе не так много часто используемых функций.,Наиболее частое использование имеет следующие функции:

  • rate(): Рассчитайте средние темпы роста на каждый интервал временного ряда векторасередина во всем временном диапазоне.
  • irate(): толькоиспользоватьвременной диапазонсерединаизПоследние две точки данныхрассчитать интервалвекторсерединавременной рядиз Каждый Второйсредний темп роста, irate Его можно использовать только для рисования быстрых изменений последовательностей, более рекомендуется использовать анализ долгосрочных тенденций или сигнализацию середина. rate функция.
  • increase(): Вычисляет дельту временного ряда в выбранном временном диапазоне, которая по сути представляет собой скорость, умноженную на номер переключателя временного диапазона.

7. Оператор PromQL

1) Математические операторы

математические операцииСимвол относительно простой,Это простое сложение, вычитание, умножение и деление.

Например: мы проходим prometheus_http_response_size_bytes_sum Можно найти Prometheus этотприложениеиз HTTP Общее количество байт ответа. Но единицей измерения являются байты, мы хотим использовать MB показывать。Тогда мы можем установить это так:prometheus_http_response_size_bytes_sum/8/1024

PromQL поддерживает всю математику следующим образом:

  • + (дополнение)
  • - (Вычитание)
  • * (умножение)
  • / (разделение)
  • % (остаток)
  • ^ (операция возведения в степень)

2) Булевы операторы

логическое значениеПоддержка пользователей на основевременной рядсерединаобразецизценить,Фильтровать временные ряды руководить.

Например: мы можем пройти prometheus_http_requests_total Запросите количество запросов для каждого интерфейса, но мы хотим отфильтровать количество запросов, превышающее 20 А как насчет вторичного интерфейса?

На этом этапе мы можем использовать следующее выражение PromQL:

Язык кода:javascript
копировать
prometheus_http_requests_total > 20

из картинасередина выше мы можем видеть это значение из значения или конкретного из числового значения. Но если мы хотим сопоставить условие данных, значение становиться 1. Не соответствует условию из данных, значения становиться 0。тогда мы сможемиспользоватьbool модификатор.

насиспользоватьподиз PromQL выражение:

Язык кода:javascript
копировать
prometheus_http_requests_total > bool 20

В настоящее время Prometheus поддерживает следующие логические операторы:

  • ==(равный)
  • !=(Нетравный)
  • > (больше чем)
  • <(Маленький В)
  • >=(большой ВИли подожди В)
  • <=(Маленький ВИли подожди В)

3) Установить оператор

проходить Установить операции,Можетсуществоватьдва моментавектори Мгновенныйвектормеждуруководитьсоответствующийиз Установить операции。В настоящее время Прометей Поддерживаются следующие операторы множества:

  • и операция
  • or или операция
  • unless исключить операции
1. и и операции

vector1 and vector2 руководить An и операция создаст новую коллекцию. Оба элемента коллекции серединаиз существуют. vector1 и vector2 середина Все существуютсуществовать。

Например: у нас есть vector1 для A B C,vector2 для B C Д, тогда vector1 and vector2 из Результатдля:B C。

2. операция или или

vector1 and vector2 руководитьодинили операции, будет создана новая коллекция. Коллекция середина содержит vector1 и vector2 Все элементы серединаиз.

Например: у нас есть vector1 для A B C,vector2 для B C Д, тогда vector1 or vector2 из Результатдля:A B C D。

3. Если только операция исключения

vector1 and vector2 руководитьодинили операции, будет создана новая коллекция. Сначала берется набор vector1 Установить все элементы, а затем исключить все существующие vector2 серединажитьсуществоватьизэлемент。

Например: у нас есть vector1 для A B C,vector2 для B C Д, тогда vector1 unless vector2 из Результатдля:A。

4) Приоритет оператора

существует оператор PromQL с серединой приоритета от высокого к низкому для:

  • ^
  • *, /, %
  • +, -
  • ==, !=, <=, <, >=, >
  • and, unless
  • or

8. Встроенные функции PromQL

Prometheus В наличии много других извстроенных функции,Может эффективно обрабатывать данные временных рядов. Некоторые функции имеют параметры по умолчанию.,Например:year(v=vector(time()) instant-vector)。Чтосерединаженьшеньчисло v является мгновенным вектором, если этот параметр не указан, воляиспользовать значение по умолчанию vector(time())。instant-vector Указывает тип параметра.

1) abs()

Язык кода:javascript
копировать
abs(v instant-vector) Возвращает абсолютное значение всех выборок входного векториз.

2)absent()

absent(v instant-vector),ifpass it извекторный параметр с образцом данных,затем вернисьemptyvector;если передать параметр извектора без выборочных данных, затем вернись без названия метрики и с меткой временного ряда и значения выборки для 1。

При мониторинге показателей,если полученный образец данных пуст., использовать absent Метод очень полезен для оповещения. Например:

Язык кода:javascript
копировать
# Примеры данных представлены здесь
absent(http_requests_total{method="get"})  => no data
absent(sum(http_requests_total{method="get"}))  => no data

# Поскольку нет метрики существования несуществующий, поэтому Возвращает временной ряд без имени метрики, с меткой из и значением выборки для1.
absent(nonexistent{job="myjob"})  => {job="myjob"}  1
# обычныйсоответствоватьиз instance Нет, как вернуть labels часть серединаиз
отсутствует(несуществующий{job="myjob",instance=~".*"})  => {job="myjob"}  1

# sum Функция возвращает временной ряд без меток и выборочных данных.
absent(sum(nonexistent{job="myjob"}))  => {}  1

3)ceil()

ceil(v instant-vector) Воля v середина Все значения элементов выборки округляются до ближайшего целого числа. Например:

Язык кода:javascript
копировать
node_load5{instance="192.168.1.75:9100"} # Результатдля 2.79
ceil(node_load5{instance="192.168.1.75:9100"}) # Результатдля 3

4)changes()

changes(v range-vector) Введите вектор интервала, Возвращает количество изменений каждого значения выборки данных в пределах вектора интервала (мгновенного вектора). Например:

Язык кода:javascript
копировать
# если значение выборочных данных не изменилось, затем вернись Результатдля 1
changes(node_load5{instance="192.168.1.75:9100"}[1m]) # Результатдля 1

5)clamp_max()

clamp_max(v instant-vector, max scalar)функция,Введите мгновенное значение вектора., если значение выборки данных больше, чем max, затем измените на для max, в остальном без изменений. Например:

Язык кода:javascript
копировать
node_load5{instance="192.168.1.75:9100"} # Результатдля 2.79
clamp_max(node_load5{instance="192.168.1.75:9100"}, 2) # Результатдля 2

6)clamp_min()

clamp_min(v instant-vector, min scalar)функция,Введите мгновенное векторное минимальное значение., если значение выборки данных меньше min,Затем изменитедля мин, в остальном без изменений. Например:

Язык кода:javascript
копировать
node_load5{instance="192.168.1.75:9100"} # Результатдля 2.79
clamp_min(node_load5{instance="192.168.1.75:9100"}, 3) # Результатдля 3

7)day_of_month()

day_of_month(v=vector(time()) instant-vector)функция, возвращает заданное UTC Время означает существование месяца из Нет. Диапазон возвращаемых значений: 1~31.

8)day_of_week()

day_of_week(v=vector(time()) instant-vector) функция, возвращает заданное UTC Время существуетнеделяиз Нет. Диапазон возвращаемых значений: 0~6, 0 Имеется в виду воскресенье.

9)days_in_month()

days_in_month(v=vector(time()) instant-vector)функция,Возвращает общее количество неба в текущем месяце. Диапазон возвращаемых значений: 28~31.

10)delta()

delta(v range-vector)из Параметрыинтервальный вектор,возвращатьсяодин Мгновенныйвектор。он вычисляетИнтервальный вектор v из Нет Разница между одним элементом и последним элементом. Поскольку эти значения экстраполируются на весь указанный временной диапазон,Таким образом, даже если значение выборки является целым числом,Вы все равно можете получить нецелое значение.

Например, следующий пример возвращает две последние температуры разницы ЦП:

Язык кода:javascript
копировать
delta(cpu_temp_celsius{host="zeus"}[2h])

11)deriv()

deriv(v range-vector)из Параметрыинтервальный вектор, возвращает мгновенный вектор. Он использует простой вектор интервала расчета линейной регрессии. v середина каждый временной ряд является производной. Эта функция обычно использует только существование Gauge Тип из временных рядов.

12)exp()

exp(v instant-vector) Функция, введите мгновенный вектор, верните каждое значение выборки из e из значения индекса, то есть e из N вторая власть. когда N Он будет возвращен, когда значение из станет достаточно большим. +Инф. Специальный случай для:

Язык кода:javascript
копировать
Exp(+Inf) = +Inf
Exp(NaN) = NaN

13)floor()

floor(v instant-vector)Функция и ceil() Противоположная функция, Воля v середина Все значения элементов выборки округляются до ближайшего целого числа.

14)histogram_quantile()

histogram_quantile(φ float, b instant-vector) от bucket Тип извектор b серединавычислить φ (0 ≤ φ ≤ 1) Квантиль (процентиль из общей формы) извыборочное измаксимальное значение. (связанный φ Квантильиз Подробное описание и гистограммакартинаиндекстипизиспользовать,请женьшень阅Гистограммакартинаикраткое содержание)。вектор b серединаиз образец. каждый bucket из Количество точек отбора проб. Каждый образец из labels серединадолжен иметь le этот label представлять каждого bucket верхняя граница, нет le Образцы, помеченные из, игнорируются. Тип индикатора «Гистограмма» автоматически присваивается _bucket суффиксисоответствующий Этикеткаизвременной ряд。Можетиспользовать rate() Функция для указания временного окна для расчета квантиля.

Например:один Гистограммакартинаиндексимя称для сотрудник_age_bucket_bucket, который будет рассчитан в прошлом 10 в течение нескольких минут Нет. 90 процентиль, пожалуйста, обратитесь к следующему выражению:

Язык кода:javascript
копировать
histogram_quantile(0.9, rate(employee_age_bucket_bucket[10m]))

возвращаться:

Язык кода:javascript
копировать
{instance="10.0.86.71:8080",job="prometheus"} 35.714285714285715

Это означает, что недавно 10 в течение нескольких минут 90% изобразецизмаксимальное значениедля 35.714285714285715。

15)holt_winters()

holt_winters(v range-vector, sf scalar, tf scalar)функциябаза Винтервалвектор v, генерирует сглаженные значения для данных временных рядов. коэффициент сглаживания sf Чем ниже, Больше внимания уделяется старым данным. фактор тренда tf Чем выше,Чем больше вы думаете о данных и тенденциях. Это середина,0< sf, tf <=1。holt_winters относится только к Gauge Тип из временных рядов.

16)hour()

hour(v=vector(time()) instant-vector)функциявозвращатьсяданный UTC Время из текущего Нет. Несколько Час, диапазон времени: 0~23.

17)idelta()

idelta(v range-vector)из Параметрыинтервальный вектор, Возвращает мгновенный вектор. Он вычисляет последние из 2 Разница между выборочными значениями. Эта функция обычно использует только существование Gauge Тип из временных рядов.

18)increase()

increase(v range-vector)функция получить интервал векторсерединаиз Нет.a и последний образец и вернуть величину его прироста, это будетсуществовать Когда меняется монотонность(Жую ВВызвано перезапуском цели выборкиизсчитатьустройствосложный Кусочек)автоматическийсерединаперерыв。Зависит от Вэтотценитьэкстраполируется для уточненияизвесьвременной диапазон,Таким образом, даже если значение выборки является целым числом,Вы все равно можете получить нецелое значение.

Например:нижевыражениевозвращатьсяинтервалвекторсередина Каждыйиндивидуальныйвременной рядпрошлое 5 в течение нескольких минут HTTP Количество запросов и рост:

Язык кода:javascript
копировать
increase(http_requests_total{job="apiserver"}[5m])

increase из Тип возвращаемого значения может быть только типом вычисления. Его основная функция — повысить читаемость диаграммы и данных. использовать rate Функция записывает правило изиспользовать ставку, чтобы постоянно отслеживать изменения значений выборки данных из.

19)irate()

irate(v range-vector) Функция используется для расчета скорости роста интервала векториз, но отражает, что из — это мгновенная скорость роста. разгневанный Функция заключается в вычислении скорости роста интервала векторсередина по двум последним данным интервала векторсередина. Она автоматически прерывается при изменении монотонности (например, при сбросе изсчета из-за перезапуска цели выборки). Таким образом, вы можете избежать существования в пределах временного окна «проблемы». с длинным хвостом», и лучше проявил чувствительность, irate Рисунок и значки функций могут лучше отражать мгновенные изменения в выборочных данных.

Например:нижевыражениевозвращатьсяинтервалвекторсередина Каждыйиндивидуальныйвременной рядпрошлое 5 в течение нескольких минуты Последние два примера данныхиз HTTP Количество запросов и темп роста:

Язык кода:javascript
копировать
irate(http_requests_total{job="api-server"}[5m])

20)label_join()

label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)функция Может Волявременной ряд v середина Несколько тегов src_label из значения, пройти separator как коннектор написать новый из тега dst_label середина. Может быть несколько src_label Этикетка.

Например:нижевыражениевозвращатьсяизвременной ряд Болееодин foo тег, значение тега для etcd,etcd-k8s:

Язык кода:javascript
копировать
up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}
=> up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}  1

label_join(up{endpoint="api",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}, "foo", ",", "job", "service")
=> up{endpoint="api",foo="etcd,etcd-k8s",instance="192.168.123.248:2379",job="etcd",namespace="monitoring",service="etcd-k8s"}  1

21)label_replace()

для может сделать иконку клиента более читабельной с помощью label_replace Функция для временных рядов добавляет дополнительную из Этикетка.label_replace Конкретные параметры следующие:

Язык кода:javascript
копировать
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)

Эта функция будет последовательно v серединаиз Каждый временной ряд руководить обрабатывается через regex соответствовать src_label изстоимость, и Волясоответствовать часть relacement написать dst_label Теги середина. Как показано ниже:

Язык кода:javascript
копировать
label_replace(up, "host", "$1", "instance",  "(.*):.*")

После обработки функции временной ряд Воля содержит host тег, хост Тег изValue для Exporter Примеры IP адрес:

Язык кода:javascript
копировать
up{host="localhost",instance="localhost:8080",job="cadvisor"}   1
up{host="localhost",instance="localhost:9090",job="prometheus"}   1
up{host="localhost",instance="localhost:9100",job="node"}   1

22)ln()

ln(v Instant-vector) Вычислить мгновенный вектор v серединавсе выборочные данные представляют собой натуральные логарифмы. Особые обстоятельства:

  • ln(+Inf) = +Inf
  • ln(0) = -Inf
  • ln(x < 0) = NaN
  • ln(NaN) = NaN

23)log2()

log2(v instant-vector)функция Вычислить мгновенный вектор v середина Все выборочные данные из двоичных логарифмов. То же самое для особых обстоятельств.

24)log10()

log10(v instant-vector) Вычислить мгновенный вектор v середина Все выборочные данные представляют собой десятичный логарифм. То же самое для особых обстоятельств.

25)minute()

minute(v=vector(time()) instant-vector)функциявозвращатьсяданный UTC Сейчас время Часиз Нет.Сколько минут. Диапазон результатов: 0~59.

26)month()

month(v=vector(time()) instant-vector)функциявозвращатьсяданный UTC В настоящее время время принадлежит Нет. Месяцев, диапазон результатов: 0~12.

27)predict_linear()

predict_linear(v range-vector, t scalar)функция Можетпредсказыватьвременной ряд v существовать t Второйназадизценить。этобаза Впростая линейная регрессияиз Способ,Статистика по выборочным данным во временном окне,оти Можетверновременной рядиз Делайте прогнозы об изменении тенденций。Должен Функция извозвращаться结果Нет带有мераиндекс,Только список тегов.

Например, на основе 2 Часиз выборочных данных, чтобы предсказать, существует ли доступное дисковое пространство хоста. 4 Когда время закончится, вы можете обратиться к следующему:

Язык кода:javascript
копировать
predict_linear(node_filesystem_free{job="node"}[2h], 4 * 3600) < 0

28)rate()

rate(v range-vector) Функция может напрямую вычислять вектор интервала. v существуют средние темпы роста во временном окне,это будетсуществовать Когда меняется монотонность(Жую ВВызвано перезапуском цели выборкиизсчитатьустройствосложный Кусочек)автоматическийсерединаперерыв。Должен Функция извозвращаться结果Нет带有мераиндекс,Только список тегов.

Например,нижевыражениевозвращатьсяинтервалвекторсередина Каждыйиндивидуальныйвременной рядпрошлое 5 в течение нескольких минут HTTP Темп роста количества запросов на Соединённые Штаты Америки:

Язык кода:javascript
копировать
rate(http_requests_total[5m])

результат:
{code="200",handler="label_values",instance="120.77.65.193:9090",job="prometheus",method="get"} 0
{code="200",handler="query_range",instance="120.77.65.193:9090",job="prometheus",method="get"}  0
{code="200",handler="prometheus",instance="120.77.65.193:9090",job="prometheus",method="get"}   0.2
...

Тип возвращаемого значения функцииrate() можно использовать только в расчете, существующем анализе долгосрочных тенденций или тревоге середина рекомендации использовать эту функцию.

Уведомление:

когда Воля rate() Функция и оператор агрегации (например sum()) или функция агрегирования по времени (все, что начинается с _over_time Окончание функции) вместе с использованием должно быть выполнено первым. rate функцию, затем руководить Операцией агрегирования, в противном случае при перезапуске целевого объекта выборки rate() Невозможно определить, был ли счетчик сброшен.

29)resets()

resets(v range-vector)из Параметрыинтервальный вектор. для каждого временного ряда он возвращает определенное количество сбросов. Уменьшение значения между двумя последовательными выборками распознается как сброс процессора.

этотфункция Обычно используется толькосуществоватьсчитатьустройство Тип из временных рядов.

30)round()

round(v instant-vector, to_nearest=1 scalar) Функция и ceil и floor Функция аналогична и возвращает векторсередина всех выборочных значений, наиболее близких к целому числу. до_ближайшего Параметр не является обязательным, значение по умолчанию — для 1, что указывает на то, что образец, возвращенный из, является наиболее близким 1 из Целое кратное из значения. Вы также можете указать любое значение для для этого параметра (оно также может быть десятичным), указывая, что возвращаемый образец является ближайшим целым числом, кратным его значению.

31)scalar()

scalar(v instant-vector)Функция из Параметрыодинодинэлементиз Мгновенныйвектор,этовозвращаться Чтотолькоизвременной рядизценитькакодинскаляр。еслимераиндексизобразецчисло量большой В 1 или равно 0, затем вернись NaN。

32) sort()

sort(v instant-vector)функцияверновекторв соответствии сэлементизценитьруководить Сортировать по возрастанию,возвращатьсярезультат:key: value = Метрика: выборочное значение [в порядке возрастания].

33)sort_desc()

sort(v instant-vector) функцияверновекторв соответствии сэлементизценитьруководить Сортировать по убыванию,возвращатьсярезультат:key: value = Метрика: выборочное значение [в порядке убывания].

34) sqrt()

sqrt(v instant-vector) вектор вычисления функции v серединавсе элементы из квадратных корней.

35)time()

time()функциявозвращатьсяот 1970-01-01 До настоящего времени существуетиз Второй номер. Уведомление: Возвращает не текущее время напрямую, а временную метку.

36)timestamp()

timestamp(v instant-vector) функция возвращает вектор v серединаиз каждого образца по временной метке (от 1970-01-01 Мы присутствуем Второйчисло)。

Долженфункцияот Prometheus 2.0 версия начала внедряться.

37)vector()

vector(s scalar)функция Воляскаляр s как Нет Этикеткаизвекторвозвращаться,Прямо сейчасвозвращаться Результатдля:key: value= {}, s。

38)year()

year(v=vector(time()) instant-vector)функциявозвращатьсяданный UTC Время текущий месяц.

39)_over_time()

Следующий список функций позволяет передавать интервальный вектор,Они агрегируют каждый временной ряд из диапазона,и возвращает мгновенный вектор:

Язык кода:javascript
копировать
avg_over_time(range-vector) : Каждая метрика в интервале векторизсреднее значение。
min_over_time(range-vector) : Каждая метрика внутри интервала векторизованное значение。
max_over_time(range-vector) : Каждая метрика в интервале векторизмаксимальное значение。
sum_over_time(range-vector) : Найдите каждый индекс метрики в пределах интервала.
count_over_time(range-vector) : Количество выборочных данных для каждой метрики в пределах интервала.
quantile_over_time(scalar, range-vector) : Квантиль каждого индекса метрики и значение выборочных данных в интервале, φ-квантиль (0 ≤ φ ≤ 1)。
stddev_over_time(range-vector) : Каждая метрика в интервале общего стандартного отклонение。
stdvar_over_time(range-vector) : Общее стандартное отклонение каждого показателя в пределах интервала.
12345678

Уведомление:

Даже если распределение значений из внутри интервального вектора неравномерно, веса из при их агрегировании остаются одинаковыми.

8. Операция агрегации PromQL

Prometheus Также предоставлено Операцией агрегированиясимвол,Эти операторы действуют на мгновенный вектор. Может ли Воля переходное выражение вернуться из выборки данных руководить агрегацией?,Сформируйте новый временной ряд. В настоящее время поддерживаются следующие агрегатные функции:

  • сумма (спросить и)
  • min (минимальное значение)
  • max (максимальное значение)
  • avg (среднее значение)
  • stddev (стандартное отклонение)
  • стандартное отклонение (стандартное отклонение)
  • count (считать)
  • count_values (верно value руководитьсчитать)
  • Bottomk (последние n таймингов)
  • topk (максимальные n тайминги)

1) сумма сумма

Используется для поиска записи по значению руководить.

Например:sum(prometheus_http_requests_total) Показывает статистику всех HTTP Количество запросов.

Язык кода:javascript
копировать
sum(prometheus_http_requests_total)

2) минимальное минимальное значение

Вернуть все записи из минимального значения.

Например:min(prometheus_http_requests_total) Представляет собой получение набора данных серединаиз минимального значение。

Язык кода:javascript
копировать
min(prometheus_http_requests_total)

3) максимальное максимальное значение

Вернуть все записи максимального значения.

Например: maxmetheus_http_requests_total)` Представляет собой получение набора данных серединаизмаксимального значение。

Язык кода:javascript
копировать
max(prometheus_http_requests_total)

4) среднее среднее

avg Функция возвращает все записи изсредне значение。

Например:avg(metheus_http_requests_total) Представляет собой получение сбора данных серединаизсреднее. значение。

Язык кода:javascript
копировать
avg(prometheus_http_requests_total)

5) стандартное отклонение стандартного отклонения

Стандартное отклонение (Standartno Deviation) часто используется для описания размера колебаний данных.

Колебания количества HTTP-запросов. Например: Статистика различных HTTP-запросов.

Язык кода:javascript
копировать
stddev(prometheus_http_requests_total)

6) считать, считать

Функция count возвращает все записи.

Например:count(prometheus_http_requests_total) Показывает статистику всех HTTP Количество запросов.

Язык кода:javascript
копировать
count(prometheus_http_requests_total)

7) опустить последние несколько пунктов

bottomk Используется для сортировки значений выборки руководить после возврата текущего значения выборки. N Бит из временного ряда.

Например: получить HTTP После суммы запроса 5 Кусочекизпросить,Можетиспользоватьвыражение:

Язык кода:javascript
копировать
bottomk(5, prometheus_http_requests_total)

8) топк первых нескольких предметов

topk Используется для сортировки значений выборки и возврата текущего значения выборки перед N Бит из временного ряда.

Например: получить HTTP до суммы запроса 5 Кусочекизпросить,Можетиспользоватьвыражение:

Язык кода:javascript
копировать
topk(5, prometheus_http_requests_total)

9. Незаконное резюме PromQL

Из-за всего из PromQL Выражение должно содержать хотя бы одно имя индикатора или хотя бы одно, которое не будет соответствовать пустой строке фильтра меток, поэтому объедините Prometheus Из официальных документов можно выделить следующие незаконные примеры.

Язык кода:javascript
копировать
{job=~".*"} # незаконно! .* представляет любой символ, включая пустые строки и имена индикаторов без имен.

{job=""}    # незаконно!

{job!=""}   # незаконно!

Напротив, следующее выражение является законным из.

Язык кода:javascript
копировать
{job=~".+"}               # законно! .+ означает хотя бы один символ

{job=~".*",method="get"}  # законно! .* представляет любой символ

{job="",метод="post"} # Законно! Сохранить непустое соответствие

{job=~".+",method="post"} # законный!житьсуществоватьодин Не пустойсоответствовать

о На этом объяснение Prometheus PromQL заканчивается.,На самом деле, официальный сайт президентиз предельно ясен.,Тоже не сложно,Это легко освоить, если вы используете больше,Если у вас есть какие-либо вопросы, пожалуйста, оставьте мне сообщение,Мы продолжим обновлять [Cloud Native + Big Data] и статьи в будущем.,Пожалуйста, подождите терпеливо, друзья~

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose