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_query
或use_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"