【问题标题】:How to properly log the "Path" in K8S ingress-nginx metrics如何在 K8S ingress-nginx 指标中正确记录“路径”
【发布时间】:2019-02-03 14:09:24
【问题描述】:

我正在使用ingress-nginx 作为在 K8S 上运行的服务之一的入口控制器(我正在使用 nginx-0.20.0 版本映像,在入口控制器正在使用的 K8S configmap 中没有特定的指标配置)。

nginx-ingress-controller pod 已成功抓取到我的 Prometheus 服务器中,但无论处理请求的真实路径如何,所有入口指标(例如 nginx_ingress_controller_request_duration_seconds_bucket)都显示为 path="/"

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

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

谢谢!

【问题讨论】:

  • 您是否启用了 vts 指标:enable-vts-status: "true"
  • @mk_sta 我试过了,它似乎没有任何效果:(但是谢谢!

标签: nginx kubernetes prometheus nginx-ingress


【解决方案1】:

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: /

然后,尽管 NGINX 将匹配任何 URL 到您的服务,它都将记录在路径“/”下(如 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: /

【讨论】:

  • 感谢evgenyl 引导我理解这一点!
【解决方案2】:

如果我没有理解错,这个标签会因为导致高基数而被删除:https://github.com/kubernetes/ingress-nginx/issues/2924#issuecomment-424516095

这是更普遍的问题:https://github.com/kubernetes/ingress-nginx/pull/2701

不得不说我非常同意 - 想一想:如果您允许路由作为标签值,那么对您的 Prometheus 进行 DDoS 攻击会非常容易 - 只需使用大量不存在的路由调用您的服务即可。

所有这些调用都将转换为所有入口指标的标签值......

【讨论】:

  • 感谢您的评论!我浏览了这些线程,发现入口控制器的行为与我想象的不同。在我的入口定义中,我使用path: / 来捕获对服务的所有调用,同时认为控制器会捕获确切的路径。但是,它没有(从我的试验来看,即使是正则表达式)。如果我希望指标注册特定路径,我需要为该路径显式添加规则。我会将此作为答案发布。
猜你喜欢
  • 2021-10-26
  • 2020-09-16
  • 2023-02-07
  • 2021-05-15
  • 1970-01-01
  • 2019-07-29
  • 2019-03-24
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多