9.prometheus pushgateway介绍与部署

一、Pushgateway介绍

Pushgateway是一个独立的服务,Pushgateway位于应用程序发送指标和Prometheus服务器之间。Pushgateway接收指标,然后将其作为目标被Prometheus服务器拉取。可以将其看作代理服务,或者与blackbox exporter的行为相反, 它接收度量,而不是探测它们。
Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是:
  • Prometheus 采用 pull 模式,可能因为网络限制,导致 Prometheus 无法直接拉取各个 target 数据。
  • 在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。
由于以上原因,不得不使用 pushgateway,但它存在一些弊端:
  • 将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。
  • Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。
  • Pushgateway 可以持久化推送给它的所有监控数据。默认是存放在内存中,可以通过配置持久化。
因此,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。

二、部署配置

1、主机安装:

[root@master soft]# wget https://github.com/prometheus/pushgateway/releases/download/v1.1.0/pushgateway-1.1.0.linux-amd64.tar.gz
[root@master soft]# tar xf pushgateway-1.1.0.linux-amd64.tar.gz
[root@master soft]# mv pushgateway-1.1.0.linux-amd64 /opt/prometheus/pushgateway
[root@master pushgateway]# ./pushgateway --help
[root@master pushgateway]# nohup ./pushgateway --persistence.file="pushgateway.data" &  #持久化存储,默认监听端口9091

安装完成后,浏览器访问: http://192.168.42.128:9091/#

2、docker安装:

[root@node1 ~]# docker pull prom/pushgateway
[root@node1 ~]# docker run -d --name="pushgateway" -p 9091:9091 prom/pushgateway

3、修改prometheus配置,添加pushgateway

[root@node1 prometheus]# vim prometheus.yml
.....
  - job_name: pushgateway
    honor_labels: true   #避免收集数据本身的 job 和 instance被pushgateway实例信息覆盖
    static_configs:
    - targets: ['192.168.42.128:9091']
      labels:
        instance: pushgateway

4、测试:

(1)查看prometheus web界面,target里pushgateway状态是否为UP。
(2)metric推送与删除
[root@node1 prometheus]# echo "test_metric 999" | curl --data-binary @- http://192.168.42.128:9091/metrics/job/test_job  #可在pushgateway或prometheus web页面上查看
注:--data-binary 表示发送二进制数据,它是使用POST方式发送的!
 
[root@node1 prometheus]# cat <<EOF | curl --data-binary @- http://192.168.42.128:9091/metrics/job/test_job/instance/some_instance # TYPE some_metric counter
some_metric{label="val1"} 999
# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283
EOF
删除某个组下的所有数据:
[root@node1 prometheus]# curl -X DELETE http://192.168.42.128:9091/metrics/job/test_job
删除某个组下某个实例的所有数据:
[root@node1 prometheus]# curl -X DELETE http://192.168.42.128:9091/metrics/job/test_job/instance/some_instance
注:
可以发现 pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。
因为 Prometheus 配置 pushgateway 的时候,也会指定 job 和 instance, 但是它只表示 pushgateway 实例,不能真正表达收集数据的含义。所以在 prometheus 中配置 pushgateway 的时候,需要添加 honor_labels: true 参数, 从而避免收集数据本身的 job 和 instance 被覆盖。
注意,为了防止 pushgateway 重启或意外挂掉,导致数据丢失,我们可以通过 -persistence.file 和 -persistence.interval 参数将数据持久化下来。
posted @ 2020-02-11 17:18  _幸会  阅读(3115)  评论(0编辑  收藏  举报