Prometheus 是一個開源的監控系統。支持靈活的查詢語言(PromQL),採用 http 協議的 pull 模式拉取數據等特色使 Prometheus 即簡單易懂又功能強大。node
多維度數據模型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 查詢數據。
請從 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 已經開始運行了。接下來咱們就能夠收集數據了。
數據收集的任務由不一樣的 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 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。