【问题标题】:ELK querying with python - Multiple conditionsELK 使用 python 查询 - 多个条件
【发布时间】:2021-11-12 07:09:39
【问题描述】:

我正在尝试使用以下查询来查询 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" 的所有样本,并且我还想要获得一个特定的时间窗口。上述查询的正确格式是什么?我也有指定时间戳的问题。时间戳的格式是[2021-07-14T05:24:07.000Z],如何使用特定的时间戳进行查询? 谢谢!

【问题讨论】:

    标签: python elk querying


    【解决方案1】:

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

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

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

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

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

    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'
            }
          }
        }
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2016-01-15
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多