Prometheus 入門

什麼是 Prometheus?

Prometheus 是一個系統監控和告警系統。它由 SoundCloud 於 2012 年開源,是繼 Kubernetes 之後第二個加入雲原生計算基金會(CNCF)並畢業的專案。Prometheus 將所有指標資料儲存為時間序列,即指標資訊與其記錄的時間戳一起儲存,此外還可以與指標一起儲存被稱為標籤(label)的可選鍵值對。

什麼是指標,為什麼它們很重要?

通俗地說,指標是衡量的一種標準。我們想要衡量什麼取決於具體的應用程式。對於 Web 伺服器,它可能是請求時間;對於資料庫,它可能是 CPU 使用率或活動連線數等。

指標在瞭解你的應用程式為何以某種方式執行方面起著重要作用。如果你執行一個 Web 應用程式,有人走過來對你說該程式很慢,你將需要一些資訊來查明你的程式到底發生了什麼。例如,當請求數量很高時,應用程式可能會變慢。如果你有請求計數指標,你就可以找出原因並增加伺服器數量來處理沉重的負載。每當你為你的應用程式定義指標時,你都必須戴上偵探帽,並問這樣一個問題:如果我的應用程式中出現任何問題,有哪些資訊對我進行除錯至關重要?

Prometheus 的基本架構

Prometheus 設定的基本元件包括

  • Prometheus Server(抓取並存儲指標資料的伺服器)。
  • 被抓取的目標,例如暴露其指標的已插樁應用程式,或者暴露另一個應用程式指標的 Exporter。
  • Alertmanager,用於根據預設規則觸發告警。

(注:除此之外,Prometheus 還有 push_gateway,這裡不作討論)。

Architecture

讓我們以一個 Web 伺服器作為示例應用程式,並且我們想要提取某個特定的指標,比如該 Web 伺服器處理的 API 呼叫次數。因此,我們使用 Prometheus 客戶端庫新增一些插樁程式碼並暴露指標資訊。現在我們的 Web 伺服器暴露了它的指標,我們可以配置 Prometheus 來抓取它。現在,Prometheus 被配置為以特定的時間間隔(例如,每分鐘)從監聽在 xyz IP 地址、埠 7500 的 Web 伺服器獲取指標。

在 11:00:00,當我將伺服器公開供使用時,應用程式計算請求計數並將其暴露,Prometheus 同時抓取該計數指標並將值儲存為 0。

到 11:01:00 時,處理了一個請求。伺服器中的插樁邏輯將計數增加到 1。當 Prometheus 抓取該指標時,計數的值現在為 1。

到 11:02:00 時,又處理了兩個請求,此時請求計數為 1+2 = 3。以此類推,指標會被不斷抓取和儲存。

使用者可以控制 Prometheus 抓取指標的頻率。

時間戳請求計數(指標)
11:00:000
11:01:001
11:02:003

(注:此表僅用於理解。Prometheus 不會以這種精確的格式儲存這些值)

Prometheus 還提供了一個 API,允許查詢透過抓取儲存的指標。此 API 用於查詢指標、在指標上建立儀表盤/圖表等。PromQL 用於查詢這些指標。

在“請求計數”指標上建立的簡單折線圖將如下所示

Graph

你可以抓取多個有用的指標來了解應用程式中正在發生的事情,並據此建立多個圖表。將這些圖表組合到一個儀表盤中,即可獲得應用程式的整體概覽。

展示具體怎麼做

讓我們親自動手來安裝 Prometheus。Prometheus 是使用 Go  編寫的,你只需要針對你的作業系統編譯的二進位制檔案即可。從這裡下載與你的作業系統對應的二進位制檔案,並將其新增到你的系統路徑中。

Prometheus 會暴露自身的指標,這些指標可以由它自己或其他 Prometheus 伺服器使用。

現在我們已經安裝了 Prometheus,下一步就是執行它。我們所需要的僅僅是二進位制檔案和一個配置檔案。Prometheus 使用 YAML 檔案進行配置。

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]

在上面的配置檔案中,我們提到了 scrape_interval,即我們希望 Prometheus 抓取指標的頻率。我們添加了 scrape_configs,其中包含要從中抓取指標的名稱和目標。Prometheus 預設監聽在 9090 埠,因此請將其新增到 targets 中。

prometheus --config.file=prometheus.yml

現在我們已經啟動並運行了 Prometheus,並且它每隔 15 秒就會抓取一次自身的指標。Prometheus 提供了標準的 Exporter 來匯出指標。接下來,我們將執行一個 node exporter(這是一個用於機器指標的 Exporter),並使用 Prometheus 抓取這些指標。(下載 Node 指標 Exporter。

在終端中執行 node exporter。

./node_exporter

Node exporter

接下來,將 node exporter 新增到 scrape_configs 列表中

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: node_exporter
    static_configs:
      - targets: ["localhost:9100"]

在本教程中,我們討論了什麼是指標及其重要性、Prometheus 的基本架構以及如何執行 Prometheus。

本頁內容