0

我有如下文件:

Type 1 (stats from component A) -  
_sources {
    "@version": "1",
    "@timestamp": "2015-11-02T06:50:11.170Z",
    "stat_type": 1,
    "ConnectionCount": 1,
    "ReceivedCount": 2,
    "AcceptedCount": 0,
    "host": "my-pc",
    "component_type": "A",
}

Type 2 (Stats from component B) - 
_sources {
    "@version": "1",
    "@timestamp": "2015-11-02T06:50:11.170Z",
    "stat_type": 1,
    "SuccessCount": 2,
    "host": "my-pc",
    "component_type": "B",
}

从这两种类型的文档中,我想做以下事情 -

  1. 如果 doctypeA 的 ReceivedCount 大于 0,则从 doctypeB 获取 SuccessCount。
  2. 如果它们不匹配,则使用 elastalert 发出警报。

我有弹性搜索和 elastalert 的基本知识。

我试图理解 elasticserach 脚本来查询 elasticsearch,但由于两条记录中的列不同而无法做到。

请指导。

4

1 回答 1

0

我正要发布并回答建议使用nestedorparent-child文档来执行此“JOIN”,但后来我意识到仍然不可能为“doc 的字段值与 docA的值不同的文档”创建查询B

您可以使用术语聚合来获取 的不同值AcceptedCount,然后为每个不同的值x查询“documents WHERE AcceptedCount = xAND SuccessCount != x”(使用mustmust_not术语过滤器一起)。如果不同值的数量很少,这应该不会有非常糟糕的性能AcceptedCount,不同的过滤器可以放在一个should块中,因此单个 ES 查询就足够了。

此查询可以在component_typesAB存储在嵌套文档中的文档上执行。如果还有其他组件类型,那么您也需要嵌套文档。文档_id将由 和 的“自然键”timestamp生成。hoststart_type

于 2015-11-03T13:47:19.120 回答