prometheus自定義監控指標——入門

grafana結合prometheus提供了大量的模板,雖然這些模板幾乎監控到了常見的監控指標,可是有些特殊的指標仍是沒能提供(也多是我沒找到指標名稱)。受zabbix的影響,天然而然想到了自定義監控項,promethues一樣也支持。nginx


1、簡介

  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能夠持續化推送全部的監控數據,即便監控已經下線,還會獲取舊的監控數據。需手動清理不須要的數據
  三、重啓後數據丟失服務器

2、啓動  

  一、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查詢指標是否生成

3、pushgateway發送數據的API格式

API格式:

  http://pustgatewayIP/metrices/job/job名/標籤名/標籤值(通常 標籤名 採用 instance)

例子:
  http://pustgatewayIP/metrics/job/  
    /sb/instance/si
    /testjob/abc/pushgateway1
    /testjob/yyy/pushgateway1
  
分別觸發上述三個API,打開pushgateway的web UI

4、發送的數據類型

   一、發送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
相關文章
相關標籤/搜索