#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 возможных результата:
- Безрезультатно
- my_metric{метка=»1″}
- my_metric{метка=»2″}
- как 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. должны быть и другие творческие способы, но я думаю, что это самый простой из них.