Prometheus : 入門

Prometheus 是一個開源的監控系統。支持靈活的查詢語言(PromQL),採用 http 協議的 pull 模式拉取數據等特色使 Prometheus 即簡單易懂又功能強大。node

Prometheus 的主要特色

  • 多維度數據模型linux

  • 靈活的查詢語言ubuntu

  • 不依賴分佈式存儲,單個服務器節點是自主的vim

  • 經過 pull 方式採集時序數據瀏覽器

  • 能夠經過中間網關進行時序列數據推送服務器

  • 經過服務發現或者靜態配置來發現目標服務對象架構

  • 支持多種界面展現方案,好比 grafana 等分佈式

Prometheus 由 server, client, push gateway, exporter, alertmanager 等核心組件構成。Prometheus server 主要用於抓取和存儲數據。Client libraries 能夠用來鏈接 server 並進行查詢等操做。Push gateway  用於批量,短時間的監控數據的彙總節點,主要用於業務數據彙報等。不一樣的 exporter 用於不一樣場景下的數據收集,如收集主機信息的 node_exporter,收集 MongoDB 信息的 MongoDB exporter 等等。下圖是 Prometheus 官方提供的架構圖:工具

從這個架構圖,咱們能夠看出它的運行邏輯大概是這樣的:
Prometheus server 按期從數據源拉取數據,而後將數據持久化到磁盤。Prometheus 能夠配置 rules,而後定時查詢數據,當條件觸發的時候,會將 alert 推送到配置的 Alertmanager。Alertmanager 收到警告的時候,能夠根據配置,聚合,去重,降噪,最後發送警告。同時還能夠使用 API, Prometheus Console 或者 Grafana 查詢和聚合數據。spa

本文將介紹在 ubuntu 16.04 系統中安裝 Prometheus Server,並配置它從一臺主機上拉取監控信息,而後經過 Prometheus Server 提供的簡易 UI 查詢數據。

在 Ubuntu 16.04 中安裝 Prometheus Server

請從 Prometheus 官方下載 linux 版的二進制壓縮包。注意在下載前要選擇操做系統爲 linux。
執行下面的命令把 prometheus server 安裝到 /usr/local/share/prometheus 目錄:

$ tar -xf prometheus-1.7.2.linux-amd64.tar.gz
$ sudo mv prometheus-1.7.2.linux-amd64 /usr/local/share/prometheus

理論上來講這樣就算是安裝完成了,可是不管如何這都太簡陋了。由於每次啓動 Prometheus server 都須要手動執行命令:

$ /usr/local/share/prometheus/prometheus -config.file=/usr/local/share/prometheus/prometheus.yml

這實在是太不方便了!應該把它配置成服務,用 systemd 來管理。

先建立一個名爲 prometheus 的用戶:

$ sudo adduser prometheus

把目錄 /usr/local/share/prometheus/ 的全部者設置爲 prometheus 用戶:

$ sudo chown -R prometheus:prometheus /usr/local/share/prometheus/

而後建立文件 /etc/systemd/system/prometheus.service,內容以下:

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
User=prometheus
Restart=on-failure
WorkingDirectory=/usr/local/share/prometheus/
ExecStart=/usr/local/share/prometheus/prometheus \
          -config.file=/usr/local/share/prometheus/prometheus.yml

[Install]
WantedBy=multi-user.target

好了,如今能夠經過 systemd 來控制 Prometheus 服務了,先啓動服務:

$ sudo systemctl daemon-reload
$ sudo systemctl start prometheus

再把服務配置爲開機時啓動:

$ sudo systemctl enable prometheus

檢查一下服務的狀態:

$ sudo systemctl status prometheus

到此爲止 Prometheus Server 已經開始運行了。接下來咱們就能夠收集數據了。

使用 Node Exporter 收集主機信息

數據收集的任務由不一樣的 exporter 來完成,若是要收集 linux 主機的信息,能夠使用 node exporter。而後由 Prometheus Server 從 node exporter 上拉取信息。接下來咱們介紹如何安裝並配置 node exporter。
請從 Prometheus 官方下載 node exporter 的二進制壓縮包。執行下面的命令把 node exporter 安裝到 /usr/local/share/ 目錄:

$ tar -xf node_exporter-0.14.0.linux-amd64.tar.gz
$ sudo cp node_exporter-0.14.0.linux-amd64/node_exporter /usr/local/sbin/

一樣的咱們把 node exporter 也配置成經過 systemd 管理。建立文件 /etc/systemd/system/node-exporter.service,內容以下:

[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
ExecStart=/usr/local/sbin/node_exporter
User=nobody

[Install]
WantedBy=multi-user.target

執行下面的命令設置爲開機啓動並啓動服務:

$ sudo systemctl daemon-reload
$ sudo systemctl enable node-exporter
$ sudo systemctl start node-exporter

node exporter 默認監聽 9100 端口,讓咱們檢查一下端口的監聽狀況:

$ ss -tunl

Node exporter 已經能夠收集主機上的信息了,接下來咱們還須要配置 Prometheus Server 從 node exporter 那裏拉取數據。

配置 Prometheus 從 Node Exproter 拉取數據

Prometheus Server 能夠從不一樣的 exporter 上拉取數據,對於上面的 node exporter 咱們能夠利用 Prometheus 的 static_configs 來拉取 node exporter 的數據。編輯 Prometheus server 的配置文件:

$ sudo vim /usr/local/share/prometheus/prometheus.yml

在 scrape_configs 中添加一個 名稱爲 node 的 static_configs:

- job_name: "node"
    static_configs:
      - targets: ["127.0.0.1:9100"]

注意,要把上面的 IP 地址替換爲運行 node exporter 的主機的 IP。

保存文件而後重啓 prometheus 服務!重啓後 prometheus 服務會每隔 15s 從 node exporter 上拉取一次數據。

查詢數據

Prometheus Server 提供了簡易的 WebUI 能夠進數據查詢並展現,它默認監聽的端口爲 9090。接下來咱們進行一次簡單的查詢來驗證本文安裝配置的系統。
在瀏覽器中訪問 Prometheus Server 的 9090 端口:

在下拉菜單中選擇 "node_memory_Buffers",而後點擊 "Execute" 按鈕:

查詢出來的結果略微有些粗獷,連單位都沒帶。請選擇 "Graph" 標籤頁:

經過圖表查看查詢結果就好多了!

總結

Prometheus 是當下比較流行的開源監控工具,這裏只是簡單的介紹了安裝過程及一個最基本的用例。可是不難看出 Prometheus 雖然支持靈活的查詢語言,可是自身只支持簡單的展現能力。若是要友好的展現 Prometheus 的查詢結果,還須要使用更專業的展現工具 Grafana。

相關文章
相關標籤/搜索