基於elasticsearch和elastalert的備份狀態檢查
阿新 • • 發佈:2019-03-29
pro shel shell xxxxx 容易 如何快速 hour 方式 ofo 一,業務背景
數據的備份(恢復)對於企業來說,是挽救生命的最後一根稻草;也是運維日常工作的一個重要組成部分。目前流行的方式是采用腳本對數據進行備份,並同步到遠端進行異地備份。一旦需要備份的數據多了後,會面臨以下問題:
1.備份是否成功,需要在每個腳本裏進行判斷並發送郵件,一旦涉及郵箱賬號密碼調整需要每個腳本調整,容易遺漏; "command_info":"‘"${backup_command}"‘",
"backup_source":"‘"${backup_source}"‘",
"backup_dest":"‘"${backup_dest}"‘",
"backup_type":"‘"${backup_type}"‘",
"backup_name":"‘"${backup_name}"‘",
"last_time":0,
"backup_status":"failed",
"end_time":"1970-01-01T00:00:00+08:00"
}‘ > /tmp/${backup_name}.json
`
數據的備份(恢復)對於企業來說,是挽救生命的最後一根稻草;也是運維日常工作的一個重要組成部分。目前流行的方式是采用腳本對數據進行備份,並同步到遠端進行異地備份。一旦需要備份的數據多了後,會面臨以下問題:
1.備份是否成功,需要在每個腳本裏進行判斷並發送郵件,一旦涉及郵箱賬號密碼調整需要每個腳本調整,容易遺漏;
- 對於日常審計要求,如何快速提供備份操作結果是個麻煩事情(登錄到機器一個個的統計記錄,容易吐);
之前看《devops最佳實踐》一書中一個案例提及,他們公司所有服務器操作記錄都集中存放到es,方便集中管理和IT審計。恰巧之前才在公司實現通過elk采集nginx日誌,並通elastalert實現基於狀態碼和後端響應時間記錄出現次數的把傲嬌。並且kibana可以制作表格視圖並導出,這樣一來就解決日常備份的兩個痛點。
二,方案思路:
1,備份腳本任務一開始便向es中插入一條記錄,該記錄包括:備份開始時間,備份主機,備份腳本的完整路徑和文件名,備份來源,備份目的,備份狀態,備份結束時間,文件大小等;並記錄插入成功的doc_id; 2,備份結束後,更新該條記錄的字段態,主要是更新結束時間,備份狀態(默認failed改為success),文件大小等。 3, 備註: A,通過開始和結束時間,計算出總的備份時間,方便調整更新窗口; B,通過對備份狀態字段的值判斷,如果為failed則發送郵件報警; C,通過文件大小,可以評估磁盤容量使用情況,方便進行容量規劃;
三, 實現腳本(數據庫備份為例)
由於整體腳本比較簡單,只列shell插入es部分腳本
1,開始插入記錄
`
curl -s -H ‘Content-Type: application/json‘ XPUT http://$esUrl/backup_$(date +%Y%m%d)/log/ -d ‘
{"@timestamp":"‘"${startYmd}T${startHMS}+08:00"‘",
br/>"@timestamp":"‘"${startYmd}T${startHMS}+08:00"‘",
"backup_host":"‘"$(hostname)"‘",
"backup_source":"‘"${backup_source}"‘",
"backup_dest":"‘"${backup_dest}"‘",
"backup_type":"‘"${backup_type}"‘",
"backup_name":"‘"${backup_name}"‘",
"last_time":0,
"backup_status":"failed",
"end_time":"1970-01-01T00:00:00+08:00"
}‘ > /tmp/${backup_name}.json
`
2,更新記錄
其中變量doc_id為前一步中 /tmp/${backup_name}.json 存放的插入es記錄的返回結果(用jq進行json解析)
`
curl -s -H ‘Content-Type: application/json‘ XPUT http://$esUrl/backup_$(date +%Y%m%d)/log/$doc_id/_update -d ‘
{"doc":{"last_time":"‘"${last_time}"‘","end_time":"‘"${endYmd}T${endHMS}+08:00"‘","backup_status":"success","backup_size":"‘"${backup_size}"‘"}}‘
`
四,es 數據結果
head插件數據結果查詢:
五,elastalert報警
elastalert安裝可以參考網上文檔,配置報警規則:查詢最近12小時以內記錄,如果備份狀態為failed的記錄出現1次,則發送報警郵件,規則的如下:
name: backup
type: frequency
attach_related: true
index: backup
num_events: 1 #出現次數
timeframe:
hours: 12 #查詢最近12小時
filter:
- term:
backup_status.keyword: failed #備份狀態為 failed
alert: - "email"
alert_subject: "Elastalert {0} {1} {2} {3} option failed occurred"
alert_subject_args: - "backup_host"
- "command_info"
- "backup_type"
- "name"
alert_text_type: exclude_fields
alert_text: |
alert_text_args: - "backup_host"
- "backup_source"
- "backup_type"
- "command_info"
- "backup_status"
include: ["command_info","backup_host","backup_type"]
top_count_keys: ["command_info","backup_host","backup_type"]
raw_count_keys: true
email: - "[email protected]"
六,報警郵件截圖
由於是測試,所以我備份記錄狀態全是失敗.
基於elasticsearch和elastalert的備份狀態檢查