Примеры запросов к метрикам Prometheus

Синтаксис запросов

Рассмотрим синтаксис некоторых функций, которые мы будем использовать в нашей инструкции. Проверять все наши запросы можно в веб-интерфейсе прометеуса на странице /graph.

irate или rate

В Prometheus значения для счетчиков всегда возрастают, но как правило, нам нужно знать изменение значения за определенный момент времени. Запрос будет выглядеть так:

irate(<запрос на выборку метрики>[интервал времени, на протяжении которого происходят изменения метрики])

avg by

Среднее значение по условию, например:

avg by (instance)

… среднее для каждого инстанса.

avg_over_time

Среднее значение всех значений для метрик в указанном интервале.

avg_over_time(<запрос на выборку метрики>[интервал])

sum

Функция суммирует полученные результаты:

sum(<запрос на получение значений>)

time

Отображает время в формате UNIX TIME.

time()

count

Считает количество значений:

count(<запрос на получение значений>)

Вместе с by значения могут фильтроваться:

count(<запрос на получение значений>) by (<по какому показателю>)

Арифметические операции

1. С полученными числовыми данными можно выполнять различные математические операции. Например, если мы получим значения времени в секундах, то можно его перевести в часы:

<полученное время> / 60

Или наоборот

<полученное время> * 60

2. Полученный остаток от процентного показателя вычисляется по формуле:

100 — <полученный процент>

Системная информация

Для начала рассмотрим примеры получения общих системных показателей.

Время работы системы

Расчет ведется относительно показателя node_boot_time_seconds (время последнего включения системы).

1. Общее время для всех узлов:

sum(time() — node_boot_time_seconds{})

sum(time() — node_boot_time_seconds{}) / 60

* первый запрос в секундах, второй — в минутах.

2. Для некоторых узлов:

sum(time() — node_boot_time_seconds{instance=~»192.168.0.15:9100|192.168.0.20:9100″})

* в данном примере мы получим сумму значений для узлов 192.168.0.15 и 192.168.0.20.

3. Для всех узлов по отдельности:

time() — node_boot_time_seconds{}

* данный запрос выведет на экран несколько значений для каждого из узлов.

Температура

Данная метрика поддерживается не всем оборудованием или средствами виртуализации.

1. Для всех нод:

node_hwmon_temp_celsius

2. Для конкретных:

node_hwmon_temp_celsius{instance=~’192.168.0.15:9100|192.168.0.20:9100′}

Процессор

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

Количество процессоров

1. Общее количество всех процессоров всех узлов:

sum(count(node_cpu_seconds_total{mode=’system’}) by (cpu))

2. Для некоторых инстансов:

sum(count(node_cpu_seconds_total{instance=~’192.168.0.15:9100|192.168.0.20:9100′,mode=’system’}) by (cpu))

* для 192.168.0.15 и 192.168.0.20.

3. По отдельности:

count(node_cpu_seconds_total{mode=’system’}) by (instance)

Нагрузка

1. На все ядра всех узлов:

(irate(node_cpu_seconds_total{job=»node_exporter_clients»,mode=»idle»}[5m])) * 100

100 — ((irate(node_cpu_seconds_total{job=»node_exporter_clients»,mode=»idle»}[5m])) * 100)

* первый запрос для отображения процента свободного процессорного времени, второй — процент утилизации.

Пример ответа:

