如何在 Ubuntu 18.04 上安裝 Prometheus

Prometheus 是一個非常強大的開源監控和警報系統,適用於動態環境,例如 Cloud 空間。 它是一個由社區維護的獨立項目,許多公司和組織為其源代碼做出了貢獻。 Prometheus 的大多數組件都是用 Go 編寫的,這使得它們易於構建和部署為靜態二進製文件。 您很少需要從代碼編譯應用程序。

Prometheus 能夠記錄任何純數字時間序列,既適用於 Linux 系統等以機器為中心的監控,也適用於高度動態的面向服務架構的監控。 可視化工具,如 格拉法納 從 Grafana 2.5.0 開始,支持使用 Prometheus 的 Grafana 數據源查詢 Prometheus。

在本指南中,我們將介紹如何在 Ubuntu 18.04 服務器上安裝 Prometheus。

普羅米修斯的組件

Prometheus 生態系統由各種組件組成,這些組件共同提供完整的監控和警報系統。 大多數組件都是可選的,您只需根據需要安裝它們。 主要組成部分是:

  • Prometheus 服務器 – 從客戶端系統和應用程序中抓取和存儲時間序列數據。
  • 導出器 – 用於從第三方系統導出現有指標作為 Prometheus 指標。
  • 一個 警報管理器 用於處理警報
  • 客戶端庫 用於檢測應用程序代碼

普羅米修斯的特點

普羅米修斯的主要特點是:

  • 多維的 數據模型 時間序列數據由指標名稱和鍵/值對標識
  • 它有一個很 靈活的查詢語言 利用其多維模型
  • 單服務器節點是自治的,不依賴於分佈式存儲。
  • Prometheus 時間序列收集使用 HTTP 協議上的拉模型
  • 它具有自動發現目標和配置文件的功能。
  • 推動時間序列 通過中間網關支持
  • Prometheus 支持多種圖形和儀表板模式

在 Ubuntu 18.04 上安裝 Prometheus

由於 Prometheus 是用 Go 編寫的,因此它的包以二進製文件的形式分發。 在撰寫本文時,最新版本的 Prometheus 是 v2.2.1. 您可以從 官方下載頁面. 提供的軟件包適用於 macOS、Linux 和 Windows 操作系統,因此請確保下載正確的軟件包。

$ sudo su -
$ export RELEASE="2.2.1"
$ wget https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz

下載存檔後,使用 tar 解壓縮。

$ tar xvf prometheus-${RELEASE}.linux-amd64.tar.gz
prometheus-2.2.1.linux-amd64/
prometheus-2.2.1.linux-amd64/consoles/
prometheus-2.2.1.linux-amd64/consoles/index.html.example
prometheus-2.2.1.linux-amd64/consoles/node-cpu.html
prometheus-2.2.1.linux-amd64/consoles/node-disk.html
prometheus-2.2.1.linux-amd64/consoles/node-overview.html
prometheus-2.2.1.linux-amd64/consoles/node.html
prometheus-2.2.1.linux-amd64/consoles/prometheus-overview.html
prometheus-2.2.1.linux-amd64/consoles/prometheus.html
prometheus-2.2.1.linux-amd64/console_libraries/
prometheus-2.2.1.linux-amd64/console_libraries/menu.lib
prometheus-2.2.1.linux-amd64/console_libraries/prom.lib
prometheus-2.2.1.linux-amd64/prometheus.yml
prometheus-2.2.1.linux-amd64/LICENSE
prometheus-2.2.1.linux-amd64/NOTICE
prometheus-2.2.1.linux-amd64/prometheus
prometheus-2.2.1.linux-amd64/promtool

從文件提取更改到新創建的目錄。

# cd prometheus-${RELEASE}.linux-amd64/

創建 Prometheus 系統組

Prometheus 需要自己的用戶和組來運行。

# groupadd --system prometheus
# grep prometheus /etc/group
prometheus:x:999:

