Metric 的中文是『指標』,在維基百科的定義為『a measure of some property of a piece of software or its specifications』[1],也就是一個對於軟體其中某些屬性的量測方法,這邊的屬性可以像是作業系統的 CPU、Memory、Disk I/O、資料庫的連線數…等。
一般使用 Metrics 所關注的這些資訊,也就是我們用來觀察系統健康指標的重要依據,與先前介紹的 Uptime 相比,Uptime 強調的是『生死』,也就是系統是不是活著的,而 Metrics 強調的是『各種表達系統狀態的指標數字』,讓我們知道系統運作的情況,如果以人的健康來比喻,就好比人的體溫、心率、血壓、血糖、體重…等,這些資訊可以讓我們知道人體的身體健康狀態,能協助我們判斷是否要做出一些生活作息的調整、去看醫生、吃藥…等安排。
收集並監控系統的 Metrics 已經是系統穩定度監控 (Monitoring) 行之有年、也常重要、做法也非常成熟的一件事了, 而 Metrics 也是這系列文章的主軸 - Observability 的三本柱 (Metrics, Traces, Logs) 之一,我們接下來將介紹,如何在 Elastic 的解決方案中,收集 Metrics。
Elastic 針對 Metrics 的收集,主要是使用 Elastic Beats 家族裡的 Metricbeat,如同先前介紹過的 Heartbeat 一樣,Metricbeat 也是基於 libbeat
所開發,並且是一個很輕量的常駐程式,可以安裝在某台主機上,持續的收集這台主機本身的系統指標、或是運作在這台主機上指定服務的指標資訊,也能從這台主機透過網路收集另台遠端主機上指定的某個服務的指標資訊,並且將這些資訊送到指定的地點,例如 Elasticsearch 或是 Logstash,最終能透過 Kibana 的 Dashboard,從單一入口,來觀看這些散落在各地的 Metrics 資料。
Metricbeat 本身定義了基本的資料收集、處理、送出的邏輯,而收集的方法,因為每種系統或服務的接口都不一樣、或是要收集的資訊也不同,因此這部份是用模組化 (Modulized) 的設定架構,針對各種不同的服務開發出各種 module,並且在 module 裡面實作對應的處理。
Metricbeat module 本身能收集到的資訊,也必然是該服務有對外揭露的資訊,以下圖 Redis module 為例,Redis module 有提供一個 info
的 Metricset,而這個 info
的 Metricset 就是透過 Redis 的 INFO
指令取得資訊,另外像是 MySQL module 所提供的 status
的 Metrics 則是使用 SHOW GLOBAL STATUS
的 SQL 語法取得的資訊。
圖片來源:官方文件 - How Metricbeat works [2]
這邊列出幾個 Metricbeat 的重點原理,透過了解 Metricbeat 的運作設計,讓我們知道該如何使用 Metricbeat,減少錯誤的期待。
array
或是 nested object
的方式來存取這些資料,如果我們會需要將資料的格式存成像是 Metrics2.0 這種標準格式的話,要注意到這些資料在 Elasticsearch 是被合併儲存的,當然我們也可以另外透過 Logstash 等方式,將這些 raw event 拆開儲存。要使用 Metricbeat 之前,要先另外準備好 Elasticsearch 和 Kibana,接著再進行 Metricbeat 的安裝,以下是使用最簡單的安裝步驟來做介紹,其實與官方的 Quick start 的文件差不多,先大約知道將 Metricbeat 運作起來的流程為何,我將會以 MacOS
為例。
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.14.2-darwin-x86_64.tar.gz
tar xzvf metricbeat-7.14.2-darwin-x86_64.tar.gz
metricbeat.yml
指定 Elasticsearch 的位置output.elasticsearch:
hosts: ["myEShost:9200"]
username: "metricbeat_internal"
password: "YOUR_PASSWORD"
metricbeats.yml
裡,也指定 Kibana 的位置,這是接下來要匯入 Dashboard 所使用的。setup.kibana:
host: "mykibanahost:5601"
username: "my_kibana_user"
password: "{pwd}"
./metricbeat modules enable {module_name}
Metricbeat 提供了非常多內建的模組 (modules),像是 Apache
、HTTP
、Nginx
、MySQL
、PostgreSQL
、Redis
、MongoDB
、HAProxy
、Zookeeper
...等,詳細可以查看 官方文件 Metricbeat Modules [3]。
另外針對啟動的模組,通常都會要調整這些模組的 config 檔,檔案的路徑就在 ./modules.d/
裡面,檔名就會是 module 的名字,副檔名為 .yml
。
./metricbeat setup -e
./metricbeat -d
若是要以 root
執行,要記得把 config 的擁有者也改成 root
sudo chown root metricbeat.yml
sudo chown root modules.d/system.yml
sudo ./metricbeat -e
接下來就可以到 Kibana 查看 Metricbeat 所發送的資料,有沒有成功的進入到 Elasticsearch了。
查看最新 Elasticsearch 或是 Elastic Stack 教育訓練資訊: https://training.onedoggo.com
歡迎追蹤我的 FB 粉絲頁: 喬叔 - Elastic Stack 技術交流
不論是技術分享的文章、公開線上分享、或是實體課程資訊,都會在粉絲頁通知大家哦!