文章目录
- @[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: pushgateway
name: pushgateway-svc
namespace: monitor
spec:
type: NodePort
ports:
- name: gateway
port: 9091
protocol: TCP
targetPort: 9091
nodePort: 31091
selector:
app: pushgateway
创建 deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
labels:
app: pushgateway
name: pushgateway
namespace: monitor
spec:
replicas: 1
selector:
matchLabels:
app: pushgateway
template:
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "9091"
prometheus.io/scrape: "true"
prometheus.io/type: pushgateway
labels:
app: pushgateway
spec:
containers:
- args:
- "--web.listen-address=:9091"
image: prom/pushgateway:v1.8.0
livenessProbe:
failureThreshold: 60
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: gateway
timeoutSeconds: 1
name: pushgateway
ports:
- containerPort: 9091
name: gateway
protocol: TCP
readinessProbe:
failureThreshold: 60
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: gateway
timeoutSeconds: 1
terminationGracePeriodSeconds: 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 来查询到相关的指标了