pushgateway的deployment文件内容
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 |
apiVersion: apps/v1beta2 kind: Deployment metadata: namespace: monitoring name: pushgateway-ttt labels: app: pushgateway-ttt annotations: prometheus.io/scrape: "true" prometheus.io/port: "8080" spec: replicas: 1 revisionHistoryLimit: 0 selector: matchLabels: app: pushgateway-ttt strategy: type: RollingUpdate rollingUpdate: maxSurge: "25%" maxUnavailable: "25%" template: metadata: name: pushgateway-ttt labels: app: pushgateway-ttt spec: containers: - name: pushgateway-ttt image: prom/pushgateway:v0.7.0 imagePullPolicy: IfNotPresent livenessProbe: initialDelaySeconds: 600 periodSeconds: 10 successThreshold: 1 failureThreshold: 10 httpGet: path: / port: 9091 ports: - name: "app-port" containerPort: 9091 resources: limits: memory: "1000Mi" cpu: 1 requests: memory: "1000Mi" cpu: 1 |
1 2 3 4 5 6 7 |
prom/pushgateway可以在hub.docker.io查到dockerfile文件及部署说明,启动参数--persistence.file等都是放入spec.args中添加即可生效; 所有启动参数: --web.listen-address default:9091 --web.telemetry-path default:/metrics --web.route-prefix default:"" --persistence.file default: "" --persistence.interval default: 5m |
参数说明地址
pushgateway的service文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apiVersion: v1 kind: Service metadata: name: pushgateway-ttt namespace: monitoring labels: app: pushgateway-ttt spec: selector: app: pushgateway-ttt #type: NodePort ports: - name: pushgateway-ttt port: 9091 targetPort: 9091 |
pushgateway的ingress文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: pushgateway-ingress namespace: monitoring annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: push-prometheus.ttt.mucang.cn http: paths: - path: / backend: serviceName: pushgateway-ttt servicePort: 9091 |
访问:http://push-prometheus.ttt.mucang.cn/
2、在Prometheus中配置pushgateway及pull pushgateway数据配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# prometheus配置文件中配置pull pushgateway组件配置,添加如下job - job_name: 'pushgateway' metrics_path: /metrics scrape_interval: 60s scrape_timeout: 30s scheme: http honor_labels: true static_configs: - targets: ["push-prometheus.ttt.mucang.cn"] # prometheus的deployment配置文件配置环境变量,这样prometheus才会去pull pushgateway缓存的数据 # 所有推到pushgateway的数据都会在/metrics接口的体现 #说明 1. honor_labels #true #当为true时,prometheus在拉取时会使用pushgateway上的job名称和instance的标签 #false #当为false时,prometheus在拉取时会添加exported_的前缀,并在服务器上为这些标签添加新值 |
重新应用prometheus即可
1 |
kubectl apply -f . |
3. 推送指定的数据格式到pushgateway
1 |
现在普罗米修斯还采集不到任何和pushgateway相关的数据,因为我们需要将数据上报到pushgateway,普罗米修斯才可以采集到,所以现在需要将数据推送到pushgateway。 |
1 2 3 4 5 |
metric指标名 3.6指标值 pushgateway这个是job的名字 这些都是固定的格式 echo "metric 3.6" | curl --data-binary @- http://push-prometheus.ttt.mucang.cn/metrics/job/pushgateway 注:--data-binary 表示发送二进制数据,注意:它是使用POST方式发送的! |
从prometheus查找
1 |
4. 添加复杂数据
1 2 3 4 5 6 |
cat <<EOF | curl --data-binary @- http://push-prometheus.ttt.mucang.cn/metrics/job/pushgateway/instance/test_instance #TYPE node_memory_usage gauge node_memory_usage 36 # TYPE memory_total gauge node_memory_total 36000 EOF |
5. 删除某个组下某个实例的所有数据
1 2 3 4 5 |
curl -X DELETE http://push-prometheus.ttt.mucang.cn/metrics/job/test_job/instance/test_instance 删除某个组下的所有数据: curl -X DELETE http://192.168.124.26:9091/metrics/job/test_job |
6.把数据上报到pushgateway
在被监控服务所在的机器配置数据上报,这个脚本是采集内存信息的
1 2 3 4 5 6 7 8 9 |
[root@node1 ~]# cat push.sh node_memory_usages=$(free -m | grep Mem | awk '{print $3/$2*100}') job_name="memory" instance_name="192.168.100.6" cat <<EOF | curl --data-binary @- http://push-prometheus.ttt.mucang.cn/metrics/job/$job_name/instance/$instance_name #TYPE node_memory_usages gauge node_memory_usages $node_memory_usages EOF |
打开pushgateway web ui界面,可看到如下:
打开prometheus ui界面,可看到如下memory_usage的metrics指标
设置计划任务,每分钟定时上报数据
1 2 |
crontab -e */1 * * * * /root/push.sh |
1 |
注意:从上面配置可以看到,我们上传到pushgateway中的数据有job, 也有instance。而prometheus配置pushgateway这个job_name中也有job和instance,这个job和instance是指pushgateway实例本身,所以job任务yaml中添加 honor_labels: true 参数, 可以避免promethues的targets列表中的job_name是pushgateway的 job 、instance 和上报到pushgateway数据的job和instance冲突。 |
1 2 3 4 |
本文参考: https://www.csdn.net/tags/MtjaEgysNTg3MjktYmxvZwO0O0OO0O0O.html https://blog.csdn.net/qq_34556414/article/details/121944488 感谢大佬们开路。 |
- 本文固定链接: https://www.yoyoask.com/?p=8757
- 转载请注明: shooter 于 SHOOTER 发表