wil*_*lfo 5 nginx kubernetes prometheus nginx-ingress
我正在使用ingress-nginx作为运行在 K8S 上的服务之一的入口控制器(我使用的是 nginx-0.20.0 发布映像,在入口控制器使用的 K8S 配置图中没有特定的指标配置)。
nginx-ingress-controller pod 已成功抓取到我的 Prometheus 服务器中,但无论处理请求的真实路径如何,都会nginx_ingress_controller_request_duration_seconds_bucket显示所有入口指标(例如)path="/"。
值得注意的是,当我查看入口日志时 - 路径已正确记录。
如何获得导出指标中注明的真实路径?
谢谢!
prometheus 收集的 NGINX 指标中的属性Path源自 Ingress 定义 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: /
Run Code Online (Sandbox Code Playgroud)
然后,虽然 NGINX 会将任何 URL 与您的服务相匹配,但它都将记录在路径“ /”下(如此处所示)。
如果您想要特定 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: /
Run Code Online (Sandbox Code Playgroud)