Как избежать вызова Прометея во все экземпляры сервиса k8s (только один, сбор метрик для всего приложения) - PullRequest
0 голосов
/ 29 февраля 2020

Мне необходимо предоставить метрики для всего приложения для коллекции Prometheus из приложения Kubernetes, которое развернуто с несколькими экземплярами, например, масштабировано с помощью горизонтального стручка Autoscaler. Точка очистки предоставляется каждым экземпляром модуля в целях аварийного переключения, однако я не хочу, чтобы Прометей фактически вызывал конечную точку очистки в каждом экземпляре модуля, только по одному экземпляру за раз, и переход на другой экземпляр только при необходимости.

Статистика относится ко всем приложениям, а не к экземплярам для каждого модуля, все конечные точки экземпляров сообщают одни и те же данные, и их параллельный вызов не принесет никакой полезной цели и только увеличит рабочую нагрузку на серверную систему, которая должна быть запрашивается для статистики. Я не хочу, чтобы 30 обращений к бэкэнду (при условии, что приложение масштабируется до 30 модулей), где будет достаточно одного вызова.

Я надеялся, что предоставление конечной точки очистки как службы k8s (и аннотирование службы для соскоб) должен сделать свое дело. Однако вместо того, чтобы пройти через прокси-сервер службы и позволить ему направить запрос к одному из модулей, Прометей, похоже, обращается непосредственно к экземплярам службы и ко всем, а не только к одному за раз.

enter image description here

Есть ли способ, чтобы Прометей не вызывал все экземпляры, и чтобы он вызывал только один?

Служба определяется как:

apiVersion: v1
kind: Service
metadata:
  name: k8worker-msvc
  labels:
    app: k8worker-msvc
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/metrics'
    prometheus.io/port: '3110'
spec:
  selector:
    app: k8worker
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 3110
      targetPort: 3110

В случае, если это невозможно, какие у меня есть варианты, кроме проведения выборов лидеров внутри приложения и представления пустых данных метрик из экземпляров, не являющихся лидерами?

Спасибо за совет.

1 Ответ

2 голосов
/ 29 февраля 2020

Это означает, что метрики поступают из какой-то серверной базы данных, а не из обычного экспортера. Переместите конечную точку метрики в новую службу, подключенную к той же БД, и запустите только одну ее копию.

...