{cpu="0", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.6000000238418579
{cpu="0", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.9999999403953552
{cpu="1", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.6000000238418579
{cpu="1", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 1.5999999642372131
{cpu="2", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.8000000193715096
{cpu="2", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.8000001311302185
{cpu="3", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 1.0000000149011612
{cpu="3", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.6000000238418579
{cpu="4", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.19999999552965164
{cpu="4", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.2000001072883606
{cpu="5", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.40000002831220627
{cpu="5", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.3999999165534973
{cpu="6", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.6000000238418579
{cpu="6", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.2000001072883606
{cpu="7", instance="192.168.0.15:9100", job="node_exporter_clients", mode="idle"} 0.19999999552965164
{cpu="7", instance="192.168.0.20:9100", job="node_exporter_clients", mode="idle"} 0.3999999165534973

2. Средняя величина по ядрам для всех узлов:

avg by (instance)(irate(node_cpu_seconds_total{job=»node_exporter_clients»,mode=»idle»}[5m])) * 100

100 — (avg by (instance)(irate(node_cpu_seconds_total{job=»node_exporter_clients»,mode=»idle»}[5m])) * 100)

* первый запрос для отображения процента свободного процессорного времени, второй — процент утилизации.

Пример ответа:

{instance="192.168.0.15:9100"} 0.7999999960884452
{instance="192.168.0.20:9100"} 0.9500000253319598

3. Средняя величина по ядрам для конкретного узла:

avg by (instance)(irate(node_cpu_seconds_total{instance=»192.168.0.15:9100″,job=»node_exporter_clients»,mode=»idle»}[5m])) * 100

100 — (avg by (instance)(irate(node_cpu_seconds_total{instance=»192.168.0.15:9100″,job=»node_exporter_clients»,mode=»idle»}[5m])) * 100)

* первый запрос для отображения процента свободного процессорного времени, второй — процент утилизации.

Пример ответа:

{instance=»192.168.0.15:9100″} 1.100000003352747

Время ожидания

Запрос показывает значение в процентном эквиваленте для времени ожидания процессора. На практике, идеально, когда он равен нулю.

1. Среднее значение за 30 минут для всех узлов:

avg(irate(node_cpu_seconds_total{mode=»iowait»}[30m])) * 100

2. Для конкретного узла:

avg(irate(node_cpu_seconds_total{instance=~»192.168.0.15:9100|192.168.0.20:9100″,mode=»iowait»}[30m])) * 100

3. Отдельно по каждой ноде:

irate(node_cpu_seconds_total{mode=»iowait»}[30m]) * 100

Оперативная память

Для наших запросов мы будем использовать метрики:

  • node_memory_MemTotal_bytes.
  • node_memory_MemFree_bytes.
  • node_memory_Cached_bytes.
  • node_memory_Buffers_bytes.

Рассмотрим примеры.

Объем памяти

1. Для всех узлов:

sum(node_memory_MemTotal_bytes{})

2. Для некоторых:

sum(node_memory_MemTotal_bytes{instance=~»192.168.0.15:9100|192.168.0.20:9100″})

3. По отдельности:

node_memory_MemTotal_bytes{}

Использование памяти

1. Свободно:

100 * (1 — ((avg_over_time(node_memory_MemFree_bytes[5m]) + avg_over_time(node_memory_Cached_bytes[5m]) + avg_over_time(node_memory_Buffers_bytes[5m])) / avg_over_time(node_memory_MemTotal_bytes[5m])))

2. Занято:

100 * ((avg_over_time(node_memory_MemFree_bytes[5m]) + avg_over_time(node_memory_Cached_bytes[5m]) + avg_over_time(node_memory_Buffers_bytes[5m])) / avg_over_time(node_memory_MemTotal_bytes[5m]))

Пример ответа:

{instance="192.168.0.15:9100", job="node_exporter_clients"} 41.96494651116369
{instance="192.168.0.20:9100", job="node_exporter_clients"} 10.573695601658944

Сеть

Мы будем использовать метрики:

  • node_network_receive_bytes_total
  • node_network_transmit_bytes_total

Примеры ниже.

Передача данных

1. Входящий трафик за последние 5 минут:

rate(node_network_receive_bytes_total[5m]) * 8 / 1024 / 1024

2. Иcходящий трафик за последние 5 минут:

rate(node_network_transmit_bytes_total[5m]) * 8 / 1024 / 1024

Дисковый накопитель

Используемые метрики:

  • node_filesystem_size_bytes.
  • node_filesystem_avail_bytes.
  • node_filesystem_free_bytes.
  • node_disk_read_bytes_total.
  • node_disk_written_bytes_total.

Переходим к примерам.

Объемы

1. Объем разделов:

node_filesystem_size_bytes{instance=~’192.168.0.15:9100|192.168.0.20:9100′,fstype=~»ext4|xfs»}

node_filesystem_size_bytes{fstype=~»ext4|xfs»}

* для конкретных нод или всех.

2. Объем доступного пространства:

node_filesystem_avail_bytes {fstype=~»ext4|xfs»}

3. Объем в процентах.

Используется:

1 — (node_filesystem_free_bytes{fstype=~»ext4|xfs»} / node_filesystem_size_bytes{fstype=~»ext4|xfs»})

Свободно:

node_filesystem_free_bytes{fstype=~»ext4|xfs»} / node_filesystem_size_bytes{fstype=~»ext4|xfs»}

Нагрузка

1. Чтение в килобайтах:

rate(node_disk_read_bytes_total{instance=»Server10:9100″, device=»sda»}[5m]) / 1024

irate(node_disk_read_bytes_total{}[30m]) / 1024

* для конкретного сервера / диска и для всех серверов и всех дисков.

2. Запись в килобайтах:

rate(node_disk_written_bytes_total{instance=»Server10:9100″, device=»sda»}[5m]) / 1024

irate(node_disk_written_bytes_total{}[30m]) / 1024

* для конкретного сервера / диска и для всех серверов и всех дисков.

Источник: https://sidmid.ru/примеры-запросов-к-метрикам-prometheus/

Was this helpful?

0 / 0