grafana結合prometheus提供了大量的模板,雖然這些模板幾乎監控到了常見的監控指標,可是有些特殊的指標仍是沒能提供(也多是我沒找到指標名稱)。受zabbix的影響,天然而然想到了自定義監控項,promethues一樣也支持。nginx
Pushgateway是prometheus的一個重要組件,利用該組件能夠實現自動以監控指標,從字面意思來看,該部件不是將數據push到prometheus,而是做爲一箇中間組件收集外部push來的數據指標,prometheus會定時從pushgateway上pull數據。web
pushgateway並非將Prometheus的pull改爲了push,它只是容許用戶向他推送指標信息,並記錄。而Prometheus每次從 pushgateway拉取的數據並非期間用戶推送上來的全部數據,而是client端最後一次push上來的數據。所以需設置client端向pushgateway端push數據的時間小於等於prometheus去pull數據的時間,這樣一來能夠保證prometheus的數據是最新的。docker
【注意】若是client一直沒有推送新的指標到pushgateway,那麼Prometheus獲取到的數據是client最後一次push的數據,直到指標消失(默認5分鐘)。
Prometheus自己是不會存儲指標的,可是爲了防止pushgateway意外重啓、工做異常等狀況的發送,在pushgateway處容許指標暫存,參數--persistence.interval=5m,默認保存5分鐘,5分鐘後,本地存儲的指標會刪除。ubuntu
使用pushgateway的理由:
一、prometheus默認採用pull模式,因爲不在一個網絡或者防火牆的問題,致使prometheus 沒法拉取各個節點的數據。
二、監控業務數據時,須要將不一樣數據彙總,而後由prometheus統一收集bash
pushgateway的缺陷:
一、多個節點的數據彙總到pushgateway,當它宕機後影響很大
二、pushgateway能夠持續化推送全部的監控數據,即便監控已經下線,還會獲取舊的監控數據。需手動清理不須要的數據
三、重啓後數據丟失服務器
一、docker 啓動pushgateway
首先須要登陸dockerhub
docker login 輸入用戶名密碼便可網絡
docker pull prom/pushgateway
docker run -d --name pushgateway -p 9091:9091 --restart=always prom/pushgateway
二、訪問9091端口(http://pushgatewayIP:9091) curl
證實pushgateway部署成功測試
三、在prometheus中添加pushgateway節點url
打開prometheus的配置文件
- job_name: 'pushgateway' static_configs: - targets: ['pushgatewayIP:9091'] honor_labels: true #做用:若是沒有設置instance標籤,Prometheus服務器也會附加標籤,不然instance標籤值會爲空
重啓prometheus後,登錄web UI,查看prometheus的targets
四、測試
向pushgateway發送數據
echo "test 123" | curl --data-binary @- http://pushgatewayIP:9091/metrics/job/test
上述測試的目的是,在被監控的機器上,想pushgateway發送了一條數據,內容是「test 123」,指標名稱是「test」,指標值是「123」;
http://pushgatewayIP:9091/metrics/job/test,這次也聲名了,在pushgateway處創建一個job爲test的指標。
推送的API路徑
全部的推送都是經過HTTP完成的,API路徑以下:
/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>}
JOBNAME:job標籤的值
/ 是轉義符
登錄prometheus webUI查詢指標是否生成
API格式:
http://pustgatewayIP/metrices/job/job名/標籤名/標籤值(通常 標籤名 採用 instance)
例子:
http://pustgatewayIP/metrics/job/
/sb/instance/si
/testjob/abc/pushgateway1
/testjob/yyy/pushgateway1
分別觸發上述三個API,打開pushgateway的web UI
一、發送counter類型
能夠一次發送單個,也能夠發送多個數據
cat <<EOF | curl --data-binary @- http://pushgatewayIP:9091/metrics/job/docker_runtime/instance/xa-lsr-billubuntu
# TYPE docker_runtime counter
docker_runtime{name="cadvisor"} 33
docker_runtime{name="nginx"} 331
docker_runtime{name="abc"} 332
EOF
二、發送gauage類型
能夠一次發送單個,也能夠發送多個數據
cat <<EOF | curl --data-binary @- http://pushgatewayIP:9091/metrics/job/docker_runtime/instance/xa-lsr-billubuntu
# TYPE docker_runtime gauge
# HELP docker_runtime time sec
docker_runtime{name="nginx"} 22
docker_runtime{name="cadvisor"} 22
docker_runtime{name="bbc"} 22
EOF
三、curl的另外一種發送形式
--data-binary <data> 與-d, --data相似,若是以@開頭,則後面必須跟着文件名,而且文件中的換行符,回車符會保留,也不會作
將要發送的數據寫入文件「a」,做用是將文件中的數據發送到指定地方
curl --data-binary "@a" http://pushgatewayIP:9091/metrics/job/docker_runtime/instance/xa-lsr-billubuntu