Как правильно зарегистрировать «Путь» в метриках ingress-nginx K8S - PullRequest
0 голосов
/ 03 февраля 2019

Я использую ingress-nginx в качестве контроллера Ingress для одного из моих сервисов, работающих на K8S (я использую образ выпуска nginx-0.20.0 без особых конфигураций метрик в карте конфигурации K8Sиспользуется входной контроллер).

Модули nginx-ingress-controller успешно скопированы на мой сервер Prometheus, но все входные метрики (например, nginx_ingress_controller_request_duration_seconds_bucket) отображаются с path="/" независимо от реального пути обработанного запроса.

Стоит отметить, что когда я просматриваю входящие журналы - путь записывается правильно.

Как узнать реальный путь, отмеченный в экспортированных показателях?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Атрибут Path в метриках NGINX, собранных prometheus, получен из определения 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-адрес вашей службы будет записан по пути "/" (как видно здесь ).

Если вам нужны метрики для определенного 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: /
0 голосов
/ 19 февраля 2019

Если я правильно понимаю, этот ярлык был удален как вызывающий большую мощность: https://github.com/kubernetes/ingress-nginx/issues/2924#issuecomment-424516095

И это более общая проблема: https://github.com/kubernetes/ingress-nginx/pull/2701

Должен сказать, что я довольносогласитесь - подумайте об этом: если вы допустите, чтобы маршрут был значением метки, DDoS для вашего Prometheus может быть довольно легко - просто позвоните в службу с множеством несуществующих маршрутов.

Все эти вызовы будут переведеныв значения меток для всех входных метрик ....

...