ElastAlert笔记

ElastAlert官方文档

安装参考

curl -H 'Content-Type: application/json' -X POST "http://192.168.254.128:9200/logstash-2017.08.28/test"  -d '{
"@timestamp": "2017-08-28T10:54:41.000Z",
"field": "value"
}'


curl -H 'Content-Type: application/json' -X POST "http://192.168.254.128:9200/logstash-2019.05.09/test"  -d '{
"@timestamp": "2019-05-10T10:25:41.000Z",
"field": "value"
}'



-- 黑名单数据
curl -H 'Content-Type: application/json' -X POST "http://192.168.254.128:9200/logstash-2019.05.13/test"  -d '{
"@timestamp": "2019-05-13T09:15:00.000Z",
"message": "error"
}'

-- 白名单数据
curl -H 'Content-Type: application/json' -X POST "http://192.168.254.128:9200/logstash-2019.05.13/test"  -d '{
"@timestamp": "2019-05-13T09:55:00.000Z",
"message": "error"
}'

直接没有收到告警原因,利用kibana查看

"fields": {
    "@timestamp": [
      "2019-05-08T20:25:41.000Z"
    ]
  }
  
  此采用时区是 UTC 国际同一时间
  
  Queried rule My Example rule from 2019-05-08 22:08 PDT to 2019-05-08 22:23 PDT: 1 / 1 hits 
  采用的是 PDT 太平洋夏令时,UTC + 8 ,时间
  
  测试时,timestamp只要写成当前的UTC时间 加上 八小时即可
  • 设置

    • 在config.yaml中设置加载的规则 rule 的目录,elasticsearch 地址 和 端口

    config.yaml设置的 rule 目录下,以 .yaml结尾的文件 都会被默认启动

  • 测试规则

    elastalert-test-rule [目录]/[规则文件名.yaml]
    
  • 启动elastalert

    python -m elastalert.elastalert --verbose --rule [规则文件名.yaml]
    

rule 文件

必须参数

es_host

es_port

index

要搜索的索引的名称。这里可以使用通配符,例如:index: my-index-*,它将匹配my-index-2014-10-05。还可以使用包含%Y的格式字符串表示年份,%m表示月份,%d表示日期。要使用它,还必须将use_strftime_index设置为true。

name

规则的名字,必须是存在且唯一的

type

RuleType中的类型,可以是字符串或数组,必须存在的,具体类型如下

RuleType
  • Any

    任何规则都将匹配一切。查询返回的每个匹配都会生成一个警报。

  • BlackList

    黑名单规则将针对黑名单检查某个字段,如果在黑名单中则会被匹配。

    此规则需要两个附加选项

    • compare_key

      这个字段用来与黑名单中进行比较,如果字段为空,这些事件将会被忽略

    • blacklist

      一个黑名单上值的列表,或者 是一个平行文件的列表,通过使用- "!file /path/to/file"

      可以再黑名单值定义间混合,也可以使用其中一个。compare_key字段必须与这些值中的一个相等来进行匹配

  • WhiteList

    blacklist相似,这个规则会将某个字段与白名单进行比较,如果不包含此字段则进行匹配

    此规则需要三个附加选项

    • compare_key

      这个字段的名用来与白名单中进行比较

    • ignore_null

      如果为 true , 则没有compara_key的字段将不会被匹配

    • whitelist

      一个白名单值得列表, 或者 是一个平行文件的列表,通过使用- "!file /path/to/file"

      可以再白名单的值定义之间进行混合,也可以使用其中一个。该compare_key字段必须在此列表中,否则它将被匹配。

  • Change

    这个规则 会监视 某个字段,并且字段改变时进行匹配。该字段必须对具有相同query_key的最后一个事件进行更改

    这个规则需要三个附加选项

    • compare_key

      要监视更改的字段的名称。由于这是一个字符串列表,所以可以有多个值。这些字段中的任何一个改变将触发警报

    • ignore_null

      如果为 true , 没有compare_key字段的事件将不会被记为已更改。目前 这 检查所有在compare_key中的字段

    • query_key

      这个规则适用于每一个 query_key基础。这个字段必须在所有检查过的事件中出现。

    • timeframe ( 可选 )

      更改之间的最大时间间隔。在这个时间周期之后,ElastAlert将会忘记该compare_key字段的旧值

  • Frequency

    当给定时间范围内至少有一定数量的事件时,此规则匹配。这可以基于每个query_key计算。

    这个规则需要两个额外的选项

    • num_events

      会触发警告的时间数量,包括在内

    • timeframe

      必须是num_events在其中发生的时间

    此规则可选参数

    • use_count_query

      如果为true,ElastAlert将使用count api轮询Elasticsearch,而不是下载所有匹配的文档。这很有用,因为您只关心数字而不关心实际数据。如果您期望大量的查询命中,大约数万或更多,也应该使用它。doc_type必须设置为使用此。

    • doc_type

      指定_type要搜索的文档。如果use_count_queryuse_terms_query设置就必须存在

  • Spike

    当给定时间段内的事件spike_height量大于或小于前一时间段内的事件量时,此规则匹配。它使用两个滑动窗口来比较事件的当前和参考频率。将这两个窗口称为“引用”和“当前”。

    此规则需要三个参数

    • spike_height

      最近的timeframe到上个timeframe 当命中触发警告的事件数量的比率

    • spike_type

    • timeframe

  • Flatline

    当事件触发的总数量低于在给定的threshould时间周期内将匹配

    此规则需要两个附加的参数

    • threshould
    • timeframe

    可选参数

    • use_count_query
    • doc_type
    • use_terms_query
    • terms_size
    • query_key
    • forget_keys
  • New Term

    这个规则当在字段上出现了从没有过的值时进行匹配。当 ElastAlert 启动时,它将使用聚合查询收集字段列表中所有已知的术语

    必须字段

    • fields

    可选的

    • terms_window_size
    • window_step_size
    • alert_on_missing_field
    • use_terms_query
    • terms_size
    • use_keyword_postfix
  • Cardinality ( 基数 )

    当一个时间范围内某个字段的唯一值总数高于或低于阈值时,此规则匹配。

    需要参数

    • timeframe
    • cardinality_field
    • max_cardinality / min_cardinality

    可选

    • query_key
  • Metric Aggregation

    当计算窗口中的度量值高于或低于阈值时,此规则匹配。默认情况下,这是buffer_time

    必须参数

    • metric_agg_key
    • metric_aggg_type
    • doc_type
    • max_threshould
    • min_threshould

    可选

    • query_key
    • use_run_every_query_size
    • allow_buffer_time_overlap
    • bucket_inteval
    • sync_bucket_interval
  • Percentage Match (百分率匹配)

    当计算窗口中匹配桶中的文档百分比高于或低于阈值时,此规则匹配。默认情况下,计算窗口为buffer_time

    需要参数

    • match_bucket_filter
    • doc_type
    • min_percentage
    • max_percentage

    可选

    • query_key
    • use_run_every_query_size
    • allow_buffer_time_overlap
    • bucket_interval
    • sync_bucket_interval
    • percentage_format_string
    • min_denominator

