为规则创建过滤器

这篇文档将讲述如何为你的规则配置文件去创建过滤器.

规则中的过滤器语法部分使用的是 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'}

results matching ""

    No results matching ""