如何使用 Prometheus 輕鬆實現集群監控?

1、Prometheus 對比 Zabbix

和 Zabbix 類似,Prometheus 也是一個近年比較火的開源監控框架,和 Zabbix不同之處在於 Prometheus 相對更靈活點,模塊間比較解耦,比如告警模塊、代理模塊等等都可以選擇性配置。服務端和客戶端都是開箱即用,不需要進行安裝。Zabbix則是一套安裝把所有東西都弄好,很龐大也很繁雜。

Zabbix 的客戶端 agent 可以比較方便的通過腳本來讀取機器內數據庫、日誌等文件來做上報。而 Prometheus 的上報客戶端則分為不同語言的SDK和不同用途的 exporter 兩種,比如如果你要監控機器狀態、mysql性能等,有大量已經成熟的 exporter 來直接開箱使用,通過http通信來對服務端提供信息上報(server去pull信息);

而如果你想要監控自己的業務狀態,那麼針對各種語言都有官方或其他人寫好的 sdk 供你使用,都比較方便,不需要先把數據存入數據庫或日誌再供 zabbix-agent 採集。

Zabbix 的客戶端更多是隻做上報的事情,push 模式。而 Prometheus 則是客戶端本地也會存儲監控數據,服務端定時來拉取想要的數據。

界面來說 zabbix 比較陳舊,而 prometheus 比較新且非常簡潔,簡潔到只能算一個測試和配置平臺。要想獲得良好的監控體驗,搭配 Grafana 還是二者的必走之路。

2、安裝 Prometheus

Prometheus 有很多種安裝方式,可以在官網看到,這裡只介紹下載安裝包解壓的方式,因為 Prometheus 是“開箱即用”的,也就是說解壓安裝包後就可以直接使用了,不需要再執行安裝程序,很方便。

可以去 Prometheus 的官網下載頁面獲取最新版本的信息,比如現在的最新版本是2.7.2,那就下載相應系統的安裝包,然後解壓

<code>$ wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
$ tar xvfz prometheus-2.7.2.linux-amd64.tar.gz/<code>

解壓後當前目錄就會出現一個相應的文件夾,進入該文件夾,然後就可以直接運行Prometheus server了!

<code>$ cd prometheus-2.7.2.linux-amd64
// 查看版本
$ ./prometheus --version
// 運行server
$ ./prometheus --config.file=prometheus.yml/<code>

命令中的 prometheus.yml 文件其實就是配置文件,也在當前目錄下,在其中可以配置一些東西。

3、配置 Prometheus

上文說了,prometheus.yml 是配置文件,打開可以看到不多的幾十行文字,類似下面:

<code>$ cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# 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=` to any timeseries scraped from this config.
- job_name: 'prometheus'

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

static_configs:
- targets: ['localhost:9090']
/<code>

其大致分為四部分:

  • global:全局配置,其中 scrape_interval 表示抓取一次數據的間隔時間,evaluation_interval 表示進行告警規則檢測的間隔時間;
  • alerting:告警管理器(Alertmanager)的配置,目前還沒有安裝Alertmanager;
  • rule_files:告警規則有哪些;
  • scrape_configs:抓取監控信息的目標。一個 job_name 就是一個目標,其 targets 就是採集信息的 IP 和端口。這裡默認監控了 Prometheus 自己,可以通過修改這裡來修改 Prometheus 的監控端口。Prometheus 的每個 exporter 都會是一個目標,它們可以上報不同的監控信息,比如機器狀態,或者 mysql 性能等等,不同語言 sdk 也會是一個目標,它們會上報你自定義的業務監控信息。

4、Prometheus 界面

運行後,在瀏覽器訪問[機器IP:端口]就可以查看 Prometheus 的界面了,這裡的機器IP是你運行 Prometheus 的機器,端口是上面配置文件中配置的監控自己的端口。打開後界面如下:


如何使用 Prometheus 輕鬆實現集群監控?

如果訪問不了,看看是不是端口沒有打開或者允許外網訪問。

界面非常簡單(所以我們還需要Grafana),上面標籤欄中,Alerts是告警管理器,暫時還沒安裝。Graph是查看監控項的圖表,也是訪問後的默認頁面,Status中可以查看一些配置、監控目標、告警規則等。

在 Graph 頁面,由於我們默認已經監控了 Prometheus 自己,所以已經可以查看一些監控圖表,比如在輸入框輸入“promhttp_metric_handler_requests_total”,執行Execute,下面的小標籤中切換到Graph就能看到“/metrics”訪問次數的折線圖。

5、添加機器狀態監控

我們嘗試添加第一個監控exporter——監控當前機器自身的狀態,包括硬盤、CPU、流量等。因為Prometheus已經有了很多現成的常用exporter,所以我們直接用其中的node_exporter。

