ELK 使用 python 查询 - 多个条件

ELK querying with python - Multiple conditions

我正在尝试使用以下查询查询 ELK:

query = {
      "query": {
        "match" : { "event.action" : "ssh_login" },
        "range": {
          "timestamp": {
            "gte": "now-2d/d",
            "lt": "now/d"
          }
        }
      }
    }

但是我收到以下错误:

RequestError: RequestError(400, 'parsing_exception', '[match] malformed query, expected [END_OBJECT] but found [FIELD_NAME]')

我想要 "event.action" 等于 "ssh_login" 的所有样本,我还想获得特定时间 window。上述查询的正确格式是什么?我也有指定时间戳的问题。时间戳的格式是[2021-07-14T05:24:07.000Z],如何使用具体的时间戳进行查询? 谢谢!

首先,最好提供更多的上下文,至少包括以下内容:

  • ES 版本
  • Python版本
  • Elasticsearch python 客户端版本
  • 索引映射

也就是说,我会做出一些假设并继续。

  • ES : 7.14.0
  • Python : 3.7.7
  • Elasticsearch Python 客户端:7.14.1
  1. 查询

您必须使用 bool 查询才能有多个 queries/conditions 来查找相关文档。

from elasticsearch import Elasticsearch
es = Elasticsearch()

body = {
  'query': {
    'bool': {
      'must': [
        {'term': {'event.action': {'value': 'ssh_login'}}},
        {'range': {'timestamp': {'gte': '2020-01-01T01:01:01.000Z'}}}
      ]
    }
  }
}
es.search(index="YOUR INDEX NAME", body=body)
  1. 时间戳

这取决于您的映射。在我的示例中,我使用了以下映射。

{
  'test': {
    'mappings': {
      'properties': {
        'event': {
          'properties': {
            'action': {
              'type': 'keyword'
            }
          }
        },  
        'timestamp': {
          'type': 'date'
        }
      }
    }
  }
}

如果您指定的自定义日期格式与您尝试查询的格式不兼容,则可能会引发错误。