elastalert是yelp开发的用来监控elasticsearch中数据变化的工具
项目地址
https://github.com/Yelp/elastalert
1、执行elastalert的方法
#只要指定配置文件即可
python elastalert/elastalert.py --config config.yaml
2、执行elastalert的可用参数:args
执行elastalert的时候可以使用的参数如下:
2.1 config
全局config文件的位置,这个文件是yaml格式的
2.2 debug
debug模式,该模式下不会发送真的alert,而是调用DebugAlerter,打印一行log
#这里的self.rule就是每个rule配置文件解析后的对象
elastalert_logger.info('Alert for %s at %s:' % (self.rule['name'], lookup_es_key(match, self.rule['timestamp_field'])))
在debug模式下监控结果不会writeback到es中去。
在debug模式下silence参数无效
2.3 rule
指定一个唯一的rule去执行,这个rule的配置文件必须要在rule folder中,rule folder在全局配置文件中指定。
--silence必须指定--rule
2.4 silence
执行的过程中,让这个rule在若干时间内silence
--silence <units>=<number>, eg. --silence hours=2
silence具体做了什么呢?
- silence其实主动调用了set_realert,设置在若干时间之后才能再次触发alert
2.5 start 和 end
start实际上设置了一个开始query的时间,默认是现在。
self.starttime会被设置为utc时间
实际上这两个值会一直传递到get_query函数
if starttime and endtime:
es_filters['filter']['bool']['must'].insert(0, {'range': {timestamp_field: {'gt': starttime,'lte': endtime}}})
如果run_rule里面没有starttime,那么会调用set_starttime函数来设定一个starttime,在这个函数中还会调用get_starttime函数来获取上一次在哪各时候中断了这个rule,如果是全新的rule,会使用buffer_time(来自全局配置文件)
2.6 verbose
设置日志等级为INFO
2.7 patience
这个没有实现的感觉
2.8 pin_rules
elastalert有一个机制可以刷新rule_folder里面的rule配置,新增、删除里面的配置文件都可以立即生效,如果设置了pin_rules,那么就会固定跑最开始load的rule配置文件。
2.9 es_debug、es_debug_trace
会打开和es交互部分的log,debug用