Prometheus監(jiān)控工具:開源系統(tǒng)監(jiān)控與告警詳解

2024-12-27 11:32 更新

Prometheus是一個開源的系統(tǒng)監(jiān)控和告警工具包,它由前Google工程師在2012年于SoundCloud開始研發(fā),并于2016年加入Cloud Native Computing Foundation(CNCF)。Prometheus以其強大的多維數(shù)據(jù)模型、靈活的查詢語言PromQL、不依賴分布式存儲、支持通過HTTP協(xié)議拉取時間序列數(shù)據(jù)、以及通過服務發(fā)現(xiàn)或靜態(tài)配置來發(fā)現(xiàn)目標服務對象等特點而受到廣泛采用。

主要組件

  • Prometheus服務器:負責抓取和存儲時間序列數(shù)據(jù)。
  • 客戶端庫:用于在應用程序代碼中添加監(jiān)控指標。
  • 推送網(wǎng)關:用于支持短期任務的時間序列數(shù)據(jù)推送。
  • Exporter:用于各種服務(如HAProxy、StatsD、Graphite等)的監(jiān)控數(shù)據(jù)導出。
  • Alertmanager:用于處理告警。
  • 其他支持工具:如Grafana等,用于數(shù)據(jù)可視化。

Prometheus的架構設計允許它直接從監(jiān)控目標拉取監(jiān)控指標,或者通過推送網(wǎng)關間接獲取。它在本地存儲所有抓取到的樣本數(shù)據(jù),并可以執(zhí)行規(guī)則來聚合數(shù)據(jù)或生成告警。Prometheus適用于記錄純數(shù)字的時間序列數(shù)據(jù),適合機器監(jiān)控和高度動態(tài)的服務導向架構監(jiān)控,特別是在微服務架構中,其對多維數(shù)據(jù)收集和查詢的支持是一個顯著優(yōu)勢。

安裝和配置步驟

  1. 下載并安裝Prometheus服務器及其組件
    • 訪問Prometheus的官方網(wǎng)站下載頁面:Prometheus Downloads
    • 選擇適合你操作系統(tǒng)的版本進行下載。V哥下載的是壓縮包格式(.tar``.gz)。

  1. 解壓下載的文件
    • 解壓壓縮包。比如我是在Linux上,可以使用以下命令:
      tar -xvzf prometheus-*.tar.gz

  1. 移動二進制文件到PATH中
    • 為了能夠從任何位置運行Prometheus,我們需要將Prometheus的二進制文件移動到你的系統(tǒng)PATH中。例如:
      sudo mv prometheus-*/prometheus /usr/local/bin/
      sudo mv prometheus-*/promtool /usr/local/bin/

  1. 配置Prometheus
    • Prometheus的配置文件通常命名為prometheus.yml,位于Prometheus二進制文件所在目錄的config子目錄中。
    • 編輯這個配置文件,指定數(shù)據(jù)存儲位置、抓取間隔以及要監(jiān)控的目標:
      
      global:
      scrape_interval: 15s

scrape_configs:

  • job_name: 'prometheus' static_configs:
    • targets: ['localhost:9090']
  • job_name: 'node' static_configs:
    • targets: ['localhost:9100']
      
      - 這個配置文件定義了兩個監(jiān)控任務:一個是監(jiān)控Prometheus自身的指標(通常用于測試),另一個是監(jiān)控節(jié)點指標。

  1. 啟動Prometheus服務器
    • 在Prometheus的安裝目錄中,運行以下命令來啟動Prometheus服務器:
      ./prometheus --config.file=/path/to/prometheus.yml
    • 你可以通過Web瀏覽器訪問 http://localhost:9090 來查看Prometheus的Web界面。

  1. 安裝和配置Exporters
    • Exporter是用于抓取特定服務或應用程序指標的代理。例如,node_exporter用于抓取系統(tǒng)級別的指標。
    • 根據(jù)需要下載并運行相應的Exporter。例如,對于node_exporter,你可以在Linux上使用以下命令啟動它:
      ./node_exporter --web.listen-address=":9100"
    • 確保在Prometheus配置文件中添加了Exporter的監(jiān)控目標。

  1. 安裝Alertmanager(可選)
    • Alertmanager是Prometheus的告警處理組件。
    • 從Prometheus的下載頁面下載Alertmanager,解壓并按照Prometheus的類似步驟啟動它。
    • 配置Alertmanager以接收Prometheus的告警并定義如何處理這些告警。

  1. 安裝Grafana(可選)
    • Grafana是一個開源的分析和監(jiān)控平臺,可以與Prometheus集成,用于可視化監(jiān)控數(shù)據(jù)。
    • 從Grafana的官方網(wǎng)站下載并安裝Grafana。
    • 在Grafana中添加Prometheus作為數(shù)據(jù)源,然后創(chuàng)建儀表板來展示監(jiān)控數(shù)據(jù)。

