喬叔的 Elastic Stack 專業教育訓練
  • 喬叔的 Elastic Stack 專業教育訓練
  • 🧑關於喬叔 (Joe Wu)
  • Elastic 課程公開班
    • 🎯Elasticsearch 基礎實務班
      • 💯學員課後回饋
    • 🆕Elasticsearch 進階運維班
      • 💯學員課後回饋
    • Elasticsearch 進階開發班
    • Elastic Stack 基礎實務班
    • Elastic Observability 基礎實務班
    • 📩課程許願池
  • 技術分享
    • 📗喬叔帶你上手 Elastic Stack
      • 前言
      • Elastic Cloud 如何建立 Deployment
        • ES Node 的種類
        • 配置的選擇
      • Index 建立前你該知道的
        • ES Index 如何被建立
        • ES 的超前佈署 - Dynamic Mapping
        • ES 的超前佈署 - Index Template
        • ES Index 的別名 (Alias)
        • 管理你的 Index - Kibana Index
      • 管理 Index 的 Best Practices
        • Shard 的數量與 Rollover & Shrink API
        • 三溫暖架構 - Hot Warm Cold Architecture
        • Index Lifecycle Management (ILM)
        • Rollup
        • Transform
        • Snapshot Lifecycle Management (SLM)
        • 總結
      • Elastic Cloud 比免費版還多的功能
        • Elastic Stack 的方案比較與銷售方式
        • Centralized Beats Management
        • Centralized Pipeline Management
        • Watcher
        • Elasticsearch Token Service
        • Multi-stack monitoring & Automatic stack issue alerts
      • 向 App Search 學習怎麼用 Elasticsearch
        • 揭開 App Search 的面紗
        • Engine 的 Index Settings 篇
        • Engine 的 Mapping 篇
        • Engine 的 Search 基礎剖析篇
        • Engine 的 Search 進階剖析篇
      • Elasticsearch 的優化技巧
        • Indexing 索引效能優化
        • Searching 搜尋效能優化
        • Index 的儲存空間最佳化
        • Shard 的最佳化管理
      • 完賽心得
    • 📘喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
      • 前言 & 淺談 Observability
      • Elastic 的 Observability 解決方案
      • Uptime - 掌握系統的生命徵象
        • 我們要觀測的生命徵象是什麼?
        • 使用 Heartbeat 收集系統生命徵象數據
        • 透過 Kibana 觀看心電圖及設定警報
        • 使用合成監控 (Synthetics Monitor) 從使用者情境驗證服務的運作狀態
      • Metrics - 觀察系統的健康指標
        • Metrics 與 Metricbeat 的基本介紹
        • 使用 Metricbeat 掌握 Elastic Stack 的健康狀態
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Docker 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Kubernetes 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇
      • Logs - 挖掘系統內部發生的狀況
        • Logs 與 Filebeat 的基本介紹
        • 使用 Filebeat 應該要了解的設計細節與原理
        • 透過 Filebeat 收集 Elastic Stack 中各種服務的細節資訊
        • 透過 Filebeat 收集 Infrastructure 中各種服務的細節資訊
      • Traces - 觀察應用程式的效能瓶頸
        • Elastic APM 基本介紹
        • 使用 APM-Integratoin-Testing 建立 Elastic APM 的模擬環境
        • 如何在 Kibana 使用 APM UI
        • 使用 APM Server 來收集 APM 數據
        • 透過 APM Agents 收集並傳送後端服務運作的記錄
        • 透過真實使用者監控 (RUM, Real User Monitoring) 來改善使用者體驗
      • 建立結構化的 Log
        • Elastic Common Schema 結構化 Log 的規範
        • Elasticsearch Ingest Pipeline 資料 Index 前的轉換好幫手
          • 基本介紹
          • 各種常用的 Processor
          • Enrich 資料與例外處理
      • 有效的使用 Observability 的資料
        • 透過 Machine Learning 發現異常的問題
        • 使用 Kibana Alerts 主動通知異常狀況
        • 資料的生命週期管理
        • 使用 Elastic Observability 追縱及觀察問題的心得
      • 完賽心得
    • 😀Elasticsearch 技術分享小品
      • 🤖Elastic 與 AI
        • Elasticsearch Inference API 讓我們直接在 ES 裡運用 OpenAI Completion API
    • 🎥線上分享
      • 喬叔 Elasticsearch Index 管理與效能優化技巧
      • Elastic Certification 認證經驗分享
    • 🛠️workshop
      • 如何在 Elasticsearch 實現敏捷的資料建模與管理 @ DevOpsDays 2023
        • 工作坊實作內容
      • Elastic Observability 實作體驗坊 @ DevOpsDays 2022
        • 行前準備
        • 工作坊實作內容
      • 當 Elasticsearch 搜尋引擎遇上 AI @ HelloWordDevConference 2024
        • 投影片
        • Elasticsearch 環境準備
        • Google Colab 環境準備
        • 工作坊操作說明
        • ElasticSearch Relevance Engine (ESRE)
    • ⬆️Elastic Stack 版本升級記錄
      • 🔍Elasticsearch
  • 其他專業服務
    • 👩‍🎓企業包班 | 企業內訓
    • 👨‍💼顧問服務
    • 🈺專案合作
    • 🧩Elastic 授權代理
  • 相關連結
    • Facebook 粉絲頁
Powered by GitBook
On this page
  • 本篇學習重點
  • 什麼是 Metrics
  • Metricbeat 的介紹
  • Metricbeat 的運作架構
  • Metricbeat 的設計原理
  • Metricbeat 的使用方式
  • 參考資料
  1. 技術分享
  2. 喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
  3. Metrics - 觀察系統的健康指標

