Prometheus
Prometheus和Grafana組合基本上是監控系統的標配。Prometheus做存儲后端,Grafana做分析及可視化界面。

普羅米修斯是開源的系統監控/報警工具庫,功能非常全,且擁有活躍的開發者和用戶社區。Prometheus通過HTTP定期主動拉取(Pull)的方式獲得指標(直接獲取或通過gateway推送),在本地存儲所有抓取的樣本,並對這些數據運行規則,從現有數據聚合和記錄新的時間序列,或生成警報。
Prometheus原生的可視化界面做得比較原始(主要用於調試),所以社區(官方推薦)使用Grafana來做數據展示。
Grafana專注於數據展示,有着豐富用成熟的展示方式和插件,數據源支持Elasticsearch, Prometheus, Graphite, InfluxDB等等。可以讓你通過界面點擊(無需寫前端代碼)快速搭建一個非常專業漂亮的展示界面。即便對於前端零基礎的開發者也非常友好!
安裝Prometheus
-
在官網下載需要的版本(
uname -rv查看linux內核版本及發行號)。比如x86的就下載linux-386系列。 -
Prometheus會主動通過HTTP請求來收集受監控目標的指標。 比如它也通過HTTP Rest API導出了自己的健康狀態數據,所以也可以用來監控自己。解壓下載源文件內包含一個基本的
prometheus.yml配置可以參照。配置非常簡單。global: # 全局配置 scrape_interval: 15s #主動拉取指標的間隔 evaluation_interval: 15s #計算間隔 scrape_configs: #監控的目標配置 - job_name: prometheus #名稱 static_configs: # 靜態配置 - targets: ['127.0.0.1:9090'] #監控目標暴露的HTTP API端口,是個列表- 把里面的localhost改成你對應機器的IP。
- 其它詳細的配置可見配置文檔。
-
前台啟動Prometheus,如果是在生產環境,需要后台啟動時,最好自行配置Systemd。
# Start Prometheus. # By default, Prometheus stores its database in ./data (flag --storage.tsdb.path). ./prometheus --config.file=prometheus.yml -
用瀏覽器打開http://IP:9090/metrics查詢所有指標列表。
-
用瀏覽器打開http://IP:9090/graph,原生的簡易的展示界面(太簡陋了,基本沒人會用)。
PS:因為Promethues自己導出的指標和展示界面都是同一個9090端口。但實踐中metrics接口指向的是目標機器的指標列表,用於Promethues主動拉取。
豐富的Exporter可以下載使用,開箱即用。下面可以用NodeExporter來做個范例。
安裝NodeExporter
NodeExporter暴露很多和硬件/軟件相關的指標(metrics)。
- 直接下載對應的版本。
- 解壓NodeExporter。
-
$ tar xvfz node_exporter-* $ cd node_exporter-*
-
啟動NodeExporter。
$ ./node_exporter INFO[0000] Starting node_exporter (version=0.18.1, branch=HEAD, revision=3db77732e925c08f675d7404a8c46466b2ece83e) source="node_exporter.go:156" INFO[0000] Build context (go=go1.12.5, user=root@b50852a1acba, date=20190604-16:41:43) source="node_exporter.go:157" INFO[0000] Enabled collectors: source="node_exporter.go:97" INFO[0000] - arp source="node_exporter.go:104" ... INFO[0000] Listening on :9100 source="node_exporter.go:170"可以使用
./node_exporter -h查看具體的啟動參數。從上面可以看它使用的端口是9100,所有的指標列表都可以和上面示例中的prometheus的接口一樣:$ curl http://localhost:9100/metrics # HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 2.8138e-05 go_gc_duration_seconds{quantile="0.25"} 4.1588e-05 go_gc_duration_seconds{quantile="0.5"} 0.000102923 go_gc_duration_seconds{quantile="0.75"} 0.000162106 go_gc_duration_seconds{quantile="1"} 0.000495923 go_gc_duration_seconds_sum 0.060153937 go_gc_duration_seconds_count 537 # HELP go_goroutines Number of goroutines that currently exist. ...可以看到所有關於node_exporter的指標列表。接下來就是把讓prometheus來取這些指標。
-
配置prometheus拉node exporter的指標。即把targets增加9100端口。
scrape_configs: - job_name: 'node' static_configs: - targets: ['127.0.0.1:9100'] -
重啟prometheus。
./prometheus --config.file=./prometheus.yml再次查看瀏覽器打開graph查看:http://127.0.0.1:9090/graph。勾選
Enable query history后直接輸入以node就可以看到大量關於node為前綴的指標了。比如:node_filesystem_avail_bytes查看文件系統可用空間大小情況。

這個界面還是太原始了,但可以用來體驗一下PromQL。接下來演示一下接入grafana來展示這些數據。
安裝Grafana
按官方指引下載安裝:比如Centos安裝是
$ wget https://dl.grafana.com/oss/release/grafana-6.3.3-1.x86_64.rpm
$ sudo yum localinstall grafana-6.3.3-1.x86_64.rpm
配置grafana
你可以在/etc/grafana/grafana.ini中配置端口及其它的,具體所有的配置項在: https://grafana.com/docs/installation/configuration/,我們這里都保持默認值,端口默認為3000.用戶名/密碼默認為admin。
你可以在這里找到對應的啟動方式,比如在CentOS上就是
sudo service grafana-server start
啟動成功后,你可以使用瀏覽器打開http://IP:3000使用admin/admin登錄。
創建界面
Prometheus的數據源(data source)
- 點擊側邊欄中的Grafana圖標 -> DataSources -> Add New
- 選擇Prometheus類型.
- 設置Prometheus的對外URL(比如 http://IP:9090).
- 點擊Add添加

Prometheus圖表展示
- 點擊graph標題 --> Edits.
- 在Metrics標簽下選擇你上一步剛增加的Prometheus數據庫。
- 在Query字段中輸入Prometheus表達式,會自動補全。
- 自定義圖表橫坐標中指標的名稱: Legend format。

導入Dashboards
Grafana.com上有很多別人分享的優化的dashboards,我們可以直接從上面找到node exporter對應的dashboard來使用。下載對應的json文件,然后導入。
其它
在Grafana上如何為選擇合適的圖表來展示Prometheus對應的數據類型(單調遞增的Counter,可降可升的Gauge,用於柱狀圖展示的Histogram),提供滑動窗口求和的Summary。
