文章目录
- @[toc]
- Pushgateway 简介
- Pushgateway 部署
- 创建 svc
- 创建 deployment
- Pushgateway 测试
- 删除 Pushgateway 上对应 lable 的数据
文章目录
- @[toc]
- Pushgateway 简介
- Pushgateway 部署
- 创建 svc
- 创建 deployment
- Pushgateway 测试
- 删除 Pushgateway 上对应 lable 的数据
Pushgateway 简介
WHEN TO USE THE PUSHGATEWAY
- Pushgateway 是一种中介服务,允许您从无法抓取的作业中推送指标。
- The Pushgateway is an intermediary service which allows you to push metrics from jobs which cannot be scraped. For details, see Pushing metrics.
- Pushgateway 是一种中介服务,允许您从无法抓取的作业中推送指标。有关详细信息,请参阅推送指标。
- 官方建议在某些有限的情况下使用 Pushgateway。盲目地使用 Pushgateway 而不是 Prometheus 通常的拉取模型进行常规指标收集时,存在几个陷阱:
- 当通过单个 Pushgateway 监控多个实例时,Pushgateway 既是单点故障,又是潜在的瓶颈。
- 将失去 Prometheus 通过
up
指标(每次抓取生成)的自动实例运行状况监控。 - Pushgateway 永远不会清除推送给它的时间序列,并将永远将它们暴露给 Prometheus,除非通过 Pushgateway 的 API 手动删除这些时间序列。
所以,一般在 Prometheus 无法主动采集的情况下才会使用 Pushgateway,比如一些 shell 脚本,不存在客户端可以提供给 Prometheus 采集,就可以按照 Prometheus 的指标
内容格式
推送给 Pushgateway 来实现指标的采集,但是一定要对 Pushgateway 里面的历史数据做清理
Pushgateway 部署
同样也是在 k8s 内部署,并且开放 nodeport 端口给外部采集使用,部署的版本是:v1.8.0
创建 svc
---
apiVersion: v1
kind: Service
metadata:annotations:labels:app: pushgatewayname: pushgateway-svcnamespace: monitor
spec:type: NodePortports:- name: gatewayport: 9091protocol: TCPtargetPort: 9091nodePort: 31091selector:app: pushgateway
创建 deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:labels:app: pushgatewayname: pushgatewaynamespace: monitor
spec:replicas: 1selector:matchLabels:app: pushgatewaytemplate:metadata:annotations:prometheus.io/path: /metricsprometheus.io/port: "9091"prometheus.io/scrape: "true"prometheus.io/type: pushgatewaylabels:app: pushgatewayspec:containers:- args:- "--web.listen-address=:9091"image: prom/pushgateway:v1.8.0livenessProbe:failureThreshold: 60initialDelaySeconds: 5periodSeconds: 10successThreshold: 1tcpSocket:port: gatewaytimeoutSeconds: 1name: pushgatewayports:- containerPort: 9091name: gatewayprotocol: TCPreadinessProbe:failureThreshold: 60initialDelaySeconds: 5periodSeconds: 10successThreshold: 1tcpSocket:port: gatewaytimeoutSeconds: 1terminationGracePeriodSeconds: 0
因为之前在 Prometheus 里面做了针对 pod 的服务发现,所以可以直接从 Prometheus 的 targets 页面的 kubernetes-pod 里面找到 Pushgateway
Pushgateway 测试
http://<pushgateway ip>:<pushgateway prod>/metrics/job/<job name>/<label name>/<label value>
job name
可以自定义的,但是前面的 job 是固定的,不能修改,这个也是属于 label 之一的,后面的<label name>/<label value>
也是自己自定义的 label,都是会存在 TSDB 里面可以查询的- 下面就是往 Pushgateway 里面推送一个指标名为
hello_world
,值为2024
,label 有{exported_job="test-pushgateway",instance="192.168.11.167",study="pushgateway"}
的数据
echo "hello_world 2024" | curl --data-binary @- http://192.168.11.167:31091/metrics/job/test-pushgateway/instance/192.168.11.167/study/pushgateway
从 pushgateway 看到,已经有数据存在了
从 Prometheus 查看指标信息,由于我的服务发现里面配置过 job 和 instance 这两个 label,导致进入 Prometheus 之后,从 Pushgateway 采集的这两个 label 变成了 exported_instance 和 exported_job
删除 Pushgateway 上对应 lable 的数据
先去生成一个不同 label 的数据
echo "hello_world_2024 2024" | curl --data-binary @- http://192.168.11.167:31091/metrics/job/test-pushgateway/instance/192.168.11.167/study/test_delete
echo "hello_world_2025 2025" | curl --data-binary @- http://192.168.11.167:31091/metrics/job/test-pushgateway/instance/192.168.11.167/study/test_delete
echo "hello_world_2025 2025" | curl --data-binary @- http://192.168.11.167:31091/metrics/job/test-pushgateway/instance/192.168.11.167/study/test_delete_2
可以看出来,pushgateway 是相同 label 为一组,一组里面可以有多个指标
- Pushgateway 只能删除一个组里面的所有指标内容,没法针对某个组里面的指定指标删除,所以只能把组删了,重新写入才能实现指标名称的替换,或者新写一个组
- 一个组有几个 label,就要把路径写完整,少一个 label 就不会删除这组数据
curl -XDELETE http://192.168.11.167:31091/metrics/job/test-pushgateway/instance/192.168.11.167/study/test_delete
- 所以我们删除
study/test_delete
这个标签,不会影响另外两个组,即时剩下的两个组,都存在job/test-pushgateway
,我们执行的命令是curl -XDELETE http://192.168.11.167:31091/metrics/job/test-pushgateway
,也不会把这两个组给删了,必须把剩余的 label 补齐了,才可以删除这个组- 删除了组之后,Prometheus 再次扫描没有这个指标,也将无法通过 PromQL 来查询到相关的指标了