Day 4 已經讓 Prometheus 成功收到 server01 的監控資料。
目前架構是:
server01
│
│ Node Exporter :9100
▼
Prometheus :9090
在 Prometheus 裡,我們已經可以查到:
node_cpu_seconds_total
node_memory_MemAvailable_bytes
node_filesystem_avail_bytes
問題是,這些資料對人來說並不是很好閱讀。
今天要做的事情很單純:
安裝 Grafana,連接 Prometheus,做出第一個 Server Dashboard。
今天完成後會變成這樣
server01
│
│ Metrics
▼
Node Exporter
│
▼
Prometheus
│
│ Data Source
▼
Grafana
│
▼
Dashboard
Prometheus 繼續負責收資料。
Grafana 則負責把這些資料畫成圖表。
Step 1:安裝 Grafana
先登入 Monitoring Server:
安裝必要套件:
sudo apt update
sudo apt install -y apt-transport-https software-properties-common wget gpg
加入 Grafana 的 repository:
sudo mkdir -p /etc/apt/keyrings
wget -q -O - https://apt.grafana.com/gpg.key |
gpg --dearmor |
sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
接著加入套件來源:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" |
sudo tee /etc/apt/sources.list.d/grafana.list
更新套件清單:
sudo apt update
安裝 Grafana:
sudo apt install grafana -y
Step 2:啟動 Grafana
安裝完成後啟動服務:
sudo systemctl start grafana-server
設定開機自動啟動:
sudo systemctl enable grafana-server
確認狀態:
sudo systemctl status grafana-server
如果看到:
Active: active (running)
代表 Grafana 已經正常啟動。
Step 3:打開 Grafana
Grafana 預設使用:
3000 Port
所以在瀏覽器輸入:
第一次登入預設帳號通常是:
Username:admin
Password:admin
第一次登入後 Grafana 會要求修改密碼。
完成之後,就會進到 Grafana 首頁。
Step 4:把 Prometheus 接進 Grafana
Grafana 本身不負責收 Server Metrics。
所以要告訴 Grafana:
資料在 Prometheus 裡。
在 Grafana 裡找到:
Connections → Data sources
選擇:
Prometheus
接著設定 Prometheus Server URL:
因為目前 Prometheus 和 Grafana 都裝在同一台 Monitoring Server,所以直接使用 localhost 即可。
最後按:
Save & Test
如果看到類似:
Successfully queried the Prometheus API.
代表:
Prometheus
│
▼
Grafana
已經成功連接。
Step 5:做第一個 Dashboard
接下來建立:
Dashboards → New → New Dashboard
選擇:
Add visualization
Data Source 選:
Prometheus
第一個我們先做最簡單的。
輸入:
up{job="server01"}
昨天有提到:
1 = 正常
0 = 無法取得資料
所以這個 Panel 可以直接拿來看:
server01 現在是不是還活著。
Panel 名稱可以設定成:
Server Status
Visualization 可以選:
Stat
這樣就有第一個監控 Panel 了。
Step 6:加入 Memory 使用率
只有 Server Status 當然不太夠。
接著新增第二個 Panel。
這次看 Memory。
Prometheus 原本會提供:
node_memory_MemTotal_bytes
以及:
node_memory_MemAvailable_bytes
我們可以利用這兩個數字算出目前 Memory 使用率。
輸入:
100 * (
1 -
node_memory_MemAvailable_bytes{job="server01"}
/
node_memory_MemTotal_bytes{job="server01"}
)
Visualization 可以選:
Gauge
Unit 則選:
Percent (0-100)
這樣 Dashboard 上就會直接顯示:
Memory Usage
62%
比昨天直接看到一大串 Bytes 好理解很多。
Step 7:加入 CPU 使用率
再新增第三個 Panel。
輸入:
100 - (
avg by(instance) (
rate(node_cpu_seconds_total{
job="server01",
mode="idle"
}[5m])
) * 100
)
Panel 名稱:
CPU Usage
Visualization 一樣可以使用:
Gauge
Unit:
Percent (0-100)
現在我們的 Dashboard 已經開始有點樣子了。
第一個 Dashboard 完成
目前應該至少有:
┌─────────────────────────────┐
│ server01 │
├─────────┬─────────┬─────────┤
│ Status │ CPU │ Memory │
│ │ │ │
│ 1 │ 35% │ 62% │
└─────────┴─────────┴─────────┘
雖然還很簡單,但現在我們終於不用一直看:
node_memory_MemAvailable_bytes
或:
node_cpu_seconds_total
而是可以直接看到:
CPU 現在多少?
Memory 用了多少?
Server 還有沒有正常被監控?
Prometheus 和 Grafana 到底差在哪?
做到這裡,也比較容易理解兩個工具各自在做什麼。
Prometheus:
幫我們把監控資料收回來。
Grafana:
幫我們把資料變得看得懂。
所以目前整套流程已經變成:
Server
↓
Node Exporter
↓
Prometheus
↓
Grafana
↓
Dashboard
到這一步,我們已經有一套最基本的 Server Monitoring 了。
Day 5 完成
今天完成:
✓ 安裝 Grafana
✓ 啟動 Grafana
✓ 連接 Prometheus
✓ 建立第一個 Dashboard
✓ Server Status
✓ CPU Usage
✓ Memory Usage
現在我們已經可以看到主機狀態。
但還有一個很實際的問題。
假設今天凌晨 CPU 突然跑到 95%,總不能要求維運人員 24 小時一直盯著 Grafana。
所以:
有監控還不夠,我們還需要主動告訴人「出事了」。