Metrics 與 Metricbeat 的基本介紹

PreviousMetrics - 觀察系統的健康指標Next使用 Metricbeat 掌握 Elastic Stack 的健康狀態

Last updated 2 years ago

本篇學習重點

  • 什麼是 Metrics

  • Metricbeat 的運作架構與設計概念簡介

  • 怎麼安裝及設定 Metricbeat 來收集 Metrics 資料


什麼是 Metrics

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。

Metricbeat 的介紹

Elastic 針對 Metrics 的收集,主要是使用 Elastic Beats 家族裡的 Metricbeat,如同先前介紹過的 Heartbeat 一樣,Metricbeat 也是基於 libbeat 所開發,並且是一個很輕量的常駐程式,可以安裝在某台主機上,持續的收集這台主機本身的系統指標、或是運作在這台主機上指定服務的指標資訊,也能從這台主機透過網路收集另台遠端主機上指定的某個服務的指標資訊,並且將這些資訊送到指定的地點,例如 Elasticsearch 或是 Logstash,最終能透過 Kibana 的 Dashboard,從單一入口,來觀看這些散落在各地的 Metrics 資料。

07-metricbeat-system-dashboard

Metricbeat 的運作架構

Metricbeat 本身定義了基本的資料收集、處理、送出的邏輯,而收集的方法,因為每種系統或服務的接口都不一樣、或是要收集的資訊也不同,因此這部份是用模組化 (Modulized) 的設定架構,針對各種不同的服務開發出各種 module,並且在 module 裡面實作對應的處理。

Metricbeat module 本身能收集到的資訊,也必然是該服務有對外揭露的資訊,以下圖 Redis module 為例,Redis module 有提供一個 info 的 Metricset,而這個 info 的 Metricset 就是透過 Redis 的 INFO 指令取得資訊,另外像是 MySQL module 所提供的 status 的 Metrics 則是使用 SHOW GLOBAL STATUS 的 SQL 語法取得的資訊。

Metricbeat 的設計原理

這邊列出幾個 Metricbeat 的重點原理,透過了解 Metricbeat 的運作設計,讓我們知道該如何使用 Metricbeat,減少錯誤的期待。

  • Metricbeat 除了收集指定系統或服務的 Metric 之外,如果收集的過程發生錯誤,Metricbeat 會發送 error event,讓我們在之後分析時能知道有發生拿不到 Metrics 的資訊。

  • Metricbeat 不支援彙總 (aggregation),每一個時間點收集到的 event 都是獨立一筆,不支援把多筆 event 的結果進行加總、總計等,有這些需求都需要等資料到 Elasticsearch 之後再進行處理。

  • Metricbeat 相較於一般的收集 Metrics 的工具比,他記錄不只是數字的資料,在不同的 module 裡,甚至會包含文字的內容,所以每個 module 裡所定義的 Metricset 在 Elasticsearch 也都會有對應的 Mapping 定義,以優化資料在 Elasticsearch 裡儲存及搜尋的效能。

Metricbeat 的使用方式

要使用 Metricbeat 之前,要先另外準備好 Elasticsearch 和 Kibana,接著再進行 Metricbeat 的安裝,以下是使用最簡單的安裝步驟來做介紹,其實與官方的 Quick start 的文件差不多,先大約知道將 Metricbeat 運作起來的流程為何,我將會以 MacOS 為例。

  1. 下載,並解壓縮 Metricbeat。

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
  1. 在解壓縮目錄下的 metricbeat.yml 指定 Elasticsearch 的位置

output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "metricbeat_internal"
  password: "YOUR_PASSWORD" 
  1. 同樣在 metricbeats.yml 裡,也指定 Kibana 的位置,這是接下來要匯入 Dashboard 所使用的。

setup.kibana:
  host: "mykibanahost:5601" 
  username: "my_kibana_user"  
  password: "{pwd}"
  1. 啟動要安裝的模組

./metricbeat modules enable {module_name}

另外針對啟動的模組,通常都會要調整這些模組的 config 檔,檔案的路徑就在 ./modules.d/ 裡面,檔名就會是 module 的名字,副檔名為 .yml。

  1. 安裝 Metricbeat 內建的 Kibana Dashboard,以及 Elasticsearch 的 Index Template。

./metricbeat setup -e
  1. 啟動 Metricbeat

./metricbeat -d

若是要以 root 執行,要記得把 config 的擁有者也改成 root

sudo chown root metricbeat.yml 
sudo chown root modules.d/system.yml 
sudo ./metricbeat -e

接下來就可以到 Kibana 查看 Metricbeat 所發送的資料,有沒有成功的進入到 Elasticsearch了。

參考資料

07-metricsbeat-module-overview

圖片來源: [2]

Metricbeat 會在將資料傳送到 Elasticsearch 時,將多筆的 events 存在同一筆 document 之中來傳送,以減少資料傳輸的 overhead,並且在 Elasticsearch 裡面使用 array 或是 nested object 的方式來存取這些資料,如果我們會需要將資料的格式存成像是 這種標準格式的話,要注意到這些資料在 Elasticsearch 是被合併儲存的,當然我們也可以另外透過 Logstash 等方式,將這些 raw event 拆開儲存。

Metricbeat 提供了非常多內建的模組 (modules),像是 Apache、HTTP、Nginx、MySQL、PostgreSQL、Redis、MongoDB、HAProxy、Zookeeper...等,詳細可以查看 [3]。

📘
官方文件 - How Metricbeat works
Metrics2.0
官方文件 Metricbeat Modules
Wikipedia - Metric
官方文件 - How Metricbeat works
官方文件 - Metricbeat Modules