1

flatline使用 ElastAlert 框架创建警报类型。

当我在 Kibana UI 中以完全相同的语法使用查询时,它会返回结果,但 ElastAlert 没有返回任何结果。

这是我的 elastalert-rule-file.xml

name: Test Flatline
type: flatline
run_every:
    seconds: 15
relalert: 
    minutes: 0
es_host: localhost
es_port: 9200
threshold: 1
timeframe: 
    minutes: 5
index: my-index-*
filter: 
- query:
    query_string:
        query: "_type:metric"  # this returns results in both kibana and elastalert
        #query: "_type:metric AND _exists_:My\ Field\ With\ Spaces.value" # this returns results in kibana but not in elastalert

timestamp_type: unix_ms
alert:
  - command
command: ["my-bash-script.sh"]

所以我尝试使用查询,如果我只是指定_type:metric,那么 Kibana 中的搜索结果似乎与 ElastAlert 中的搜索结果相匹配。

但是,当我尝试_exists_在第二个查询中使用带有 lucene 语法的查询时,ElastAlert 不会返回任何内容,而 Kibana 似乎可以使用该语法。

有任何想法吗?

4

2 回答 2

0

我明白了...只是忘记发布答案。

显然对于带有空格的字段,您需要转义反斜杠,因此有问题的行看起来像这样:

query: "_type:metric AND _exists_:My\\ Field\\ With\\ Spaces.value"

此外,在您使用 Ansible (YAML) 配置的特殊情况下,您需要添加一个反斜杠来转义每个反斜杠。

所以 YAML 文件中的条目看起来像这样:

query: "My\\\\ field\\\\ With\\\\ Spaces.value"
于 2018-01-12T19:28:04.093 回答
0

您可以通过对字段数据使用双引号来避免转义:

query: '_type:metric AND _exists_:"My Field With Spaces.value"'
于 2019-10-23T12:04:45.683 回答