我使用ingress-nginx作为在K8S上运行的服务的入口控制器(我使用nginx-0.20.0版本镜像,入口控制器使用的K8S配置图中没有特定的指标配置)。
nginx- ingress controller pod被成功地抓取到我的Prometheus服务器中,但是所有的入口指标(例如nginx_ingress_controller_request_duration_seconds_bucket)都显示为path="/",而不管处理的请求的真实路径是什么。
值得注意的是,当我查看入口日志时-路径是正确记录的。
如何在导出的指标中记录实际路径?
谢谢!
发布于 2019-02-19 21:33:03
普罗米修斯收集的NGINX指标中的Path属性派生自入口定义yaml。
例如,如果您的入口是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: <some-k8s-ingress-name>
namespace: <some-k8s-namespace-name>
spec:
rules:
- host: <hostname>
http:
paths:
- backend:
serviceName: <some-k8s-service-name>
servicePort: <some-port>
path: /然后,尽管NGINX会将任何网址与你的服务相匹配,但它都会记录在路径"/“下(如here所示)。
如果您需要特定URL的度量,则需要像这样显式指定它(请注意规则的顺序):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: <some-k8s-ingress-name>
namespace: <some-k8s-namespace-name>
spec:
rules:
- host: <hostname>
http:
paths:
- backend:
serviceName: <some-k8s-service-name>
servicePort: <some-port>
path: /more/specific/path
- backend:
serviceName: <some-k8s-service-name>
servicePort: <some-port>
path: /发布于 2019-02-19 05:26:55
如果我理解正确,这个标签被删除,因为它导致了高基数:https://github.com/kubernetes/ingress-nginx/issues/2924#issuecomment-424516095
这是一个更普遍的问题:https://github.com/kubernetes/ingress-nginx/pull/2701
我不得不说我非常同意-想想看:如果你允许路由是标签值,它可以很容易地DDoS你的普罗米修斯-只要用许多不存在的路由调用你的服务。
所有这些调用都将转换为所有入口指标的标签值...
https://stackoverflow.com/questions/54503694
复制相似问题