爲何會忽然想用到對日誌的異常內容進行郵件報警,是由於在上週公司的線上業務屢次出現鎖表,開發在優化sql的同時,我也在想是否是能夠對日誌的異常內容進行檢測並實現郵件預警。git
在網上查詢了一些資料後,決定使用插件sentinl,sentinl原名KaaE,sentinl這個插件徹底能夠知足咱們的實際需求,接下來咱們開始進行安裝這個插件。github
首先咱們得知道咱們的kibana的版本,由於咱們安裝的插件須要與咱們的kibana版本一致。歷史版本位置:https://github.com/sirensolutions/sentinl/releases ,咱們選擇對應版本後複製該版本的zip的連接。例如我5.6.3版本的對應版本的連接是:https://github.com/sirensolutions/sentinl/releases/download/tag-5.6.2/sentinl-v5.6.3.zipsql
而後咱們進行安裝插件:ruby
/usr/share/kibana/bin/kibana-plugin install https://github.com/sirensolutions/sentinl/releases/download/tag-5.6.2/sentinl-v5.6.3.zip
安裝完成後咱們須要重啓kibana,纔可讓插件生效。bash
systemctl restart kibana
最後咱們能夠在kibana主頁的左邊能夠找到sentinl.服務器
安裝完以後咱們須要先了解一下sentinl的界面裏的各個設置的功能。主界面以下圖所示。測試
Watchers表示的是監控計劃,Alarms表示的是預警事件,Reports是記錄。優化
接下來咱們開始建立一個監控計劃,具體步驟是:在Watchers 界面——》點擊右上角的New——》選擇watcher後就能夠進入監控計劃設置界面了。this
General界面:是設置這個監控任務的名稱和設置任務運行間隔的時間,圖中的設置是每五分鐘運行計劃任務一次。第一個空是小時,第二個是分鐘,最後一個是秒,你們按需設置。spa
Input界面是設置報警觸發源,這裏須要重點說下這個,由於這個也是我踩的坑。這邊我複製個人Input,你們根據本身的需求改下。
{ "search": { "request": { "index": [ "amazon-log-*"//索引名稱,咱們要在哪一個索引日誌裏進行預警。(這裏你們注意對索引名稱加上雙引號,不加的話會報錯) ], "body": { "query": { "bool": { "must": [ { "query_string": { "analyze_wildcard": true, "query": "\"nested exception is org.hibernate.exception.LockTimeoutException: could not execute statement\""//這裏咱們也是要注意的點,
//黃色部分是轉義雙引號,由於個人匹配內容裏面有特殊符號,兩個黃色部分的內容就是咱們要預警的內容。 } }, { "range": { "@timestamp": { "gte": "now-5m",//由於我前面的全局設置是5分鐘輪詢一次任務,那麼我在這裏只須要設置檢查的範圍是過去5分鐘的內容 "lte": "now", "format": "epoch_millis" } } } ], "must_not": [] } } } } } }
我在上面的Input的結果就是:在索引"amazon-log-*"裏過去五分鐘查詢包含「nested exception is org.hibernate.exception.LockTimeoutException: could not execute statement
」的日誌。
Condition爲報警觸發條件,當咱們在前面匹配到咱們的預警內容後,咱們在這能夠設置一個閾值,好比咱們設置爲0時,就意味着只要匹配到就會觸發,設置爲1時,只有出現大於1纔會觸發。
Transform是一個附屬條件,暫時沒有發現他的用處。
接下來就是:Action也就是觸發後的動做,咱們這裏選擇的是郵件。
Raw是對全部的設置進行展現,咱們若是在這次修改的內容只有點擊右上角的保存後從新打開才能夠在Raw裏看到全部的配置。
在這邊設置好了咱們須要在服務器上配置郵件發送服務。
這裏分爲三步,第一就是對郵箱開啓POP3/SMTP/IMAP服務,並得到受權碼或者密碼,第二是kibana的郵件設置,第三步就是mailx的郵件設置。
首先咱們來解決的對發件郵箱設置POP3/SMTP/IMAP服務,這邊咱們建議使用163郵箱,由於我在使用QQ郵箱做爲發件箱的時候發現是發不出去的,QQ郵箱須要SSL協議的支持,可是我使用163郵箱是能夠正常發出郵件的。(雖然咱們也能夠設置SSL,可是咱們這裏爲了方便就沒有使用)
第一登陸163郵箱,在163郵箱-----》設置----》選擇POP3/SMTP/IMAP。獲取受權碼。(保存好,是等下咱們在郵件配置的時候須要填入的內容)
第二是kibana的郵件設置。編輯kibana.yml在末尾加入如下內容。
sentinl:
settings:
email:
active: true
user: 發件郵箱
password: 密碼
host: smtp.163.com
ssl: false
report:
active: true
tmp_path: /tmp/
由於我是不使用ssl協議,因此我將ssl設置爲false。
第三是mailx的設置。首先咱們須要安裝mailx,使用它來發送郵件。
yum install -y mailx
而後咱們須要配置mailx。在/etc/mail.rc配置文件的末尾加上如下內容。
set from=demo@163.com
set smtp=smtp.163.com
set smtp-auth-user=demo
set smtp-auth-password=demopass
set smtp-auth=login
配置好了後咱們試試咱們是否能夠發送郵件。測試郵件發送:
echo "this is test" |mailx -v -s "Test" "收件郵箱"
而後咱們能夠看看收件郵箱有沒有收到,若是沒有收到看看發件過程當中是否有error,也能夠看看咱們的垃圾郵件裏面有沒有。
有的時候有的服務器廠商是會將郵件服務的某些端口屏蔽的,因此咱們能夠在發送失敗後用telnet郵件服務器看看是否被屏蔽。
若是上面是成功發送的話,那麼咱們將進行最後一步了。就是重啓kibana,而後手動觸發下,看看能不能接收到預警郵件。(必定要重啓讓配置生效)
以上就是我在安裝kibana插件 sentinl實現郵件報警的整個過程。