使用 Metricbeat 掌握 Elastic Stack 的健康狀態
Last updated
Last updated
Kibana 的 Elastic Stack Monitoring 簡介
監控 Elastic Stack 健康狀態的實踐技巧
如何使用 Metricbeat 收集 Elastic Stack 的健康狀態
在進入介紹如何使用 Metrics 掌控我們的 Infrastructure 之前,由於我們使用的是 Elastic Stack 這個解決方案來當作我們 Observability 工具,因此在這邊要先介紹如何透過 Metricbeat 來掌控 Elastic Stack 這組工具的健康狀態。
身為 Elastic Stack 的最主要的入口 - Kibana,當然也擁有監控整個 Elastic Stack 的能力, 下圖是 Kibana 的 Stack Monitoring 的畫面,在這張圖當中,我們可以看到 Elastic Stack 的主要產品都能在這個 Dashboard 上觀看每個服務的 Metrics 狀態,目前這個畫面所呈現的資訊,除了我截圖當下的 Elastic Stack 還沒有串接 Filebeat,因此 Logs 的區塊顯示為黃色的 No log data found
也就是還沒有資料,其他所有看到的資訊都是透過 Metricbeat 所收集到的。
進入 Stack Monitoring 的功能畫面,可以從 Kibana 左方的功能選單,找到 Management > Stack Monitoring。
Kibana 的 Stack Monitoring 擁有非常詳細的 Elastic Stack 的資訊,以下針對 Observability 相關舉例列出說明 (非全部的功能):
Elasticsearch: 整個 Cluster 的狀態、Node 的狀態、Index 狀態、即時 indexing 與 searching 存取的數據、shard 的狀態、各種 Metrics…等。
Kibana: 總共有多少個 Kibana Instance、請求的數量、回應的時間、記憶體用量…等。
Logstash: 所有 Nodes 的狀態、即時掌握有多少 events 在處理、Pipeline 的數量與執行狀況、甚至 Pipeline 裡的每個步驟所處理的 event 數都能即時看到。
Beats: 各種 Beats 的 events 處理監控、失敗率、記憶體用量、資料傳輸流量…等。
APM Server: 掌握所有的 APM Server、收了多少 requests、處理了多少的 events、記憶體用量、資料傳輸流量…等。
在這邊就不細節的介紹每個功能,大家可以從官方文件去查閱,另外也可以使用 Elastic Demo 網站 來試玩。
當我們要來監控 Elastic Stack 的健康狀態時,這邊列了幾個小技巧提供大家參考。
如果在規劃使用 Elasticsearch 的時候,不是單純的當作監控使用,而是有用來提供產品特定的服務,例如:產品的搜尋、當成 NoSQL 資料庫、當作另一個服務的資料來源,在這樣的情況下,就會建議將收集 Monitoring 的資訊這項任務,獨立安排另一個 Elasticsearch Cluster 來處理,以避免監控的資料或是人為的操作,影響到正式服務的運作,另外如果有多個 Elasticsearch Cluster 在運作時,也會建議另外安排獨立的 Monitoring 專用的 Elasticsearch Cluster,來監控這些 Cluster 的狀態。
當服務不穩定的時候,有時是因為主機掛掉,又或是 CPU loading 過重、網路有問題、記憶體不夠…等等,一但當這些問題發生時,通常很高的比例服務本身就是無法正常運作,所以如果我們的 Metrics 資訊是由服務本身傳送給 Elasticsearch,代表出問題的時候,我們會拿不到關鍵的數據。
因此會強烈建議使用另外部署的 Metricbeat 來收集服務或系統的 Metrics,不要直接透過 Elasticsearch、Kibana、Beats…等本身所提供的傳送 Monitoring 資訊的功能。
Elastic 官方也很重視這件事,所以已經開始準備棄用由服務本身傳送 Metric 資訊的功能,建議大家提早全面使用 Metricbeat 來收集這些資訊。
如同前一點所提到的,當問題發生時,很常時候服務所在的主機都有異常,因此不建議直接將 Metricbeat 直接與服務安裝在同一台主機上,應該使用獨立部署與安裝的方式,讓 Metricbeat 透過網路收集這些系統或服務的 Metrics。
以下將說明如何使用 Metricbeat 來取得監控 Elastic Stack 的資訊。
要讓 Metricbeat 所收集到的 Elastic Stack Metrics 資訊,出現在 Kibana 的 Stack Monitoring 之中,會需要特別的設定,並且 Metricbeat 僅支援以下幾種 modules 支援這種設定:
Elasticsearch module
Beats module
Kibana module
在這些有支援的 modules 裡,可以有二種設定的選擇:
使用 -xpack
結尾的 module name。
使用 elasticsearch
、kibana
、beats
這種非 -xpack
結尾的 module,但是把 xpack.enabled: true
開啟,並且移除所有額外設定的 metricsets
。
注意:設定要透過 Stack Monitoring 觀看資訊的這些 module,Metricbeat 會將資料傳送到 Elasticsearch 的 Index
.monitoring-*
儲存,而非預設 Metricbeat 的 Indexmetricbeat-*
,
接下來將各別介紹 Elasti Stack 的設定方式,在每個服務設定的說明,我們會分成兩個部份,Metricbeat 端與服務端的配置方式:
Elasticsearch 端的配置
由於 Metricbeat 要收集的 Metrics 資訊,其實都在 Elasticsearch 一般的 RESTful API 裡了,所以並不需要特別開啟另外的 Metrics 專用 API,所以預設的 Elasticsearch 不用特別配置,不過可以特別留意,不要開啟 xpack.monitoring.collection.enabled
的設定,以避免 Elasticsearch 自行將 Metrics 資訊傳送進 Elasticsearch 的 Cluster 之中。[1]
Metricbeat 端的配置
首先要開啟 elasticsearch-xpack module
接著在 ./modules.d/elasticsearch-xpack.xml
設定 Elasticsearch 的位置,每個 node 的 host 都要設定好。
設定完成後,重新啟動 metricbeat 即可。
Logstash 端的配置
由於 Metricbeat 要收集的 Metrics 資訊,在 Logstash 會要另外開啟 metrics 資訊的 API,這個部份會要調整 logstash.yml
的配置檔。
主要就是把 http.enabled: true
打開,並且指定 http.port
。
Metricbeat 端的配置
開啟 logstash-xpack module
接著在 ./modules.d/logstash-xpack.xml
設定 Logstash metrics API 的位置。
設定完成後,重新啟動 metricbeat 即可。
Beats 的設定在 Elastic Stack 中的各種 Beats: filebeat
、metricbeat
、heartbeat
…等的設定方式都是一樣的,唯一不同的是 .yml
的檔名,這部份大家自己去對應一下,以下會以 filebeat
為例。
小提醒:如果使用同一台主機安裝多種 beats 時,記得 port 不要衝突。
Beats 端的配置
由於 Metricbeat 要收集的 Metrics 資訊,在 Beats 也要另外開啟 metrics 資訊的 API,這個部份會要調整 filebeat.yml
、heartbeat.yml
、metricbeat.yml
…等的配置檔。
主要就是把 http.enabled: true
打開,並且指定 http.port
。
Metricbeat 端的配置
開啟 beat-xpack module
接著在 ./modules.d/logstash-xpack.xml
設定 Logstash metrics API 的位置。
設定完成後,重新啟動 metricbeat 即可。
APM Server 端的配置
APM Server 的設定方式,其實和 Beats 一樣,底層應該是同樣的實作方式,要調整 apm-server.yml
配置檔。
主要就是把 http.enabled: true
打開,並且指定 http.port
。
Metricbeat 端的配置
開啟 beat-xpack module
小提醒:如果 Beats 已經有開啟過,就不用再次開啟,只要把對應的 port 加入設定檔即可
接著在 ./modules.d/logstash-xpack.xml
設定 Logstash metrics API 的位置。
設定完成後,重新啟動 metricbeat 即可。
透過以上的設定配置,就可以透過 Metricbeat 收集 Elastic Stack 的服務狀態資訊,接下來打開 Kibana 即可查看 Stack Monitoring。