簡介
prometheus 是一個開源的系統監控和告警的工具包,其采用pull方式采集時間序列,通過http協議傳輸。
架構
每個應用都通過javaagent向外提供一個http服務暴露出自己的JMX信息。當應用啟動的時候就會向consul注冊服務,注冊成功后,prometheus就能把這個應用加入監控對象列表,進行數據收集並跟蹤服務的狀態。
部署
prometheus
官網下載prometheus-1.2.1.linux-amd64.tar.gz, 解壓到/services/apps/
目錄下,修改配置文件 prometheus.yml,在 scrape_config節點下增加以下內容:
- job_name: 'consul-node' consul_sd_configs: - server: 'localhost:8500' services: ['scorer','file-proxy','....']
- 1
- 2
- 3
- 4
services如果不配置默認會顯示出所有的服務,包含了consul agent服務。
運行,默認端口9090
./prometheus -config.file=prometheus.yml &
- 1
prometheus jmx exporter
jmx exporter是prometheus和JMX的橋梁。
在我們的工程里面,它是以Java Agent的方式運行,它的功能是收集本地的JVM信息,並通過HTTP服務暴露出來。引用的方式為:
1. 在pom.xml中增加依賴
<dependency> <groupId>io.prometheus</groupId> <artifactId>jmx_prometheus_javaagent</artifactId> <version>0.7</version> </dependency>
- 1
- 2
- 3
- 4
- 5
該工程已經把consul的服務注冊功能整合進去。沒有注銷服務功能。
2. 增加啟動參數
-javaagent:${WORK_DIR}/lib/jmx_prometheus_javaagent-0.7.jar=scorer:1234:${WORK_DIR}/bin/scorer.yaml
- 1
javaagent參數解釋如下:
-javagent:path/agent.jar=serviceName:servicePort:path/conf.yaml
- 1
service 指的是http service,如指定servicePort為1234,在應用啟動之后,可以在http://host:1234/metrics
獲取到metrics信息。在conf.yaml里配置JMX的收集策略,完整的yaml配置。
consul agent
prometheus可以靜態的配置監控對象,也可以采用動態的服務發現機制。為了部署更方便,我們采用的是現在更為流行的服務發現解決方案consul。其只包含了一個二進制的命令文件,把它拷貝到PATH( echo $PATH 可以查看
)就可以運行。
運行命令為:
consul agent -server -data-dir data &
- 1
解釋如下:
-
consul agent 啟動一個consul agent進程。 該進程負責維護集群成員信息、注冊服務、運行檢查、查詢響應等等。而且,consul集群的每一個節點上都必須有agent進程運行。
-
-server **agent有兩種模式:server與client。**server模式包含了一致性的工作:保證一致性和可用性(在部分失敗的情況下),響應RPC,同步數據到其他節點代理。client 模式用於與server進行通信,轉發RPC到服務的代理agent,它僅保存自身的少量一些狀態,是非常輕量化的東西。本身是相對無狀態的。
-
-data-dir 指定一個文件夾用於存儲該agent的狀態,在以server模式運行時,尤其重要。
一些其他的可選參數
- -node 指定該節點的名稱,默認為主機名
- -http-port 指定端口接收http請求,用於默認端口8500被占用的情況。
- -config-dir 指定一個或多個文件夾用於agent啟動時加載配置文件,加載順序由文件名的字母順序決定。
consul 運行起來后,server會通過8500端口與prometheus通信。
使用
consul 啟動
consul agent -server –data-dir=/services/data/consul/ –join 10.18.1.12&
注銷服務
curl http://localhost:8500/v1/agent/service/deregister/172.17.42.1
查詢該agent上面注冊的服務
curl http://localhost:8500/v1/agent/services?pretty
查詢集群上面所有的服務
curl http://localhost:8500/v1/catalog/services?pretty
查詢
參見prometheus官網提供的查詢表達式,簡而言之,標簽過濾用{},時間范圍選擇用[],如下例。
http_request_total{job="prometheus"}[5m]
- 1
可視化
prometheus官方的dashboard不怎么給力,目前將grafana集成了進去。grafana可以自定義數據源,並且保存多個dashboard,針對不同的系統可以使用不同的dashboard來進行監控。