elastalert是yelp开发的用来监控elasticsearch中数据变化的工具
项目地址
https://github.com/Yelp/elastalert
1、全局配置文件
在执行elastalert主进程的时候需要指定一个全局配置文件,config.yaml,在这个全局配置文件中会有一个rule_folder的字段会指定rule的配置文件所在的文件夹。
2、全局配置文件 config.yaml
全局配置文件是在args中输入的,解析是在config.py的load_rules中开始的,整个配置文件会被load成一个字典对象,然后很多全局的东西都会被“挂载”在这个conf对象中。
2.1 conf['rules']
conf['rules']不是在配置文件中生成的,他是在load_rules函数中,通过解析rule_folder中所有的rule配置文件,返回的ruletype对象,组成的一个列表。
如果在args里面指定了--rule的参数,那么只会在rulefolder里面加载那个指定的rule
2.2 config中的rules_folder
指定rule配置文件的位置,这个参数最终在config.py的get_file_paths中使用,如果配置了scan_subdirectories,那么会把所有子文件中的rule都load进来,最终返回一个rule配置文件的列表。
2.3 config中的run_every
run_every是指elastalert会每隔若干时间去检查一遍数据,是监控数据的采样间隔时间。在config.py会将run_every转换成datetime.timedelta对象,真正的使用是在elastalert.py。
可以看到在这个while循环中run_every会决定下一次run_all_rules的执行时间。
2.4 config中的buffer_time
这个在长期运行的elastalert中,为了对比过往一段时间的数据,会暂存一些查询结果,暂存时间由buffer_time控制,还有如果第一次运行一个新的rule,这个rule会往前追溯一段时间的结果,这个时间也由buffer_time决定。
2.5 config中的es_host、es_port、es_url_prefix、use_ssl、verify_certs、es_send_get_body_as、es_username、es_password
这些参数都和连接es实例有关,相关的函数。
- wait_until_responsive(self, timeout, clock=timeit.default_timer)
-
elasticsearch_client(conf): 建立elastalert和es的连接
2.6 config中的writeback_index
在elastalert运行的时候也要在es中创建一个index去存储一些元数据,包括每一次query的结果,发送alert的信息等。这个index名字由这个字段来设置。
2.7 config中的alert_time_limit
如果alert发送失败,elastalert会在这个limit时间之内retry
这个参数在find_recent_pending_alerts函数中会用到