透過 Kibana 觀看心電圖及設定警報
Last updated
Last updated
如何使用 Kibana 的 Uptime 功能來觀察 Heartbeat 記錄的資料。
當發生問題時,如何透過 Alert 設定主動通知。
當我們透過前一篇所介紹的 Heartbeat 收集資料後,接下來我們要將介紹如何透過 Kibana 的 Uptime 功能,來檢視這些資料。
進入 Kibana 的主畫面後,點選主選單,並從 Observability 的區塊,可以找到 Uptime 的進入點。
點選進入後,我們可以看到 Uptime 的主要 Dashboard,畫面蠻單純,直接列出監控的彙總結果,包含多少個 Monitors 其中有哪些目前是 Down
以及過去指定的時間區間中,Up
與 Down
的 Histogram 圖表。
在底下的監控總覽的區塊,會條列出每一項我們所設定的 Monitor,並且包含這些 Monitor 的主要狀態資訊。
點選其中一個 Monitor 之後,可以進入 ES Cluster Monitor 的頁面,如下圖。
這個 Monitor 的畫面會包含幾個重點,以上圖我的情境為例進行說明:
這一組 Monitor 項目的主要資訊,包含這組監控在指定時間之內的可用性 (availability) 比例 100.00%
、監控這組服務的 URL http://training.onedoggo.com
,監控的類型 HTTP
、有哪些 Tags onedoggo
training
web
、以及 TLS Certificate 多久之後會到期 Expires in 9 monthes
。
這一組 Monitor 項目,包含哪些從哪些地區的監控: taipei
與 tokyo
,以及這些地區各自在這段時間的可性用 (availability) 比例及最後檢查的時間。
Monitor duration: 這裡會列出每個地區在監控時,Heartbeat 所收到回應的時間,可以看出有沒有在那個時段或是哪個地區的延遲時間 (latency) 特別久。
Pings over time: 在每個時段之中,總共 Pings 多少次,也就是代表發送了多少次 monitor check 的請求,以及異常與正常的比例 (圖中都是正常,所以都是灰色,有異常會是紅色)。
History: 這部份會詳細的列出每次執行檢查請求的執行結果,包含結果是否正常 Up
或 Down
、檢查的時間、從哪個 Geo Location 執行、HTTP status,花了多少時間 (Duration)、如果有錯誤的話,錯誤的內容是什麼 (如下圖),另外如果有開啟記錄 HTTP response 的話,包含 HTTP Response Headers 與 Body 都會被詳細的記錄下來,在追查問題時很方便。
Kibana Uptime 會協助我們將所有 Monitors 之中有包含 SSL/TLS 的 Certificate 彙總起來,在 TLS Certificates 這裡可以看到所有的憑證列表及狀態,這個功能很方便,可以直接一覽所有憑證的狀態。
另外也能透過 Settings 的畫面,指定 Certificate 的過期通知的期限設定。
若要使用 Elastic 替 Uptime 建立的 Dashboard,要另外到 Github (https://github.com/elastic/uptime-contrib) 下載,並且使用 Kibana > Stack Management > Saved Objects 的功能,使用 Import 將對應 Github 裡的 http_dashboard.ndjson
檔案匯入,匯入完成後,就可以到 Dashboard 選擇開啟 Heartbeat HTTP monitoring
的 Dashboard。
當有異常發生時,我們想要主動收到通知,這時就要使用到 Elastic Alert 的功能,我們首先要建立 Connector 來設定通知發送到哪邊,再透過 Uptime 進行 Alert 的設定。
這邊要注意 Alert 的功能有蠻多會是需要使用到進階的授權,不是免費的。
如果是第一次使用 Alerting 的功能,在進入 Stack Management 的 Connectors 設定中要建立 Connectors 時,會看到以下的畫面,提示我們會需要先設定好 xpack.encryptedSavedObjects.encryptionKey
。
要產生這個 EncryptionKey 可以透過 kibana-encryption-keys
的指令來協助產生,這個指令就放在 kibana 的 bin
資料夾裡面。[1]
執行指令後,就會產生 encryption keys。
這個指令只會協助我們產生 key,我們需要將產生出來的設定,添加到 config/kibana.yml
裡面。
一但設定完成、重新啟動 kibana 之後,我們回到 Connectors 的設定頁面,就可以建立新的 Connector 了。
這邊使用 Slack Connector 為例。
請注意:要使用 Slack Connector 會需要擁有 Gold License 以上的授權。
選擇 Slack
之後,在建立 Connector 的畫面,會出現 Create a Slack Webhook URL
的連結,點選下去之後,會導到 Elastic 的官方文件,裡面有完整的設定教學,當中有提到要進入 Slack WebHook 的設定頁面 https://my.slack.com/services/new/incoming-webhook 去建立 WebHook。
指定 Alert 要通知的 Channel 之後,建立 WebHook integration,就可以拿到 WebHook URL
。
接著在 Add Connector 的地方,把這些資訊填寫完成,並且建立 Connector。
接下來,我們可以在 Uptime 設定 Default Connectors,讓之後 Uptime 有異常發生時,透過這些 Connectors 發送通知。
一但我們設定好 Alert 的 Connectors 之後,我們就可以到 Monitors 的頁面,啟動 Status alert,接下來有異常發生時,就會通知到我們指定的 Connecters 了。
如果我們想在 TLS Certificate 快要過期時收到通知,我們要在 Uptime 設定 Alert。
建立 Alerts and rules 。
選擇 Create rules 。
選擇 TLS rule 。
填寫基本資料後,選擇要使用的 Actions。
按下 Save。
接著從 Slack 的畫面可以看到有發生問題、或是狀態恢復時通知的內容。
以上的介紹,是透過 Kibana 針對 Uptime 所提供的功能,讓我們能迅速的掌握系統的可用性狀態,以及能在異常時發送通知提醒,除了 Kibana Uptime 所提供的畫面之外,我們也能自己透過 Virtualize 等工具,從 Heartbeat 所記錄並存放在 Elasticsearch 裡的資料,建立我們自己想要檢視的圖表與儀表版 (Dashboard),這部份就不在這裡介紹,有興趣的可以從官方 Kibana 的說明文件參考做法。