Назад | Перейти на главную страницу

Предупреждение Прометея не сработало

У меня есть 5 предупреждений в настройках Prometheus. 3 из них работают как положено. Однако у меня есть 2, которые никогда не срабатывают. Я действительно сбит с толку, и здесь мне нужна помощь.

Итак, 2 правила, которые не работы:

alert: CriticalDiskSpace
expr: node_filesystem_free{filesystem!~"^/run(/|$)",fstype!~"tmpfs",job="{{
  $labels.job }}"} / node_filesystem_size{job="{{ $labels.job }}"} <
  0.25
for: 4m
labels:
  severity: critical
annotations:
  description: '{{ $labels.instance }} of job {{ $labels.job }} has less than 25%
    space remaining.'
  summary: Instance {{ $labels.instance }} - Critical disk space usage

alert: CriticalCPULoad
expr: (100
  * (1 - avg by(instance) (irate(node_cpu{job="{{ $labels.job }}",mode="idle"}[2m]))))
  > 75
for: 2m
labels:
  severity: critical
annotations:
  description: '{{ $labels.instance }} of job {{ $labels.job }} has Critical CPU load
    for more than 2 minutes.'
  summary: Instance {{ $labels.instance }} - Critical CPU load

Когда я запускаю правила вручную в Prometheus, я получаю правильные значения. Например, для жесткого диска у меня есть тестовый экземпляр, где FS составляет 79%, поэтому он должен сработать.

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       50G   40G   11G  79% /

node_filesystem_free{filesystem!~"^/run(/|$)",fstype!~"tmpfs",fstype!~"rootfs", job="ec2_eu_west_1_discovery"} / node_filesystem_size{job="ec2_eu_west_1_discovery"} < 0.25

И, конечно же, Прометей имеет правильное значение:

Element:
{device="/dev/xvda1",fstype="xfs",instance="Grafana Test",job="ec2_eu_west_1_discovery",mountpoint="/"}
Value: 
0.21932882130469517

Я нашел способ заставить правило срабатывать.

Итак, если я изменю выражение с этого:

node_filesystem_free{filesystem!~"^/run(/|$)",fstype!~"tmpfs",job="{{
  $labels.job }}"} / node_filesystem_size{job="{{ $labels.job }}"} <
  0.25

к этому:

node_filesystem_free{filesystem!~"^/run(/|$)",fstype!~"tmpfs"} / node_filesystem_size < 0.25

Я получаю предупреждение. Итак, теперь мне нужно понять, почему в браузере правил я могу использовать {job = "{{$ labels.job}}"}, а не файл rules.yml.