創建 Prometheus 系統用戶

現在我們有了 Prometheus 組,讓我們創建一個用戶並將創建的組分配給它。

# useradd -s /sbin/nologin -r -g prometheus prometheus
# id prometheus
uid=999(prometheus) gid=999(prometheus) groups=999(prometheus)

為 Prometheus 創建配置和數據目錄

Prometheus 需要一個目錄來存儲其數據和配置文件。 我們將為數據創建 /var/lib/prometheus,為配置文件創建 /etc/prometheus。

# mkdir -p /etc/prometheus/{rules,rules.d,files_sd}  /var/lib/prometheus

將 Prometheus 二進製文件複製到 $PATH 中的目錄

在 Linux 上放置第三方二進製文件的首選目錄是 /usr/local/bin/,因為它默認位於 $PATH 中,並且不會干擾系統二進製文件。

# cp prometheus promtool /usr/local/bin/
# ls /usr/local/bin/
prometheus promtool

將 console 和 console_libraries 複製到配置文件目錄

控制台文件和庫需要放在 /etc/prometheus/ 目錄下。

# cp -r consoles/ console_libraries/ /etc/prometheus/

創建 systemd 單元文件:

Ubuntu 18.04默認使用systemd init系統,我們需要創建一個Service unit文件來管理Prometheus服務。 我們將文件放在 /etc/systemd/system 目錄下。 文件名必須以 。服務

# cat /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus systemd service unit
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
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 
--web.listen-address=0.0.0.0:9090

SyslogIdentifier=prometheus
Restart=always

[Install]
WantedBy=multi-user.target

注意:

  • 我們將服務綁定到 0.0.0.0:9090. 這將可以從服務器上的所有網絡接口訪問。 通過為要使用的接口指定 IP 地址來限制它,127.0.0.1 僅用於本地訪問。
  • 指定的配置文件是/etc/prometheus/prometheus.yml。 我們將創建一個基本配置文件以供下一步使用。

創建 Prometheus 配置文件

這將放置在 /etc/prometheus/ 目錄中。

# cat  /etc/prometheus/prometheus.yml
# Global config
global: 
 scrape_interval: 15s # Set the scrape interval to every 15 seconds.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. 
 scrape_timeout: 15s # scrape_timeout is set to the global default (10s).

# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.
scrape_configs:
 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 - job_name: 'prometheus'

# metrics_path defaults to '/metrics'
 # scheme defaults to 'http'.

static_configs:
 - targets: ['localhost:9090']

更多配置選項請參考官方 Prometheus 配置指南.

更改 Prometheus 用戶和組的目錄權限

Prometheus 文件和數據的所有權應該是其用戶和組。

# chown -R prometheus:prometheus /etc/prometheus/  /var/lib/prometheus/
# chmod -R 775 /etc/prometheus/ /var/lib/prometheus/

啟動並啟用 Prometheus 服務

啟動並啟用 Prometheus 服務以在啟動時啟動。

# systemctl start prometheus
# systemctl enable prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /etc/systemd/system/prometheus.service.

檢查狀態:

# systemctl status prometheus

確認端口 9090 正在偵聽。

# netstat -tunlp | grep 9090
tcp6 0 0 :::9090 :::* LISTEN 2140/prometheus

# telnet 127.0.0.1 9090
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^]
If you have a firewall like ufw, Open port 9090 to be able to access it from a remote device.

# ufw allow 9090
Rule added
Rule added (v6)

要允許特定網絡,請使用:

# ufw allow from 192.168.10.0/24 to any port 9090
Rule added

# ufw status
Status: active

To Action From
-- ------ ----
9090 ALLOW Anywhere 
9090 ALLOW 192.168.10.0/24 
9090 (v6) ALLOW Anywhere (v6)

獲取Web界面,打開https://ip:9090

接下來您可能要查看的是用於指標收集和可視化的各種導出器的配置。 最好的起點是 出口商儀表 頁。