pushgateway
客戶端使用push的方式上報監控數據到pushgateway,prometheus會按期從pushgateway拉取數據。使用它的緣由主要是:python
- Prometheus 採用 pull 模式,可能因爲不在一個子網或者防火牆緣由,致使Prometheus 沒法直接拉取各個 target數據。
- 在監控業務數據的時候,須要將不一樣數據彙總, 由 Prometheus 統一收集。
拓撲圖linux
pushgateway安裝
# wget https://github.com/prometheus/pushgateway/releases/download/v0.7.0/pushgateway-0.7.0.linux-amd64.tar.gz
# tar xzvf pushgateway-0.7.0.linux-amd64.tar.gz
# mv pushgateway-0.7.0.linux-amd64 /usr/local/pushgateway
運行
# ./pushgateway
# curl localhost:9091/metrics #訪問 127.0.0.1:9091/metrics能夠看到指標nginx
# HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 1.8299e-05 go_gc_duration_seconds{quantile="0.25"} 1.8299e-05 go_gc_duration_seconds{quantile="0.5"} 2.8353e-05 go_gc_duration_seconds{quantile="0.75"} 2.8353e-05
...
prometheus.yml添加targetgit
- job_name: 'push-metrics' static_configs: - targets: ['localhost:9091'] honor_labels: true # 由於prometheus配置pushgateway 的時候,也會指定job和instance,可是它只表示pushgateway實例,不能真正表達收集數據的含義。因此配置pushgateway須要添加honor_labels:true,避免收集數據自己的job和instance被覆蓋。
注意:爲了防止 pushgateway 重啓或意外掛掉,致使數據丟失,能夠經過 -persistence.file 和 -persistence.interval 參數將數據持久化下來。github
push數據到pushgateway
推送URL :pushgateway默認採用9091端口,路徑: /metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>}
dom
<JOBNAME>是job標籤的值,後面跟任意數量的標籤對,instance標籤能夠有也能夠沒有。curl
示例:ide
# echo "test_metric 2333" | curl --data-binary @- http://127.0.0.1:9091/metrics/job/test_job
推送以後能夠看到
# TYPE test_metric untyped
test_metric{instance="",job="test_job"} 2333url
推送一個更復雜的spa
# cat <<EOF | curl --data-binary @- http://127.0.0.1:9091/metrics/job/test_job/instance/test_instance # TYPE test_metric counter test_metric{label="val1"} 100 # TYPE another_metric gauge # HELP another_metric Just an example. another_metric 123.45 EOF
或者是先把指標數據寫入文件
# curl -XPOST --data-binary @data.txt http://127.0.0.1:9091/metrics/job/nginx/instance/172.27.0.3
http_request_total{code="200",domain="abc.cn"} 276683 http_request_total{code="400",domain="abc.cn"} 0 http_request_total{code="408",domain="abc.cn"} 7 http_request_total{code="401",domain="abc.cn"} 0 http_request_total{schema="http",domain="abc.cn"} 277725 http_request_total{schema="https",domain="abc.cn"} 0 http_request_time{code="total",domain="abc.cn"} 76335.809000 http_request_uniqip{domain="abc.cn"} 216944 http_request_maxip{clientip="172.27.0.12",domain="abc.cn"} 81
刪除指標:
# curl -X DELETE http://127.0.0.1:9091/metrics/job/test_job
#說明: 刪除標識的組中的全部指標{job="some_job"}
(請注意,這不包括{job="some_job",instance="some_instance"}
中的指標 ,即便這些指標具備相同的 job 標籤
# curl -X DELETE http://127.0.0.1:9091/metrics/job/test_job/instance/test_instance
也能夠在界面上刪除
也能夠經過使用官方給的python library,使用push 方式把數據推送到pushgateway。
# cat client.py #!/usr/bin/python3 from prometheus_client import CollectorRegistry, Gauge, push_to_gateway registry = CollectorRegistry() g = Gauge('ping', '檢測最大響應時間',['dst_ip','city'], registry=registry) #Guage(metric_name,HELP,labels_name,registry=registry) g.labels('192.168.1.10','shenzhen').set(42.2) #set設定值 g.labels('192.168.1.11','shenzhen').dec(2) #dec遞減2 g.labels('192.168.1.12','shenzhen').inc() #inc遞增,默認增1 push_to_gateway('localhost:9091', job='ping_status', registry=registry)
查看
須要注意:使用這種方法,若是使用相同的job名 ,後面插入的數據會覆蓋掉以前的。
例如,job 都叫 ping_status
#!/usr/bin/env python3 from prometheus_client import CollectorRegistry, Gauge, push_to_gateway registry = CollectorRegistry() g = Gauge('test_metrics', '描述信息',['label_name'], registry=registry) g.labels('label1').set(2) push_to_gateway('localhost:9091', job='ping_status', registry=registry)
執行腳本,查看結果,能夠看到以前的數據已經不存在了:
要刪除這條數據 ,能夠直接使用:curl -XDELETE 'http://localhost:9091/metrics/job/ping_status'