当前位置:   article > 正文

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

创建 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

因为之前在 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
  • 1

从 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
  • 1
  • 2
  • 3

可以看出来,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
  • 1

在这里插入图片描述

  • 所以我们删除 study/test_delete 这个标签,不会影响另外两个组,即时剩下的两个组,都存在 job/test-pushgateway,我们执行的命令是 curl -XDELETE http://192.168.11.167:31091/metrics/job/test-pushgateway ,也不会把这两个组给删了,必须把剩余的 label 补齐了,才可以删除这个组
  • 删除了组之后,Prometheus 再次扫描没有这个指标,也将无法通过 PromQL 来查询到相关的指标了
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/610131
推荐阅读
相关标签
  

闽ICP备14008679号