alert

可选设置

测试rule

elastalert-test-rule

为规则编写过滤器

常用过滤器类型

文档

query_string

可用于多个字段的部分或完全匹配(模糊查询)

term

实现准确查询

terms

可以轻松组合多个 term 过滤器

使用minimun_should_match选项,可以定义 term 过滤 匹配至少要满足的数量

wildcard (通配符)

通配符匹配

range ( 范围 )

字段的范围

Negation , and , or

对于Elasticsearch 5.x , 通过在查询字符串中 通过 实现boolean 逻辑使用

RestApi

docker run -d -p 3030:3030 -p 3333:3333 \
    -v `pwd`/config/elastalert.yaml:/opt/elastalert/config.yaml \
    -v `pwd`/config/elastalert-test.yaml:/opt/elastalert/config-test.yaml \
    -v `pwd`/config/config.json:/opt/elastalert-server/config/config.json \
    -v `pwd`/rules:/opt/elastalert/rules \
    -v `pwd`/rule_templates:/opt/elastalert/rule_templates \
    -v /usr/local/elastalert/smtp_auth_file.yaml:/opt/elastalert/smtp_auth_file.yaml \
    --net="host" \
    --name elastalert bitsensor/elastalert:latest

rules例子

  • blacklist_rule.yaml
 es_host: 192.168.254.128
 es_port: 9200

 name: My Blacklist rule

 type: blacklist

 index: logstash-* 

 compare_key: message

 blacklist: 
     - "error"

# num_events: 1

# timeframe:
#   minutes: 1

 filter:
 - query:
     query_string:
       query: "error"
 

 smtp_host: smtp.qq.com
 smtp_port: 587


 smtp_auth_file: /usr/local/elastalert/smtp_auth_file.yaml
 email_reply_to: 320734098@qq.com
 from_addr: 320734098@qq.com


 alert:
 - "email"

 email:
 - "927108107@qq.com"
 - "13915411257@163.com"

  • frenquency_rule.yaml
 es_host: 192.168.254.128
 es_port: 9200

 name: My Example rule

 type: frequency

 # index: logstash-2017.08.28
 index: logstash-* 

 num_events: 1

 timeframe:
   minutes: 1

 filter:
 - query:
     query_string:
       query: "field: value"


 smtp_host: smtp.qq.com
 smtp_port: 587


 smtp_auth_file: /usr/local/elastalert/smtp_auth_file.yaml
 email_reply_to: 320734098@qq.com
 from_addr: 320734098@qq.com


 alert:
 - "email"

 email:
 - "927108107@qq.com"
 - "13915411257@163.com"

  • whitelist_rule.yaml
 es_host: 192.168.254.128
 es_port: 9200

 name: My Whitelist rule

 type: whitelist

 index: logstash-* 

 compare_key: message

 ignore_null: true

 whitelist: 
     - "safe"
     - "success"
     - "done"

# num_events: 1

# timeframe:
#   minutes: 1

# filter:
# - query:
#     query_string:
#       query: "error"
 

 smtp_host: smtp.qq.com
 smtp_port: 587


 smtp_auth_file: /usr/local/elastalert/smtp_auth_file.yaml
 email_reply_to: 320734098@qq.com
 from_addr: 320734098@qq.com


 alert:
 - "email"

 email:
 - "927108107@qq.com"
 - "13915411257@163.com"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值