为规则创建过滤器
这篇文档将讲述如何为你的规则配置文件去创建过滤器.
规则中的过滤器语法部分使用的是 Elasticsearch 查询 DSL, 更详细的文档可以在https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html找到.此文档介绍了一部分特别有用的过滤器.
过滤器部分以如下的方式传递给Elasticsearch:
filter:
and:
filters:
-[filters from rule.yaml]
这些过滤器匹配的结果将会传递给规则进行处理.
一般过滤规则:
query_string
query \ _string类型遵循Lucene查询格式,可用于对多个字段进行部分或完全匹配.查看http://lucene.apache.org/core/2_9_4/queryparsersyntax.html获取更多相关信息:
filter:
-query:
query_string:
query:
"username: bob"
-query:
query_string:
query:
"_type: login_logs"
-query:
query_string:
query:
"field: value OR otherfield: othervalue"
-query:
query_string:
query:
"this: that AND these: those"
term
term类型允许精确的字段匹配:
filter:
-term:
name_field:"bob"
-term:
_type:"login_logs"
请注意,如果字段被分析(analyzed)那么term查询可能返回非预期的结果.默认的,许多字符串字段被空格标记,对于"foo bar"的查询可能与某个字段值为"foo bar"的不匹配,除非没有分析.反过来,字段"foo"的term查询将会匹配分析字段"foo bar"和"foo baz".如果需要字段的全文匹配,请使用 query_string.查看https://www.elastic.co/guide/en/elasticsearch/guide/current/term-vs-full-text.html获取更多内容.
terms
Terms 允许轻松的组合多个term过滤器:
filter:
-terms:
field:["value1","value2"]
使用 minimum_should_match 选项,你可以定义一组必须匹配的Term过滤器:
-terms:
fieldX:["value1","value2"]
fieldY:["something","something_else"]
fieldZ:["foo","bar","baz"]
minimum_should_match:2
通配符
使用通配符匹配:
filter:
-query:
wildcard:
field:"foo*bar"
range
如何引用range到字段:
filter:
-range:
status_code:
from:500
to:599
与,或,非
任何过滤器都可以嵌入到'与','或','非'的关系当中:
filter:
-or:
-term:
field:"value"
-wildcard:
field:"foo*bar"
-and:
-not:
term:
field:"value"
-not:
term:
_type:"something"
直接通过 Kibana 3加载过滤器
有两种方式可以通过Kibana 3 仪表盘直接加载过滤器,你可以按照如下方式配置:
filter:
download_dashboard:"My Dashboard Name"
当ElastAlert启动,它将会从Elasticsearch下载仪表盘模板从而获得过滤器.然而,如果在ElastAlert启动时仪表盘名字修改了或者有任何连接问题,规则将不会加载并且ElasicAlert将会退出,并返回一条类似"Could not download filters for.. 不能从...下载过滤器."的消息.
第二种方式是使用Kibana仪表盘生成一个配置文件.要做到这一点,请运行elastalert-rule-from-kibana
.
$ elastalert-rule-from-kibana
Elasticsearch host: elasticsearch.example.com
Elasticsearch port: 14900
Dashboard name: My Dashboard
Partial Config file
-----------
name: My Dashboard
es_host: elasticsearch.example.com
es_port: 14900
filter:
- query:
query_string: {query: '_exists_:log.message'}
- query:
query_string: {query: 'some_field:12345'}