ElastAlert 将查询和范围组合成一个 OR 子句

ElastAlert combining query and range into an OR clause

我有一个 kibana 查询来查找结果为“HTTP 5xx”或响应代码大于等于 400 的所有事务

service.name : "my-service" AND transaction.name : "my-transaction" AND (transaction.result: "HTTP 5xx" OR http.response.status_code >= 400)

我需要在 ElastAlert 规则(.yaml 文件)中使用相同的查询。我可以在 range 中使用状态代码,它将作为 AND 子句与查询一起使用,但是我如何在下面使用 transaction.result

filter:
- query:
   query_string:
    query: 'service.name : "my-service" AND transaction.name : "my-transaction"'
- range:
    http.response.status_code:
      gt: 399  

任何人都可以帮助如何包含这个吗?

您可以在过滤器定义中使用 and and or

filter:
  - and:
      - query:
          query_string:
            query: >-
              service.name : "my-service" AND transaction.name :
              "my-transaction"
      - or:
          - term:
              transaction.result: HTTP 5xx
          - range:
              http.response.status_code:
                gt: 399

或者您也可以删除 query_string 查询并将其拼写成单独的查询:

filter:
  - and:
      - term:
          service.name: my-service
      - term:
          transaction.name: my-transaction
      - or:
          - term:
              transaction.result: HTTP 5xx
          - range:
              http.response.status_code:
                gt: 399