最近公司需求要搭建一個監控系統,用來監控程序運行狀態,請求曲線,錯誤日志發生次數,等等分析,保障系統穩定性。因此最近研究了基於Lucene 號稱企業級搜索服務的ElasticSearch ,用了一段時間發現速度還真快,對百萬級甚至千萬級的數據檢索毫無壓力,比之前用的MongoDB速度快了不少。
ElasticSearch服務安裝過程這里就不在說了,有了監控之后應該還需給開發人員發送郵件,告知某項錯誤已經達到某個閥值,應該關注去分析解決發生錯誤的原因,進一步發現程序上的bug,然后fix掉,下面隆重介紹下es(這里將ElasticSearch簡稱為es)的插件,Watcher,功能嘛很顯然就是預警服務。
一、安裝
1.依賴於License 插件,先安裝License插件,在ES_HOME目錄下面安裝License
bin/plugin install license
2.安裝watcher插件
bin/plugin install watcher
注:中間過程詢問是否繼續時候輸入y按回車繼續安裝
3.驗證是否安裝成功
curl -XGET 'http://localhost:9200/_watcher/stats?pretty'
返回結果如下則表示安裝成功
{
"watcher_state": "started",
"watch_count": 0,
"execution_thread_pool": {
"queue_size": 0,
"max_size": 0
}
}
二、Watcher插件配置(創建預警任務)
watcher目前是沒有界面配置的,需要通過Resfulapi調用創建、管理、更新預警任務
創建一個Watcher任務的流程是怎樣的?
我們先來看下創建一個預警demo的api
curl -XPUT 'http://localhost:9200/_watcher/watch/log_error_watch' -d '
{ "trigger": { "schedule": { "interval": "1m" } }, "input": { "search": { "request": { "indices": [ "monitor_ticket_bargainfindermaxrq_201610" ], "body": { "query": { "bool": { "must": [ { "match": { "collectionName": "BargainFinderMaxRQ" } }, { "range": { "createTime": { "gt" : "now-1m" } } } ] } } } } } }, "condition": { "compare": { "ctx.payload.hits.total": { "gt": 20 } } }, "actions": { "send_email": { "email": { "to": "xxxxxx@xxx.com", "subject": "TICKET_BFM 過去一分鐘內錯誤發生次數超過20,請關注", "body": "TICKET_BFM 過去一分鐘內錯誤發生次數超過20,請關注" } } } }'
當然actions里面還支持模板,比如
"actions": { "send_email": { "email": { "to": "xxx@xxx.com", "subject": "TICKET_BFM 過去一分鐘內錯誤發生{{ctx.payload.hits.total}}次數超過20,請關注", "body": "TICKET_BFM:{{ctx.watch_id}} 過去一分鐘內錯誤發生{{ctx.payload.hits.total}}次數超過20,請關注 Happened at {{ctx.execution_time}}" } } }
從api的content我們可以看出,內容主要主體分成trigger(觸發設置),input(來源設置),condition(條件),actions(觸發動作設置)
這里我們設置觸發間隔時間為1m,來源是monitor_ticket_bargainfindermaxrq_201610索引塊,查詢條件是collectionName字段值是BargainFinderMaxRQ,以及時間范圍是過去1分鍾到現在,然后觸發條件是當數量大於20,動作設置的是發郵件
Action類型其實有4種,EMail(郵件),Webhook(第三方對接),Index(索引),Logging(日志記錄),相關配置可以參考下官方文檔
如果配置了發送郵件,那么需要在es的yml文件配置下郵件發送服務器
我這里設置的是公司的服務器
watcher.actions.email.service.account:
work:
profile: standard
email_defaults:
from: '<yourname>@xx.com'
smtp:
auth: true
starttls.enable: true
host: smtp.xx.com
port: 25
user: yourname@xx.com
password: password
注:設置之后重啟下es服務器
三、刪除預警任務
有時候我們不在使用某項預警服務的時候,我們可以刪除他
curl -XDELETE 'http://localhost:9200/_watcher/watch/log_error_watch'