从Kibana获取elasticsearch查询

时间:2015-07-03 15:55:34

标签: python elasticsearch logstash kibana

我想在elasticsearch.count(index=indices, body=query)中为查询转换以下kibbana elasticsearch查询。

目标是获取给定时间戳(最近24小时)的计数,cluster和integer_field> 0

  • 时间戳:日期类型
  • cluster:string
  • integer_field:long(值 大多是更大的整数)

查询(从Kibana获得)

curl -XGET 'some-url:9200/logstash-2015.07.03,logstash-2015.07.02/_search?pretty' -d '{
  "facets": {
    "0": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "10m"
      },
      "global": true,
      "facet_filter": {
        "fquery": {
          "query": {
            "filtered": {
              "query": {
                "query_string": {
                  "query": "*"
                }
              },
              "filter": {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "@timestamp": {
                          "from": 1435840604940,
                          "to": 1435927004940
                        }
                      }
                    },
                    {
                      "fquery": {
                        "query": {
                          "query_string": {
                            "query": "integer_field:(>0)"
                          }
                        },
                        "_cache": true
                      }
                    },
                    {
                      "fquery": {
                        "query": {
                          "query_string": {
                            "query": "cluster:(\"YYY\")"
                          }
                        },
                        "_cache": true
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "size": 0
}'

我已经为其他案例撰写了查询。只有这种情况,我被卡住了。帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

您正在寻找的查询比Kibana强制自动生成的查询简单。一般来说,从Kibana中提取它们时,您需要查找“已过滤”的查询部分。从那里,您可以删除通配符条件。

{
  "query": {
    "filtered": {
      "filter": {
        "bool" : {
          "must" : [
            {
              "term" : {
                "cluster" : "YYYY"
              }
            },
            {
              "range" : {
                "integer_field" : {
                  "gt" : 0
                }
              }
            },
            {
              "range" : {
                "@timestamp" : {
                  "gt" : "now - 24h"
                }
              }
            }
          ]
        }
      }
    }
  }
}

“群集”term过滤器是唯一可能无法“使用”的过滤器。 term过滤器与索引值的精确匹配,因此如果它不是字面上的“YYYY”(例如,“yyyy”),则它将不匹配。您可能希望{ "term": { ... } }为:

{
  "fquery" : {
    "query" : {
      "match" : {
        "cluster" : "YYYY"
      }
    }
  }
}