Day 3 我們先準備好了兩台主機:
Monitoring Server
192.168.1.100
↓ 監控
Target Server
192.168.1.101
也確認了兩台主機之間可以正常 Ping、SSH。
今天就正式開始把第一個監控元件放進來。
這次的目標很單純:
讓 Prometheus 可以從 server01 收到監控資料。
今天會做什麼?
今天只處理兩個元件:
Monitoring Server
│
│ Prometheus
│
▼
Target Server
│
│ Node Exporter
▼
CPU / Memory / Disk / Network
這裡有一個很重要的地方。
Prometheus 本身負責的是:
定期去收集 Metrics。
但是 Target Server 並不會自己把 CPU、Memory 這些資訊提供給 Prometheus。
所以我們還需要在被監控的 Linux Server 上安裝:
Node Exporter
Node Exporter 會把 Linux 系統資訊整理成 Prometheus 看得懂的 Metrics。
Step 1:安裝 Prometheus
先登入 Monitoring Server:
更新套件:
sudo apt update
接著安裝 Prometheus:
sudo apt install prometheus -y
安裝完成後確認服務:
sudo systemctl status prometheus
如果看到:
Active: active (running)
代表 Prometheus 已經正常啟動。
也可以設定開機自動啟動:
sudo systemctl enable prometheus
Step 2:打開 Prometheus
Prometheus 預設使用:
9090 Port
所以可以從瀏覽器開啟:
如果可以看到 Prometheus 的介面,就代表第一步成功了。
不過這時候還沒有開始監控 server01。
接下來要去準備 Target Server。
Step 3:在 Target Server 安裝 Node Exporter
登入被監控的主機:
安裝 Node Exporter:
sudo apt update
sudo apt install prometheus-node-exporter -y
確認服務:
sudo systemctl status prometheus-node-exporter
同樣看到:
Active: active (running)
就代表 Node Exporter 已經啟動。
Node Exporter 預設使用:
9100 Port
可以先在 Target Server 本機測試:
curl http://localhost:9100/metrics
這時候畫面應該會出現很多資料,例如:
node_cpu_seconds_total
node_memory_MemTotal_bytes
node_memory_MemAvailable_bytes
node_filesystem_size_bytes
第一次看到可能會覺得:
怎麼一大堆東西?
其實先不用全部看懂。
現在只需要知道:
Node Exporter 已經成功把 Linux 系統資訊轉成 Metrics。
Step 4:確認 Monitoring Server 抓得到資料
接著回到 Monitoring Server。
測試:
curl http://192.168.1.101:9100/metrics
如果一樣可以看到大量 Metrics,代表:
Prometheus Server
│
│ Network OK
▼
Node Exporter
192.168.1.101:9100
這條路已經通了。
如果這裡連不到,就先不要急著修改 Prometheus。
可以先檢查:
ping 192.168.1.101
以及:
curl http://192.168.1.101:9100
先確定網路與 Port 沒有問題。
Step 5:告訴 Prometheus 要監控誰
接下來要修改 Prometheus 的設定檔。
Ubuntu 套件安裝的設定檔通常放在:
/etc/prometheus/prometheus.yml
打開:
sudo nano /etc/prometheus/prometheus.yml
找到:
scrape_configs:
加入一個新的 Job:
job_name: 'server01'
static_configs:
整體概念就是告訴 Prometheus:
有一台叫做 server01 的設備,你要去 192.168.1.101:9100 抓資料。
儲存之後,可以先檢查設定檔:
promtool check config /etc/prometheus/prometheus.yml
如果看到:
SUCCESS
再重新啟動 Prometheus:
sudo systemctl restart prometheus
確認:
sudo systemctl status prometheus
Step 6:確認 Target 是否正常
接下來重新打開:
進入:
Status → Targets
應該會看到類似:
server01
Endpoint
http://192.168.1.101:9100/metrics
State
UP
這個:
UP
就是今天最重要的結果。
代表 Prometheus 已經成功連到 server01,而且正在定期收集 Metrics。
目前資料流已經變成:
server01
│
│ Node Exporter
│ :9100
▼
Prometheus
│
│ :9090
▼
Metrics
Step 7:查詢我們的第一筆 Metrics
接下來可以在 Prometheus 搜尋:
up
執行後會看到類似:
up{instance="192.168.1.101:9100", job="server01"} 1
這裡的:
1
代表 Target 正常。
如果是:
0
代表 Prometheus 目前無法正常抓到這個 Target。
所以光是一個很簡單的 up,其實就已經可以拿來判斷:
這台 Server 的監控端點現在是不是正常。
再看看 Memory 資訊
也可以搜尋:
node_memory_MemTotal_bytes
會看到 server01 的記憶體總容量。
例如:
node_memory_MemTotal_bytes{
instance="192.168.1.101:9100",
job="server01"
}
Prometheus 收到的資料很多都是這種原始數字。
目前看起來並不是特別直覺。
例如 Memory 可能會看到:
4115189760
第一眼很難直接知道到底用了多少。
這也是我們後面為什麼還會需要 Grafana。
今天完成了什麼?
Day 4 我們終於收到這個專案的第一筆真正監控資料。
目前架構:
┌──────────────────┐
│ server01 │
│ 192.168.1.101 │
│ │
│ Node Exporter │
│ :9100 │
└────────┬─────────┘
│
│ Metrics
▼
┌──────────────────┐
│ Prometheus │
│ 192.168.1.100 │
│ :9090 │
└──────────────────┘
今天完成:
✓ 安裝 Prometheus
✓ 安裝 Node Exporter
✓ 確認 Node Exporter Metrics
✓ Prometheus 加入 server01
✓ Target 顯示 UP
✓ 查詢第一筆 Metrics
到這裡,我們已經跨過一個重要的階段。
前面三天都還是在準備環境。
從今天開始:
Monitoring Server 已經真的在監控另一台 Server。
但現在還有一個問題
Prometheus 可以收到資料了。
但現在看到的是:
node_cpu_seconds_total
node_memory_MemAvailable_bytes
node_filesystem_avail_bytes
對人來說並不是很好閱讀。
我真正想看的其實是:
CPU 35%
Memory 62%
Disk 48%
最好還可以直接用圖表看到一段時間內的變化。
所以接下來就輪到另一個元件出場了。