需要一个在预定时间前 5 分钟开始的 elasticsearch 查询过滤器范围

Need an elasticsearch query filter range which starts 5 minutes before scheduled time

我正在使用 elasticsearch 6.5.4 和一个 kibana 观察器来发出警报。 我有一个像这样的过滤器范围:

"filter": [
  {
    "range": {
      "@timestamp": {
        "gte": "{{ctx.trigger.scheduled_time}}||-{{ctx.metadata.triggered_interval}}m"
      }
    }
  }
]

scheduled_time是每小时第5分钟(1:05,2:05等)triggered_interval是60。

我想收集一系列@timestamps,忽略最近的 5 分钟。基本上,某些状态消息可能对真正的错误来说太新了,所以想忽略它们。

我正在尝试制作它,因此它的内容如下:开始时间为 trigger.scheduled_time - 5m,结束时间为 triggered_interval.

范围格式为time1-time2,所以scheduled_time-5m-triggered_interval是无效语法。 我尝试了几次迭代,但似乎没有任何效果。观察者只是 returns 空指针异常。

"gte": "<{{{ctx.trigger.scheduled_time}}||-5m}>-{{ctx.metadata.triggered_interval}}m"
"gte": "<{{ctx.trigger.scheduled_time}}||-5m>-{{ctx.metadata.triggered_interval}}m"
"gte": "{{ctx.trigger.scheduled_time}}||-5m-{{ctx.metadata.triggered_interval}}m"
"gte": "({{ctx.trigger.scheduled_time}}||-5m)-{{ctx.metadata.triggered_interval}}m"

这可以在范围过滤器中执行吗?

elasticsearch date math functionality together with a range query 应该可以解决问题。

如果你想要 select 所有超过 5 分钟和低于 60 分钟的事件,相对于执行时间,我会这样做:

"filter": [
  {
    "range": {
      "@timestamp": {
        "lte": "now-5m/m",
        "gte": "now-60m/m"
      }
    }
  }
]

换句话说:获取所有事件,其中@timestamp 早于 5 分钟但不早于 60 分钟,所有 @timestamps 都四舍五入到整分钟。如果您不需要四舍五入,只需删除 /m.

干杯!