請注意,這些步驟可能會根據(jù)你的操作系統(tǒng)和Prometheus的版本有所不同。始終參考最新的官方文檔以獲取最準確的安裝指南。

配置Prometheus服務器

配置Prometheus服務器涉及編輯Prometheus的配置文件,通常是prometheus.yml。以下是配置Prometheus服務器的步驟,包括抓取間隔、告警配置、規(guī)則文件和數(shù)據(jù)源。

  1. 配置抓取間隔: 在prometheus.yml文件中,你可以設置全局的抓取間隔,這將應用于所有抓取任務,除非在特定任務中被覆蓋。例如:
    global:
     scrape_interval: 15s # 全局抓取間隔設置為15秒
     evaluation_interval: 15s # 規(guī)則評估間隔也設置為15秒

  1. 配置告警: 告警配置通常在Prometheus的配置文件中定義,但具體的告警規(guī)則是在單獨的規(guī)則文件中定義的。首先,你需要在prometheus.yml中指定告警管理器(Alertmanager)的配置:
    alerting:
     alertmanagers:
       - static_configs:
           - targets:
             - localhost:9093 # Alertmanager的監(jiān)聽地址和端口

    然后,創(chuàng)建告警規(guī)則文件(例如alert.rules),并將其引用在prometheus.yml中:

    rule_files:
     - "alert.rules"

  1. 定義告警規(guī)則: 在告警規(guī)則文件alert.rules中,你可以定義具體的告警條件。例如:
    groups:
     - name: example
       rules:
         - alert: HighRequestLatency
           expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
           for: 10m
           labels:
             severity: page
           annotations:
             summary: High request latency

  1. 配置規(guī)則文件: 除了告警規(guī)則,你還可以在規(guī)則文件中定義記錄規(guī)則(recording rules),這些規(guī)則用于在Prometheus中創(chuàng)建新的時序數(shù)據(jù),例如計算平均值或百分位數(shù)。這些規(guī)則也會在prometheus.yml中被引用。

  1. 配置數(shù)據(jù)源: 在prometheus.yml中,你需要定義數(shù)據(jù)源,即Prometheus需要抓取的目標。這些目標可以是Exporter、服務發(fā)現(xiàn)機制或其他Prometheus服務器。以下是一些示例配置:
    scrape_configs:
     - job_name: 'prometheus'
       static_configs:
         - targets: ['localhost:9090']
     - job_name: 'node'
       static_configs:
         - targets: ['localhost:9100'] # 假設node_exporter運行在9100端口
     - job_name: 'app'
       dns_sd_configs:
         - names: ['app.service.consul']
           port: 80

  1. 高級配置: 你還可以配置其他高級選項,如重寫規(guī)則(relabel_configs)、TLS配置、代理配置等。

  1. 啟動Prometheus: 配置完成后,重新啟動Prometheus服務器以應用新的配置。如果你使用的是二進制方式安裝的Prometheus,可以使用以下命令啟動:
    ./prometheus --config.file=prometheus.yml --web.enable-admin-api --web.enable-lifecycle

    --web.enable-admin-api--web.enable-lifecycle是可選的,它們允許你通過HTTP API來管理Prometheus(如停止接收數(shù)據(jù)、獲取當前狀態(tài)等)。

  1. 驗證配置: 啟動Prometheus后,通過訪問Prometheus的Web界面(通常是 http://localhost:9090)來驗證配置是否正確。你可以在“Status” > “Targets”頁面查看抓取目標的狀態(tài),確保所有目標都是健康的。

請記得,配置文件中的路徑和端口需要根據(jù)你的實際部署環(huán)境進行調整。此外,Prometheus的配置非常靈活,你可以根據(jù)需要進行詳細配置。始終參考最新的Prometheus官方文檔以獲取最準確的配置指導。

啟動Prometheus服務器

要啟動Prometheus服務器并確保它能夠從配置的數(shù)據(jù)源抓取數(shù)據(jù),你需要按照以下步驟操作:

  1. 準備配置文件: 確保你已經(jīng)根據(jù)之前的指導創(chuàng)建并配置了prometheus.yml文件,以及其他可能的配置文件,如告警規(guī)則文件alert.rules

  1. 啟動Prometheus
    • 打開終端或命令行界面。
    • 導航到包含Prometheus二進制文件的目錄。
    • 運行以下命令來啟動Prometheus服務器:
      ./prometheus --config.file=/path/to/prometheus.yml
    • 確保將/path/to/prometheus.yml替換為你的配置文件的實際路徑。

  1. 檢查Prometheus狀態(tài)
    • 訪問Prometheus的Web UI,通常是 http://localhost:9090
    • 轉到“Status” > “Targets”頁面,查看Prometheus是否成功從配置的數(shù)據(jù)源抓取數(shù)據(jù)。健康的抓取目標會顯示綠色的狀態(tài)指示器。

  1. 檢查日志輸出
    • 查看Prometheus的日志輸出,以確保沒有錯誤信息。你可以在命令行界面查看啟動Prometheus時的直接輸出,或者查看Prometheus的日志文件(如果你將日志輸出重定向到了文件)。

  1. 驗證告警和規(guī)則
    • 如果你配置了告警和規(guī)則文件,轉到“Alerts”頁面查看是否有任何活躍的告警。
    • 轉到“Rules”頁面查看所有規(guī)則的狀態(tài),確保它們都處于“Firing”狀態(tài)。

  1. 檢查數(shù)據(jù)抓取
    • 在Prometheus的Web UI中,你可以嘗試執(zhí)行一些基本的查詢,如up,來檢查Prometheus是否能夠從目標獲取數(shù)據(jù)。
    • 你也可以使用Prometheus的表達式瀏覽器來測試更復雜的查詢。

  1. 確保長期運行
    • 為了確保Prometheus長期運行,你可能需要將其配置為后臺服務或使用類似systemd的系統(tǒng)服務管理器來管理Prometheus進程。

  1. 配置自動重啟
    • 為了確保Prometheus在崩潰或重啟后自動啟動,你應該設置一個監(jiān)控腳本或使用系統(tǒng)服務管理器(如systemd、supervisord等)。

  1. 安全考慮
    • 如果Prometheus服務器可以從互聯(lián)網(wǎng)訪問,確保配置適當?shù)陌踩胧缡褂肏TTPS、訪問控制和認證。

  1. 監(jiān)控Prometheus本身
    • 監(jiān)控Prometheus服務器本身的健康狀況也很重要。你可以使用--web.enable-admin-api標志來啟用管理API,這允許你檢查Prometheus的狀態(tài)和性能指標。

