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 参数将数据持久化下来。