Elastalert 監控


1、logstash 做監控的優劣
	適合match-then-alert 的方式
	logstash-filter-metric
	logstash-input-http_poller
	無狀態、進程間數據無法交流
	無復雜表達能力

	logstash 做監控沒有復雜的語法,同時越復雜的功能越消耗資源,本身logstash 就非常的消耗資源
	利用logstash mail 插件有點low

2、spark 做監控的優劣
	streaming 方式做准實時監控,需要預定義模式和編程能力,checkpoint 會降低性能
	sql 方式做定期統計監控,運行緩慢
	es-hadoop 方式讀取es數據,可以利用sql來讀取es數據,spark可以並發線程直連每個es的shard,
	但是:意味着query出來的數據需要轉存一份到spark里,利用sparkSQL做聚合統計后,數據再刪除,
	重復使用一次IO
	非常吃內存

3、Elastalert
	elastalert 是Yelp公司開源的用python 2.6 寫的報警框架
	屬於后來elastic.co公司出品的Watcher的同類產品
	文檔地址是:
	http://elastalert.readthedocs.io/en/latest/elastalert.html#
	我們創建的規則都要寫道es里,所以elastalert要創建index到es

3.1、elastaliert 的配置語法:
	query(watcher 的 trigger)                查詢
	rule(watcher 的 input,comdition)		 規則
	enhancements(watcher 的 transform)
	alert(watcher 的 action)				 報警

3.2、query 配置:
	除了有關es服務器的配置以外,主要包括:
		1、‘run_every’配置,用來設置定時向ES發請求,默認五分鍾
		2、‘buffer_time’配置,用來設置請求的時間字段的范圍,默認45分鍾,查多長時間段內的數據
		3、‘ruler_folder’配置,用來加載下一階段的rule設置,默認是example_rulers
		4、’timestamp_field‘配置,設置'buffer_time‘時 針對哪個字段,默認是@timestamp
		5、'timestamp_type'配置,設置'timestamp_field'的事件類型,elastalert 內部也需要轉換時間對象,默認是"ISO8601",也可以是'UNIX'
run_every:我們到 es 里去查詢數據,定時的輪詢去查詢數據,滿足一定規則的,這個我們可以全局的指定,也可以每個配置文件單獨指定的,默認是全局的,建議每一個配置文件單獨指定、

3.3 rule 配置
	rule 設置各自獨立以獨立的文件方式存儲在'rules_folder'設置的目錄里,其中你可以定義下面這些參數,其中可以
	定義下面這些參數:
		name配置:每個rule需要有自己獨立的name,一旦重復,進程將無法啟動
		type配置:選擇某一種數據驗證方式
		index配置:從某類索引里讀取數據,支持時間配置
		filter配置:設置向es請求的過濾條件
		timeframe配置:累計觸發報警的時長(連續多長時間有異常才發報警)
		alert配置:設置觸發報警時執行那些報警手段

	內置的rule介紹:
		any:只要有匹配就報警;
		blacklist: compare_key字段的內容匹配上 blacklist數組里任意內容;
		whitelist: compare_key字段的內容一個都沒能匹配上 whitelist數組里內容
		change:在相同 query_key條件下, compare_key字段的內容,在 timeframe范圍內發送變化;
		frequency:在相同 query_key條件下, timeframe范圍內有 num_events個被過濾出來的異常
		spike:在相同 query_key條件下,前后兩個 timeframe范圍內數據量相差比例超過spike height。其中可以通過 spike_type設置具體漲跌方向是up,down,both。還可以通過 threshold_ref設置要求上一個周期數據量的下限, threshold_cur設置要求當前周期數據量的下限,如果數據量不到下限,也不觸發
		flatline: timeframe范圍內,數據量小於 threshold 閾值
		new_term: fields字段新出現之前 terms_window_sizer默認30天)范圍內最多的terms_size(默認50)個結果以外的數據
		cardinality: 在相同 query_key條件下, timeframe范圍內 Cardinality_field的值超過max_cardinality或者低於 min_cardinality