如果你遇到任何問題,比如Prometheus無法從目標抓取數(shù)據(jù),檢查以下幾點:

  • 確保Prometheus配置文件中的抓取目標地址和端口是正確的。
  • 確保目標服務已經(jīng)啟動并且正在監(jiān)聽Prometheus配置的端口。
  • 檢查防火墻設置,確保Prometheus服務器可以訪問目標端口。
  • 查看Prometheus的日志輸出,尋找可能的錯誤信息或警告。

使用Grafana連接到Prometheus服務器

Grafana是一個流行的開源分析和監(jiān)控解決方案,它支持連接到多種數(shù)據(jù)源,包括Prometheus。以下是使用Grafana連接到Prometheus并展示監(jiān)控數(shù)據(jù)的步驟:

  1. 安裝Grafana
    • 訪問Grafana的官方網(wǎng)站下載頁面,選擇適合你操作系統(tǒng)的版本進行下載并安裝。
    • 或者,如果你使用的是包管理器(如APT for Ubuntu或Homebrew for macOS),可以直接通過包管理器安裝Grafana。

  1. 啟動Grafana
    • 根據(jù)你的安裝方式,啟動Grafana。如果你使用的是Linux,可能需要使用命令:
      sudo service grafana-server start

      sudo systemctl start grafana-server

  1. 訪問Grafana
    • 在Web瀏覽器中訪問Grafana的Web界面,默認地址通常是 http://localhost:3000。

  1. 配置數(shù)據(jù)源
    • 在Grafana的側邊欄菜單中,點擊“Configuration”(齒輪圖標)> “Data Sources” > “Add data source”。
    • 選擇“Prometheus”作為數(shù)據(jù)源類型。
    • 在配置頁面,輸入你的Prometheus服務器的URL,例如 http://localhost:9090。
    • 填寫其他必要的配置信息,如訪問憑據(jù)(如果Prometheus設置了認證)。
    • 點擊“Save & Test”來測試連接是否成功。

  1. 創(chuàng)建儀表盤
    • 在Grafana側邊欄菜單中,點擊“Create” > “Dashboard”。
    • 你可以開始創(chuàng)建新的儀表盤或導入現(xiàn)有的JSON格式的儀表盤。

  1. 添加面板
    • 在儀表盤編輯模式下,點擊“Add query”或“Add panel”來添加一個新的面板。
    • 選擇你的Prometheus數(shù)據(jù)源。
    • 使用PromQL(Prometheus Query Language)編寫查詢來獲取你想要展示的數(shù)據(jù)。例如,你可以查詢up來檢查所有監(jiān)控目標的狀態(tài),或者查詢rate(http_requests_total[5m])來獲取過去5分鐘內(nèi)HTTP請求的速率。

  1. 設置面板選項
    • 根據(jù)需要設置面板的類型(如圖表、表格、折線圖等)。
    • 調整面板的樣式和布局,包括顏色、大小、圖例等。

  1. 保存并查看面板
    • 完成面板設置后,點擊“Save”保存你的面板。
    • 退出編輯模式,查看面板展示的數(shù)據(jù)。

Grafana也支持基于Prometheus數(shù)據(jù)源的告警。你可以在面板設置中定義告警規(guī)則,并配置通知通道(如電子郵件、Slack等)。Grafana提供了豐富的功能,包括變量、模板、注釋等?;〞r間探索這些功能,以充分利用Grafana的潛力。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號