Prometheus + Grafana 監控全棧教學
在現代 Linux 系統管理中,僅靠 top 或 htop 已無法滿足需求。當服務規模擴大,我們需要一套完整的可觀測性(Observability)解決方案。Prometheus 作為業界標準的指標監控系統,搭配 Grafana 的強大視覺化能力,是構建監控儀表板的黃金組合。本文將引導中階 Linux 使用者,在 Ubuntu 22.04 或 Debian 12 環境中,快速部署並配置這套監控棧。
第一步:部署 Prometheus
Prometheus 是一個基於時間序列資料庫的監控系統,它通過 HTTP 協議拉取(pull)目標指標。由於其架構簡單且無需依賴外部資料庫,我們可以直接下載二進位檔進行部署。
首先,建立專門的系統帳號以確保安全性:
sudo groupadd --system prometheus
sudo useradd --system -g prometheus -s /sbin/nologin prometheus
接著,下載最新穩定版的 Prometheus。請前往官方 GitHub Releases 頁面確認最新版本號,以下範例以 2.48.0 為例:
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
cd prometheus-2.48.0.linux-amd64
# 建立必要的目錄結構
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 移動檔案並設定權限
sudo mv prometheus promtool /usr/local/bin/
sudo mv consoles console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus
現在,我們需要建立 Prometheus 的設定檔 /etc/prometheus/prometheus.yml。這個檔案定義了 Prometheus 如何監控自身以及未來的目標。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
為了方便管理,我們建立一個 systemd service 檔案 /etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
啟動服務並檢查狀態:
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus
此時,打開瀏覽器訪問 http://<你的IP>:9090,應該能看到 Prometheus 的 Web UI。點擊 "Status" -> "Targets",確認 "prometheus" 目標狀態為 "UP"。
第二步:安裝與配置 Grafana
Grafana 負責將 Prometheus 收集的數據以圖表形式呈現。在 Debian/Ubuntu 系統中,推薦使用官方 APT 倉庫安裝。
# 安裝依賴
sudo apt-get install -y apt-transport-https software-properties-common wget
# 匯入 GPG key 並添加倉庫
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# 安裝 Grafana
sudo apt-get update
sudo apt-get install grafana
啟動 Grafana 服務:
sudo systemctl enable --now grafana-server
訪問 http://<你的IP>:3000,預設帳密為 admin/admin,系統會強制你修改密碼。
進入 Grafana 後,點擊左側齒輪圖標 -> "Data Sources" -> "Add data source" -> 選擇 "Prometheus"。在 URL 欄位填入 http://localhost:9090,點擊底部 "Save & Test"。若顯示 "Success",表示數據源連接成功。
第三步:實戰監控 Linux 主機
要監控 Linux 主機本身的資源(CPU、記憶體、磁碟等),我們需要安裝 node_exporter。這是一個輕量級的匯出器,能將作業系統指標暴露為 Prometheus 可讀取的格式。
# 下載 node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
同樣地,建立 systemd service:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
啟動並重新載入 Prometheus 設定:
sudo systemctl enable --now node_exporter
# 通知 Prometheus 重新載入配置
curl -X POST http://localhost:9090/-/reload
回到 Grafana,點擊 "+" -> "Import",輸入儀表板編號 1860(這是社區廣泛使用的 Node Exporter Full 儀表板),點擊 Load。稍等片刻,你就能看到精美的主機資源監控圖表了。
常見問題與解決方案
-
Prometheus 無法抓取 node_exporter 指標
- 原因:通常是防火牆阻擋或 SELinux 限制。
- 解決:在 Ubuntu 上,確保
ufw放行了9100端口(node_exporter 預設端口):sudo ufw allow 9100/tcp。若使用 SELinux,需執行semanage port -a -t node_exporter_port_t -p tcp 9100。
-
Grafana 圖表數據為空
- 原因:時間範圍選擇錯誤或數據源未正確連接。
- 解決:檢查 Grafana 右上角的時間選擇器,確保選擇了「過去 1 小時」或「最近 15 分鐘」。同時檢查 Prometheus UI 的 Targets 頁面,確認 node_exporter 的狀態是 "UP" 而非 "DOWN"。
小結
透過上述步驟,我們成功在 Linux 主機上部署了 Prometheus 與 Grafana,並實現了對主機資源的即時監控。這套組合不僅開源免費,且擁有極高的擴展性。未來,你可以輕鬆加入 MySQL Exporter、Nginx Exporter 或 Kube-Prometheus Stack 來監控資料庫、Web 伺服器或 Kubernetes 叢集。掌握這套工具,將是你邁向專業 SRE 或 DevOps 工程師的重要一步。