2

我最近从 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 分钟(60 秒间隔 5 次)后处理。这不再起作用了,所以现在处理程序应该包含一个过滤器来处理事件:

{
  "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指令,truefalse似乎我对过滤和发生如何进行检查的理解是不正确的。也许检查根本不计算它们的出现?

有人可以帮忙解释一下吗?

4

1 回答 1

3

就目前而言,看起来occurrences您的handlersJSON 块中的拼写错误为occurences.

您将需要"negate": falseeval当前的编写方式。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"
    }
  }
}

这将允许您使用内置过滤器“出现次数”以及您的自定义过滤器。

于 2018-10-30T05:34:43.450 回答