如何在 K8S ingress-nginx 指标中正确记录“路径”

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="/"

值得注意的是,当我查看入口日志时 - 路径已正确记录。

如何获得导出指标中注明的真实路径?

谢谢!

wil*_*lfo 5

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)