首页 > 解决方案 > 基于 ES REST API 查询创建 Kibana 可视化

问题描述

我有一个可以在 Kibana 控制台中运行的查询。它返回我们在按作业名称分组的某个内部集群上运行的所有作业,聚合显示每个作业的成功和错误计数。我可以像这样通过控制台运行它:

GET /jobs-*/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "kind": "job"
          }
        }
      ]
    }
  },
  "aggs": {
    "jobs": {
      "terms": {
        "field": "job.keyword"
      },
      "aggs": {
        "results": {
          "filters": {
            "other_bucket_key": "unsuccessful",
            "filters" : {
              "successful" :   { "match" : { "result" : "success"   }}
            }
          }
        }
      }
    }
  }
}

响应看起来像这样:

"aggregations" : {
    "jobs" : {
      "doc_count_error_upper_bound" : 28316,
      "sum_other_doc_count" : 60708253,
      "buckets" : [
        {
          "key" : "SomeJobName",
          "doc_count" : 38410,
          "results" : {
            "buckets" : {
              "successful" : {
                "doc_count" : 38206
              },
              "unsuccessful" : {
                "doc_count" : 204
              }
            }
          }
        },
        ...
}

我想将其放入某种可视化(可能是数据表)中,其中包含 3 列:作业名称、成功、不成功,并且我希望该表仅按“不成功”列的计数显示其中的前 N ​​个。

我对 ES 和 Kibana 还很陌生,所以我花了一段时间才让这个聚合工作,现在我不知道如何使用这个查询来构建一个可视化,因为看起来可视化想要我使用某种 GUI 和限制性 KQL 或 Lucene 语法来构建查询,而不是仅仅粘贴在这个请求中。

有什么我忽略的吗?如何从这些结果中获得有用的可视化?

标签: elasticsearchkibanaelasticsearch-aggregation

解决方案


Kibana 只能以相反的方式工作——您可以构建可视化,然后检查它们背后的查询。粘贴请求并让系统“弄清楚”您要显示的内容和方式是不可行的。我希望不是。

但回到最初的问题——构建查询时不需要 KQL 或 Lucene 语法——你也可以使用查询 DSL!

在此处输入图像描述

在此处输入图像描述

但是聚合确实需要 KQL 或 Lucene ......

至于数据表,这是我能得到的最接近的: 在此处输入图像描述


当 Kibana 不削减它时,您需要自己创建图表/图表/表格。但在此之前,请查看retool.com(无从属关系)。它们让您连接到 ES,对 ES 响应进行后处理,并以一种超级简单的方式创建您喜欢的数据表。会推荐。


推荐阅读