fbpx

用 ElasticSearch + Metricbeat 監控伺服器狀態

如何建構 Log Service 與 System Monitor

ElasticSearch Metricbeat

ElasticSearch 是一個全文搜尋引擎,這個特性用在 Log Service 領域變得相當方便。前幾年 ELK (ElasticSearch + Logstash + Kabana) 相當火熱,ElasticSearch 針對營運、Log 監控與分析市場也做了很多努力,陸續發表 Beats Project 相關產品。 完整的 Beats 包含了以下模組:

ElasticSearch Beats Family

上述每一個模組都有不同的特性與使用情境,但我們今天先介紹 Metricbeat 這個模組,其他有空再研究與介紹了。

用 ElasticSearch Metricbeat 創建伺服器監控服務

我們這裡會用到 ElasticSearch 與 Kibana,安裝可以參考以前寫的 ElasticSearch 安裝文章,由於 ElasticSearch 改版迅速,如果要進行安裝建議可以使用最新版本。開始以前我們假設已經安裝好 ElasticSearch + Kibana,並且 9200, 5461 Port 已經可以正常連線。這樣的 Log Monitor 組合常用的也有 GrafanaPrometheus 等等架構,我認為選擇自己的適合的架構即可,不要同時維護太多同質性的服務會比較輕鬆。

安裝 Metricbeat Service

這裡我們先來伺服器 (VM) 部署 System Metricbeat Agent,我們這裡使用的版本是 6.6,在 Kibana 已經有內建的部署說明,進入 Kibana 後點選左上角的圖示,接著選取「Add metric data」,如下:

ElasticSearch-Add-Beat-Data

進入以後可以看到已經有很多常用的監控模組可以套用,Metricbeat 只是 Beats Family 的其中一個 Project,另外也可以使用 Filebeat 來讀取不同服務的 Log Format 傳送到 ElasticSearch 進行分析與監控。

ElasticSearch-Metricbeat-List

這裡我們選擇「System metrics」模組

ElasticSearch-Beats-Metricbeat-System

進入以後會看到一個完整的引導安裝步驟,其實比較需要注意的就是版本編號,一般來說玩 ElasticSearch 要盡量使用一制性的版本。這樣才能確保各個模組資料傳遞與整合遇到的問題最少,不同版本的 ElasticSearch Project 在整合上非常容易遇到問題,要更加小心。System Metricbeat Install 如下:

ElasticSearch-System-Intro

以 Ubuntu 為例子,先登入需要被監控的 Server 來安裝 Metricbeat Service。首先先下載 Deb 安裝檔 (如果是 7.6.0 以上的版本也可以加入 Spurce List 用 APT 直接安裝)

下載 Metricbeat 網址 https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html

我在 ElasticSearch 6.6.0 版本安裝 Metricbeat 流程如下:

curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.6.0-amd64.deb
sudo dpkg -i metricbeat-6.6.0-amd64.deb

安裝完成以後需要先編輯 metricbeat 服務設定檔

vim /etc/metricbeat/metricbeat.yml

這支 Yaml 檔案主要我們需要編輯有關 ElasticSearch 與 Kibana 連線資訊,比如連線有沒有用到 HTTPS 或登入帳號密碼等等,如下:

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["your_elasticsearch_host:9200"]
  # Enabled ilm (beta) to use index lifecycle management instead daily indices.
  #ilm.enabled: false

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  host: "your_kibana_host:5601"

修改好以後先儲存,再來就是啟用 System Module 如下:

sudo metricbeat modules enable system

如果要修改或調整 System Metricbeat 可以編輯 system.yml

/etc/metricbeat/modules.d/system.yml

如果是第一次安裝,Metricbeat 就需要在 Kibana 建立對應的 Index template 與 Dashboard,如下:

sudo metricbeat setup

這個動作執行需要一點時間,而且要確保執行的機器與 Kibana 是可以連線的,如果已經執行過 Dashboard 的安裝,就可以略過這個步驟。建立好以後我們可以在 Kibana 看到很多新建立的 Dashboard:

ElasticSearch-Dashboard

像我的環境可能要同時監控不同 IaaS Cloud 上面的 VM,安裝過 Dashboard 以後,其他機器就只需要確認 ElasticSearch 可以連線收資料即可。

設定好以後啟動服務,就會開始自動傳送資料到 ElasticSearch 囉,如下:

sudo service metricbeat start

ElasticSearch 搜集資料以後,接著我們從 Kibana Dashboard 就可以進行 System Monitor,提供顯示的資訊如下:

ElasticSearch-System-Dashboard

除了 System Metricbeat 還可以做些什麼?

這一次研究 ElasticSearch 來實現 Monitor 主要是服務營運需求,平時我們已經透過 ElasticSearch 搜集各種層級的 Log Data,當系統發生問題時,如果可以同時搭配 Service Log 與 System Status 會更方便我們定位錯誤,這幾年我已經放棄那些有歷史眼淚的服務監控系統 (像是 Cacti, MRTG 等等老屁股工具)。此外,Beats 除了 System Metric 還提供很多很多模組,像是 MySQL, Container, Kubernates 等等都是常使用的服務,另外搭配 Filebeat 來搜集服務 Log 也是非常好用的,例如 MySql 壓力的監控、SlowLog 等等都可以一起放進來監測,相當方便。