Sensu: лучшие практики для обработки чека только после n случаев

Недавно я обновил Sensu 0.24 до 1.2 и заметил, что проверки запускаются немедленно для указанных обработчиков.

На старых проверках (с v0.24) проверки имели атрибут "происшествия" для фильтрации шума. Я только хочу, чтобы чеки обрабатывались обработчиками в каждом случае n, т. Е. Проверка http не должна выполняться 5 раз, прежде чем будет запущен обработчик pagerduty. Это поведение, похоже, изменилось с обновлением Sensu.

Как я понимаю, обработчик должен включать фильтр для сортировки событий на основе атрибутов. Итак, предположим, что это мой чек:

 {
  "checks": {
    "examplecom_http": {
      "command": "check-http.rb --url https://example.com -s -k -q 'Keyword'",
      "handlers": ["default","pagerduty"],
      "subscribers": ["network"],
      "interval": 60,
      "occurrences": 5
    }
  }
}

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

{
  "handlers": {
    "pagerduty": {
      "type": "pipe",
      "command": "/etc/sensu/plugins/pagerduty.rb",
      "severities": ["critical"],
      "filter": "occurences"
    }
  }

И фильтр "происшествия" будет выглядеть так:

{
  "filters": {
    "occurences": {
      "attributes": {
        "occurrences": "eval: value >= 5"
      }
    }
  }
}

Однако, что бы ни случилось после eval часть, будь то value >= 5 или же value < 5, эффект тот же, и обработчик pagerduty выполняется. Я пытался использовать negate директива с true а также false но, похоже, мое понимание того, как фильтрация и события работают для проверок, просто неверно. Может быть, чеки вообще не считают их?

Может кто-нибудь помочь и объяснить это?

1 ответ

Как оно стоит сейчас, похоже occurrences в вашем handlers Блок JSON написан неправильно как occurences.

Ты захочешь "negate": false так, что ваш eval в настоящее время написано. когда negate является falseэто означает, что обработчик сработает только тогда, когда оценка фильтра верна - negate просто перевернет результат, чтобы обработчики сработали, когда оценка фильтра ложна.

Наконец, если вы хотите вызвать обработчик "каждые n вхождений" вместо каждого вхождения после 5-го, рассмотрите следующую оценку:

{
  "filters": {
    "every_five": {
      "attributes": {
        "occurrences": "eval: value % 5 == 0"
      }
    }
  }
}

Таким образом, когда число вхождений делится на 5, обработчик сработает, но вам нужно будет добавить every_five фильтр к определению вашего обработчика. Ты можешь измениться filter в filters и вместо этого передайте массив, вот так:

{
  "handlers": {
    "pagerduty": {
      "type": "pipe",
      "command": "/etc/sensu/plugins/pagerduty.rb",
      "severities": ["critical"],
      "filters": [
        "occurrences",
        "every_five"
    }
  }
}

Это позволит вам использовать встроенный фильтр "вхождения", а также ваш собственный фильтр.

Другие вопросы по тегам