首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确记录K8S入口-nginx指标中的路径

如何正确记录K8S入口-nginx指标中的路径
EN

Stack Overflow用户
提问于 2019-02-03 22:09:24
回答 2查看 1.7K关注 0票数 5

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

nginx- ingress controller pod被成功地抓取到我的Prometheus服务器中,但是所有的入口指标(例如nginx_ingress_controller_request_duration_seconds_bucket)都显示为path="/",而不管处理的请求的真实路径是什么。

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

如何在导出的指标中记录实际路径?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-19 21:33:03

普罗米修斯收集的NGINX指标中的Path属性派生自入口定义yaml。

例如,如果您的入口是:

代码语言:javascript
复制
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的度量,则需要像这样显式指定它(请注意规则的顺序):

代码语言:javascript
复制
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: /
票数 2
EN

Stack Overflow用户

发布于 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你的普罗米修斯-只要用许多不存在的路由调用你的服务。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54503694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档