prometheus+grafana部署参考之前文档:https://blog.51cto.com/jschu/3237358

 

pushgateway概述&部署

优势:

Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。
在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。


弊端:

1.将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。

2.Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。

3.Pushgateway 可以持久化保存所有push给它的所有监控数据,因此即使被监控服务器已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理。

 

使用docker安装pushgateway

docker pull prom/pushgateway
docker run -d --name=pushgateway -p 9091:9091 --restart=always prom/pushgateway

修改prometheus.yml文件,只配置一个pull拉取对象pushgateway,其他被监控服务器都push到pushgateway上。

... 
- job_name: 'pushgateway'
      static_configs:
        - targets: ['172.30.12.167:9091']
          labels:
            instance: pushgateway

prometheus+pushgateway+grafana(监控可视化)+自定义监控_pushgateway
使用API方式push数据到pushgateway上

默认url地址格式为:http://<ip>:9091/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>},其中<JOB_NAME>是必填项,后面可以添加任意数量的 标签对,一般会添加一个instance/<INSTANCE_NAME>实例名称标签来区分各个指标。

echo "test_metric 123456" | curl --data-binary @- http://172.30.12.167:9091/metrics/job/test_job

pushgateway UI页面

prometheus+pushgateway+grafana(监控可视化)+自定义监控_pushgateway_02

 cat <<EOF | curl --data-binary @- http://172.30.12.167:9091/metrics/job/test_job/instance/test_instance
# TYPE test_metrics counter
test_metrics{label="app1",name="demo"} 100.00
EOF

prometheus+pushgateway+grafana(监控可视化)+自定义监控_grafana_03

  • 添加honor_labels,避免监控数据的job、instance被pushgateway本身的job=pushgateway, instance=pushgateway覆盖。
...
- job_name: 'pushgateway'
    honor_labels: true
    static_configs:
      - targets: ['172.30.12.167:9091']
        labels:
          instance: pushgateway
  • 监控数据写入到文件,再将文件内容push到pushgateway
$ vim pgdata.txt
# TYPE http_request_total counter
# HELP http_request_total get interface request count with different code.
http_request_total{code="200",interface="/v1/save"} 276
http_request_total{code="404",interface="/v1/delete"} 0
http_request_total{code="500",interface="/v1/save"} 1
# TYPE http_request_time gauge
# HELP http_request_time get core interface http request time.
http_request_time{code="200",interface="/v1/core"} 0.122

prometheus+pushgateway+grafana(监控可视化)+自定义监控_监控_04

  • 通过API方式DELETE删除某个或某一组的监控数据
curl -X DELETE http://172.30.12.167:9091/metrics/job/test_job       ##删除job="test_job"组下的所有数据
curl -X DELETE http://172.30.12.167:9091/metrics/job/test_job/instance/test_instance          ##删除{job="job_test",instance="test_instance"}中的数据/指标
  • Grafana展示自定义的监控项
  1. Data Source添加数据源,选择prometheus

prometheus+pushgateway+grafana(监控可视化)+自定义监控_grafana_05

2.Grafana创建Dashboards

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_06

3.对新增的dashboard进行设置

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_07

4.填写基本信息,除了名称、描述、还可以打上一些标签:

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_08

5.创建一个变量

prometheus+pushgateway+grafana(监控可视化)+自定义监控_自定义监控_09

6.在设置变量的页面进行设置,如下图:

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_10

7.基本配置完成了,现在可以配置一个监控

prometheus+pushgateway+grafana(监控可视化)+自定义监控_监控_11

8.新建一个Graph

prometheus+pushgateway+grafana(监控可视化)+自定义监控_grafana_12

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_13

9.配置展示名称

prometheus+pushgateway+grafana(监控可视化)+自定义监控_pushgateway_14

10.如下图,选择"Metrics"页,数据源选择"Prometheus",红框3位置输入内容"my_sample_counter_total{status=“success”, job="$job"}",页面会立即展示my_sample_counter_total这个监控项的曲线图:

prometheus+pushgateway+grafana(监控可视化)+自定义监控_pushgateway_15

11.自定义监控项展示成功了,点击右上角"保存"

prometheus+pushgateway+grafana(监控可视化)+自定义监控_监控_16

12.查看新增的dashboard展示板

prometheus+pushgateway+grafana(监控可视化)+自定义监控_prometheus_17

13.如果您想将这个监控项的配置导出来,以便备份或者导入到另一个Grafana系统,可以在设置页面点击"JSON Model"菜单,得到JSON格式的配置信息,自行保存,如下图:

prometheus+pushgateway+grafana(监控可视化)+自定义监控_自定义监控_18