Metricbeat 應用教學 搭配 Kibana 即時監控 Nginx 伺服器服務狀態

me
林彥成
2020-09-03 | 3 min.
文章目錄
  1. 1. Metricbeat 介紹
    1. 1.1. 系統層級監控 (Metric)
    2. 1.2. 安裝 Metricbeat
    3. 1.3. Metricbeat 教學
  2. 2. Nginx 伺服器資訊
  3. 3. Kibana 監看 Metric
  4. 4. 實際案例

這篇文章會示範使用 Metricbeat 傳送 Nginx 伺服器狀態到 Elasticsearch 中並使用 Kibana 即時監控系統與服務。

Metricbeat 介紹

Metricbeat 是一個輕量的指標搜集器,透過安裝 Metricbeat 這個輕量的 shipper 在需要監控的 Server 上,就可以定時的蒐集相關系統或服務的狀態資訊到 Elasticsearch 或是 Logstash,提供系統層級的監控,目前常見的服務都提供模組支援。

系統層級監控 (Metric)

為什麼系統層級 (Metric) 的監控很重要?

  • 實體機硬碟要滿了,資料庫快要寫不進去資料怎麼辦?
    • 方便知道什麼時候要加機台
  • 都沒發現網路頻寬用滿,伺服器還是很輕鬆?
  • 服務掛了等到被客訴了才發現? APP 都閃退幾次了?
    • 在高附載時提供告警
  • 每個服務都開一台機器,結果流量集中在少數服務上?
  • 有些服務吃記憶體,有些吃運算效能,到底要怎麼配機台?
    • 確認系統效能瓶頸發生的位置

Metric 跟 Log 單看內容其實很像,其中的異同在

  • Metrics 跟 Logs 都提供了監控的效果
  • Logs 專注在事件什麼時候發生,還有事件本身
  • Metrics 就是排程收集固定資料

解決的痛點:

  • 輕量不佔資源的監控
  • 完整方便的 Dashboard 模板,也可以自行克制
  • 搭配 Filebeats 傳回的 log 檔可能會更快找出問題
  • 模組多且可直接照教學使用
    • Apache
    • HAProxy
    • MongoDB
    • MySQL
    • Nginx
    • PostgreSQL
    • Redis
    • Zookeeper

安裝 Metricbeat

Metricbeat 的安裝使用步驟如下

  • 下載 Metricbeat 解壓縮
  • ./metricbeat modules enable nginx 啟用模組
  • 找到 metricbeat.yml 中的 cloud.id 及 cloud.auth 並填入正確資料
  • 取消註解 modules.d\nginx.yml 中的 server_status_path: "server-status"
  • ./metricbeat test config -e 看看有沒有打錯
  • ./metricbeat setup
  • ./metricbeat -e
  • 安裝位置盡量接近監控的系統,同一台主機會就不需要消耗網路流量

Metricbeat 教學

Elastic Stack 提供了最方便蒐集指標的工具也就是 Metricbeat,沒有之一。

Metricbeat 可以同時從系統及服務上收集好幾種指標傳送到 Elasticsearch 或是 Logstash 儲存,資料量比較大的話通常也會先傳到 Redis 或是 Kafka,資料的生命週期大致如下:

  • 排程
  • 傳送
    • Metricbeat error events: 沒抓到也會送錯誤
  • Hot data 儲存
  • 搜尋、分析
  • Warm data 封存
  • Purge

要怎麼開始使用,可以參考之前寫的 Metric Quick Start,步驟大致如下:

  • 下載
    • 有提供各平台可執行的 binaries 檔
  • 配置
    • 記得正確設定 Output
    • ./metricbeat setup --dashboards
  • 啟動
  • 查看資料
    • Index Pattern ‒{type}beat-{version}-{yyyy-MM-dd}-XXXXXX
    • XXXXXX is the number of the index for a given day (文件寫的不太懂怎麼翻 XD)
    • 預設每滿 30 天或是達到 50GB 新的 Index 就會 Rotate
    • 資料有送到 Elasticsearch 就可以透過搜尋介面查看

Nginx 伺服器資訊

Nginx 有內建的 stub_status 模組,啟用後可以監看基本的伺服器狀態,記得要限制 IP 存取。

1
2
3
4
5
6
7
8
9

location /server-status {
stub_status on;

access_log off;
allow 127.0.0.1;
deny all;
}

啟用後瀏覽器瀏覽 http://127.0.0.1/server-status 就可以看到下面的資訊

1
2
3
4
Active connections: 3
server accepts handled requests
72 72 792
Reading: 0 Writing: 1 Waiting: 2
  • Active connections:目前連線數 (含 Waiting)
  • server accepts handled requests:接受的連線數 已經處理的連線數 已經處理的請求數
  • Reading:目前正在讀取請求表頭的請求數
  • Writing:目前正在讀取請求主體、處理與回應的請求數
  • Waiting:keep-alive 的連線數

Kibana 監看 Metric

Kibana 就是一個管理的 GUI,啟動 Metricbeat 後就可以去 Dashboard 開啟相關範本後瀏覽。

要評估系統和服務需要很多指標,要評估需要:

  • 儲存: 讀檔、抓相關指標、網路流量
  • 分析: 這就是 kibana 的工作
  • 監控: 監控服務可用性

Nginx Dashboard 匯整了剛剛 Nginx stub_status 模組提供的狀態

NginxMetric

System Dashboard

SystemMetric

實際案例

如果我們想要實作一個提供地理資訊的平台,以開源的技術選型為例,資料讀取會需要好幾個服務來源提供,這樣的架構底下只要有一個服務來源出錯,前端就會有功能出現異常,這時候我們就會想要在每個服務上面都安裝監控,去發現系統裡面的效能瓶頸。

使用組合技 Metrics + Logging + APM 我們就可以更快更方便的了解服務與系統現在的狀況,在出現效能或是系統錯誤時,我們也可以更快速地去進行相關修正。

  • 資料庫: Metricbeat
  • Web Service
    • 如果服務在不同台主機上,就每一台都裝 Metricbeat
    • 服務如果有 Log 可以搭配使用 Filebeat
    • API Service: 自己實作的可以再加碼 APM

ServerAndService


喜歡這篇文章,請幫忙拍拍手喔 🤣


share