Проблема/Вопросы выражения Prometheus Alertmanager, касающиеся списков

#expression #prometheus-alertmanager #alertmanager

Вопрос:

Я пытаюсь создать выражение prometheus-alert, которое проверяет, установлена ли точка монтирования, и отправляет предупреждение, если точка монтирования отсутствует .. Идея была примерно такой:

 groups:  - name: mountpoints   rules:  - alert: /ghome missing   expr: absent(node_filesystem_avail_bytes{mountpoint="/ghome", instance="my.machine.org:9100"})   for: 60s  labels:  severity: critical  annotations:  summary: "/ghome missing on ({{ $labels.instance }})."  description: "VALUE = {{ $value }}n LABELS = {{ $labels }}"  

Это вроде как работает. Но есть ли способ передать список/вектор в точку(ы) монтирования и/или экземпляр(ы).

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

У меня была идея попробовать регулярные выражения, такие как

 expr: absent(node_filesystem_avail_bytes{mountpoint=~"/ghome|/something|/other", instance=~"my.machine.org:9100|another.machine.org:9100"})   

.. но это, очевидно, не работает.

У кого-нибудь есть идея, как это реализовать ?

Приветствия

Volker

Ответ №1:

Когда мы передаем такое выражение , как absent(my_metric{label=~"1|2"}) , это оценивается как таковое: my_metric{label=~"1|2"} может вернуть 4 возможных результата:

  1. Безрезультатно
  2. my_metric{метка=»1″}
  3. my_metric{метка=»2″}
  4. как my_metric{метка=»1″}, так и my_metric{метка=»2″}

И absent затем функция вызывается по этим результатам, и для того, чтобы функция не возвращала «1», она будет делать это только тогда, когда результатов нет. Отсутствует случай, когда 1 из них отсутствует.

К сожалению, для этого нет единой строки, нам придется четко указать, что отсутствует, мы можем либо иметь несколько правил оповещения, либо использовать or оператора, такого как:

absent(my_metric{label="1"}) or absnet(my_metrci{label="2"})

Комментарии:

1. Хорошо,вы будете иметь это в виду .. спасибо,что это помогает хотя бы уменьшить правила .. поэтому я использую несколько правил,таких как:»отсутствует(node_filesystem_avail_bytes{экземпляр=»foo.bar.de:9100″, точка монтирования=»/homex»}) или отсутствует(node_filesystem_avail_bytes{экземпляр=»foo.bar.de:9100″, точка монтирования=»/homey»}) или отсутствует(node_filesystem_avail_bytes{экземпляр=»foo.bar.de:9100″, точка монтирования=»/homey»}) или отсутствует (node_filesystem_avail_bytes {экземпляр = «foo .bar. de: 9100», точка установки = «/ homez»}) или….. «У вас есть какая-нибудь альтернативная идея, как проверить, существует ли точка монтирования ?

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