【问题标题】:Kibana: Limit results to last 5 minutesKibana:将结果限制为持续 5 分钟
【发布时间】:2020-12-17 04:17:22
【问题描述】:

我的 Kibana 仪表板上有一个实时访客计数器。为了实现这一点,我创建了 IP 地址的唯一计数,并将结果限制在查询的最后 5 分钟内:

@timestamp:now-5m

这从几个月前开始工作。我不知道 Kibana 中是否发生了某些变化,至少 @timestamp 字段仍然存在,但似乎“now-5m”语法不再起作用。结果集始终为空。

有人可以向我提供有关如何使用 Kibana 可视化创建实时访客计数器的正确查询或替代解决方案吗?

这是底层查询:

"query": {
  "bool": {
    "must": [],
    "filter": [
      {
        "bool": {
          "should": [
            {
              "range": {
                "@timestamp": {
                  "gte": "now-5m",
                  "lte": "now-5m",
                  "time_zone": "Europe/Berlin"
                }
              }
            }
          ],
          "minimum_should_match": 1
        }
      },
      {
        "range": {
          "@timestamp": {
            "format": "strict_date_optional_time",
            "gte": "2020-08-27T22:00:00.000Z",
            "lte": "2020-08-28T21:59:59.999Z"
          }
        }
      }
    ],
    "should": [],
    "must_not": []
  }
},

我认为问题出在这里:

"gte": "now-5m",
"lte": "now-5m",

应该是这样的:

"gte": "now-5m",
"lte": "now", 

但是如何在查询字段中实现这一点呢?

【问题讨论】:

  • 是什么让您认为它不再起作用了?您可以分享任何错误吗?底层查询的外观如何(从 Inspect 获取)?
  • @Val 感谢您的提示,检查提供了更多信息。我相应地更新了我的问题。
  • 为什么同一个字段有两个不同的约束?第二个来自时间选择器,第一个是自定义的?你是怎么指定的?通过过滤器?
  • Kibana 正在创建这些约束。第一个是我的过滤器,用于获取访客计数器最后 5 分钟的结果,第二个是来自 Kibana Dashboard 的过滤器,用于显示当天所有可视化的结果。
  • 我在 Kibana 中使用“发现”查询。请参阅我更新的问题中的屏幕截图。

标签: elasticsearch kibana


【解决方案1】:

好的,你需要切换到Lucene表达式语言,然后你只需要这样写:

@timestamp:[now-5m TO now]

这定义了一个range 查询

另一个(更好的)解决方案是使用“介于”运算符创建过滤器(添加过滤器),而不是将查询写入搜索栏。它会更好地工作,您可以在搜索栏中坚持使用 KQL。

【讨论】:

  • 我收到 KQL 查询的错误:[esaggs] > 应为“(”、值、空格但 ">" 找到。时间戳:>=now-5m 和时间戳:
  • 嗯,是的,对,你可以尝试切换到 Lucene 查询语言而不是 KQL 吗?
  • 成功了,非常感谢!所以解决方法是切换到Lucene查询语言,使用“[now-5m TO now]”表达式。奇怪的是之前的语法突然停止工作了。
  • 另一种(更好的)解决方案是使用“介于”运算符创建过滤器(添加过滤器),而不是将查询写入搜索栏。它会更好地工作,您可以在搜索栏中坚持使用 KQL。
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 2018-01-02
  • 2014-12-07
  • 1970-01-01
  • 2018-02-07
相关资源
最近更新 更多