注意了,這裡名字雖然叫node_exporter,但跟nodejs沒有任何關係,在Prometheus看來,一臺機器或者說一個節點就是一個node,所以該exporter是在上報當前節點的狀態。

node_exporter本身也是一個http服務,可以供 prometheus server 調用(pull)來獲取監控的信息,安裝方法同樣是下載安裝包後解壓直接運行:

<code>// 下載最新版本,可以在github的release中對最新版本右鍵獲取下載鏈接
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
// 解壓
$ tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
// 進入解壓出的目錄
$ cd node_exporter-0.17.0.linux-amd64
// 運行監控採集服務
$ ./node_exporter/<code>

運行後可以看到在監聽9100端口。這樣就可以採集了,現在先訪問試試能不能有沒有成功運行:

這裡也可以看出其實每個exporter本身都是一個http服務,server端會定時來訪問獲取監控信息。

訪問成功的話,我們去prometheus的配置文件(prometheus.yml)中,加上這個target:

<code>scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'server'
static_configs:
- targets: ['localhost:9100']/<code>

可以看到,就是在 scrape_configs 模塊中加一個job,命好名,配置好監聽的IP和端口即可,然後重新運行 prometheus,在標籤欄的 Status → Targets 中可以看到多了一個:

如何使用 Prometheus 輕鬆實現集群監控?

如果新加的 target 的 status 是“UP”的話,就說明監聽成功了。

此時去Graph中,輸入框輸入node可以發現有很多 node 開頭的監控項了,都是和機器狀態有關的,可以自己執行看一看。

安裝 Grafana

因為 Prometheus 的界面看起來非常簡單,所以我們還需要 Grafana 這個非常強大也是最常用的監控展示框架。

我們還是用下載二進制包的方式來進行安裝,這種方式不需要你當前的linux用戶擁有sudo權限,也不需要你知道 root 密碼。如果你有這些權限,那就使用 yum 等其他直接的安裝方式吧,安裝說明見 Grafana 的官方安裝頁面

我們直接下載並解壓:

<code>$wget [https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz](https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz)
$ tar -zxvf grafana-6.0.0.linux-amd64.tar.gz
這個頁面給出的是最新版本的安裝命令,右上角可以選擇切換其他版本的安裝命令。/<code>

解壓後會出現 grafana-6.0.0 目錄,進入該目錄,然後就可以運行 Grafana 了:

<code>$ cd grafana-6.0.0
// 啟動Grafana。$ ./bin/grafana-server web/<code>

通過log信息可以看到Grafana默認運行在3000端口,這個也可以通過配置文件進行修改:創建名為 custom.ini 的配置文件,添加到 conf 文件夾,複製 conf/defaults.ini 中定義的所有設置,然後修改自己想要修改的。

在 Grafana 展示監控信息

安裝並啟動Grafana後,瀏覽器輸入 IP:3000 來訪問Grafana,管理員賬號密碼默認是admin/admin。首次登陸會讓你修改管理員密碼,然後就可以登錄查看了。

在界面左邊是一豎排選項,選擇設置圖標中的Data Source,添加Prometheus的數據源,URL 就填上面你給 Prometheus Server 設置的ip+端口號就行了,如果沒改過且在本機運行的話,那就是 localhost:9090。

此時可以添加 dashboard,也就是監控面板了,在剛配好的 Prometheus Data Source的設置中有一個標籤就是 dashboard,我們導入 Prometheus 2.0 Stats 這個面板,就能看到我們Prometheus的一些基本監控情況了,這其實就是導入了一個別人寫好的面板配置,並且連接我們自己 Prometheus 的監控數據做展示。

還記得我們上面還運行了一個 node exporter 吧,現在我們展現一下這個監控信息,左邊豎排點擊加號圖標中的 Import,來導入其他別人寫好的面板。在Grafana的官方面板頁面其實可以看到很多別人配置好的面板,我們找到自己想要的面板,比如這個node exporter 的:

如何使用 Prometheus 輕鬆實現集群監控?

複製右邊那個面板ID,然後在 Import 界面輸入ID,Load 後配置好數據源為我們的Prometheus,就可以出現我們自己機器的狀態監控面板了,很炫酷吧。

這個面板需要安裝一個餅圖的插件(頁面上有說明),安裝 Grafana 插件的方法為:

<code>// 進入Grafana/bin目錄
./grafana-cli plugins install [插件名]
// 安裝成功後重啟Grafana/<code>

面板中的每個圖都是可以編輯的,也可以設置告警,Grafana 告警支持多種方式,我們最常用的就是郵件和 webhook 了,所以其實不太需要用 Prometheus 的告警。更多的探索就自行發現吧,我也寫過兩篇 Grafana 相關的文章:

作者:Cloudox_
鏈接:https://www.jianshu.com/p/8d2c020313f0


分享到:


相關文章: