我们在一个命名空间中的 OpenShift 中有 Prometheus (例如: “ TestNamespace ”),它是从 两个 POD 中的 Application 抓取的指标em>(例如,命名为 TestApp )在同一命名空间中。 Prometheus会以以下方式抓取指标:“ 服务 ”(“ 角色:服务”-文件中的“ prometheus.yaml < / strong>”),因此它被轮循从 POD 中抓取了,但是我们需要从所有POD中抓取。
注意 : Prometheus 和 TestApp 使用了 Istio代理-这就是为什么我们立即选择 Prometheus 中的“ 角色:服务”,因为如果我们打开“ 端点”模式(即 prometheus)。 yaml :“ 角色:端点”),我们收到错误消息: Prometheus 中的“ 502错误的网关”,指标未清除。 / p>
我们尝试了以下解决方案:无头服务:https://dev.to/kaoskater08/building-a-headless-service-in-kubernetes-3bk8
该解决方案的结果:
ip address by service/test-app-service: 172.30.81.196
和IP地址通过 headless-service :
test-app-1-7d6hv 2/2 Running 10.128.38.24 some-host-0027.vm.com
test-app-1-jhcdm 2/2 Running 10.128.36.240 some-host-0025.vm.com
然后,如果这样做:
## requests to 172.30.81.196 (created by regular service.yaml)
#http-request from the Prometheus POD:
wget -qO- http://172.30.81.196:8080 -> result success
#http-request from the side-car "istio-proxy" in Prometheus POD:
curl http://172.30.81.196:8080 -> result success
没有问题。 但是,如果
## reqeusts to 10.128.38.24 (headless-service)
#http-request from the side-car istio-proxy in Prometheus POD:
curl http://10.128.38.24:8080 -> result success
#http-request from the Prometheus POD:
wget -qO- http://10.128.38.24:8080 -> 502 Bad Gateway
或下一个IP:
## reqeusts to 10.128.36.240 (headless-service)
#http-request from the side-car istio-proxy in prometheus POD:
curl http://10.128.36.240:8080 -> result success
#http-request from the Prometheus POD:
wget -qO- http://10.128.36.240:8080 -> 502 Bad Gateway
因此,在POD的Prometheus中已经出现了问题: 502错误的网关。 Prometheus并未刮除度量标准,它具有此错误,我们也可以在Prometheus UI的“目标”部分中看到。
但是没问题,如果通过POD的Prometheus 带标头的终端自定义http请求来完成:
wget -qO- http://10.128.38.24:8080 --header="Host: {service_name_in_openshift}:{service_port}" -> resulted success.
那么,我们如何解决Prometheus来从应用程序的所有 POD中抓取指标吗?最好的解决方法是什么?