▪️Prometheus - 甚麼是 Prometheus ?
2025-3-19
| 2025-4-2
字數 1009閱讀時間 3 分鐘

甚麼是 Prometheus?

Prometheus 是一套開源的監控與警訊系統,最初由 SoundCloud 開發,現在是雲端原生運算基金會 (CNCF) 的一部分。
主要用途:
  • 收集各種系統與應用程式的指標資料 (Metrics)
  • 提供強大的查詢語言 PromQL
  • 根據條件觸發警報 (Alerting)
 

基本架構

Prometheus 由以下幾個核心組件組成:
  1. Server(主服務)
      • 負責定期抓取監控目標的數據,存儲時序 (times series) 數據,並提供查詢功能。
      • 內建時間序列資料庫(TSDB),不依賴外部資料庫。
      • 可透過 PromQL 查詢監控數據。
  1. Exporter(數據暴露器)
      • 負責將目標系統的數據轉換為 Prometheus 可讀格式 - 指標 (metric)(/metrics 端點)。
      • 例如:
        • node_exporter:監控主機 CPU、記憶體、磁碟等。
        • blackbox_exporter:監控 HTTP、DNS、TCP 等服務的可用性。
        • mysqld_exporter:監控 MySQL 資料庫指標。
  1. Pushgateway(數據推送網關,可選)
      • 一般情況下,Prometheus 採用「拉取」(Pull)模式,但對於短生命週期的任務(如 CI/CD Job),可以用 Pushgateway 來讓 Exporter 暫存指標
  1. Alertmanager(告警管理器)
      • 處理 Prometheus 發送的告警,並支援:
        • 去重(Deduplication):避免相同告警重複發送。
        • 分組(Grouping):將相關告警整合。
        • 抑制(Silencing):設定某些告警在特定時間內不觸發(如維護期間)。
        • 通知(Notification):支援 Email、Slack、PagerDuty、Webhook 等。
  1. Grafana(可選,可視化工具)
      • 提供更直觀的數據儀表板,支援 PromQL 查詢。
 

運作原理

Prometheus 主要採取 拉取式架構(Pull-based Architecture),會定期從監控目標抓取數據,並將其存入時序數據庫(TSDB)。

步驟 1:數據抓取(Scraping)

  1. Prometheus 透過 scrape_configs 內的設定,定期訪問目標的 /metrics 端點。
  1. 目標服務(如 node_exporter、Kubernetes Pod)返回 基於文本的時序數據,格式如下:
      • http_requests_total 是指標名稱,代表 HTTP 請求總數。
      • {method="GET", status="200"} 是標籤(Label),用於區分不同類型的請求。
      • 1027 是數據值,表示 GET 200 的請求數量。

步驟 2:數據存儲(Time-Series Database, TSDB)

  • Prometheus 內建 TSDB,會將數據存入以時間戳記(Timestamp)為基礎的時序資料庫:
    • 數據存放在 /data 目錄內,Prometheus 會自動進行 壓縮與滾動存儲,例如:
      • 小於 2 小時的數據存於 WAL(Write-Ahead Log)
      • 超過 2 小時 的數據則會封存成 TSDB Block(存放壓縮數據)。

    步驟 3:數據查詢(PromQL)

    • PromQL(Prometheus Query Language)是 Prometheus 的查詢語言,可用於分析時序數據。例如:
      • 查詢某個指標的當前值:
        • 查詢 5 分鐘內 HTTP 請求的變化率:
          • 查詢 CPU 使用率前 5 名的 Pod:

          步驟 4:告警機制(Alerting)

          1. Prometheus 設定告警規則,如:
              • expr: up == 0:表示監控目標宕機時觸發告警。
              • for: 5m:若該狀態持續 5 分鐘才觸發告警,避免短暫波動。
              • severity: critical:標記告警的嚴重程度。
          1. Alertmanager 接收告警,並根據設定發送通知,例如:

            步驟 5:視覺化(Grafana)

            1. 設定 Prometheus 為數據來源
            1. 建立儀表板(Dashboard)
                • 可使用內建面板或官方模板,將數據以圖表方式呈現。
          2. Prometheus
          3. Prometheus - Install ServerAngular - SSR (伺服器端渲染)
            Loading...