3.4 enhancements 方式
	match_enhancements 配置,設置一個數組,在報警內容發送到alert之前修改具體數據elastalsert 默認
	不提供具體的enhancements實現,需要自己去擴展
	不過,作為通用的方式,elastalert 提供幾個便捷選項,把kibana 地址加入報警
		1、generate_kibana_link: 自動生成一個kibana3 的臨時儀表板在報警內容上
		2、use_kibana_dashboard:采用現成的kibana3 儀表盤附屬在報警內容上
		3、use_kibana4_dashboard:采用現成的kibana4 儀表盤附屬在報警內容上

	我們現在使用的是kibana 5,這個是沒有關系的,我們配置上URL,他是不會識別我們的kibana的版本號的。所以這個沒有關系的,我們直接
	把我們的kibana URL配置上就行


3.5 alert 配置
	alert配置是一個數組,目前elastalert 支持的報警方式有:
		Command
		Email
		JIRA
		OpsGenie
		SNS
		HipChat
		Slack
		Telegram
		Debug
		Stomp		

	我們在使用的時候要預防報警風暴(在實際使用中我們遇到過可能一分鍾成百上千的錯誤,要是都是發出來,就有問題了)。我們利用下面的一些措施來控制報警風暴:
		1、aggregation:設置一個時長,則該時長內,所有的報警(同一個配置文件內的報警)最終合並在一起發送一次:
		2、realert:設置一個時長,在該時間內,相同 query_key 的報警只發一個
		3、exponential_realert: 設置一個時長,必須大於realert 設置,則在realert到exponential_realert之間,每次報警之后,realert 自動翻倍

3.5.1 alert command 方式
	1、command 最靈活也最簡單,默認采用 '%{fieldname}s' 格式
	command:["/bin/send_alert的腳本","--username","%{username}s","--time","%(key_as_string)s"]
	2、如果要用的比較多,可以開啟'pipe_match_json'參數,會把整個過濾到的內容,以一整個JSON字符串的方式管道輸入指定腳本


3.5.2 alert email 方式:
	1、email方式采用SMTP協議,所以有一系列‘smtp_*’的配置,然后加上'email'參數提供收件人地址數組
	2、特殊的是email 和 jira兩種方式,elastalert 提供了一些內容格式化模板
	3、比如可以這樣控制郵件標題
	alert_subject:"issue:{0} occurred at {1}"
	alert_subject_args:
	- issue.name
	- "@timestamp"
	4、而默認的郵件內容模板是:
	body = rule_name
	{alert_text}
	ruletype_text
	{top_counts}
	{field_values}
	5、這些內容同樣可以通過'alert_text' (及對應alert_text_args)等來修改

	配置案例:
		alert:
			  - "email"
			  alert_text:"test"
			  smtp_host:smtp.exmail.qq.com
			  smtp_auth_file:smtp_auth_file.yaml
			  email_reply_to:monitor@bigbao.com
			  from_addr:monitor@bigbao.com

4、針對業務系統的監控系統:
	業務系統與基礎設施的關注點差異
	基於日志 VS 基於探針
	Rsyslog + ES



 

模板:
name: test1-front-rule
type: any
index: test1-front-*
realert:
  minutes: 0
num_events: 1
filter:
- query_string:
    query: "Level:ERROR"

smtp_host: smtp.bigbao.com
smtp_port: 25
smtp_auth_file: /data/package/elastalert/smtp_auth_file.yaml
email_reply_to: big@bigbao.com
from_addr: big@bigbao.com
alert:
- "email"
alert_subject: "[front] service  ERROR !!!"
#include: ["Date","Thread","RequestId","msg"]
#exclude: ["@timestamp","Class","Level","_id","_index","_type","beat","kafka"]
#alert_text_type: alert_text_only 
alert_text: "
Service_Name: {} \n
Date: {} \n
Host: {} \n
Thread: {} \n
RequestId: {} \n
msg: {} \n
"
alert_text_args:
- type
- Date
- beat.hostname
- Thread
- RequestId
- msg

email:
- "big@bigbao.com"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM