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的連接
image.png
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函數中會用到