Helm Prometheus-operator не получает пользовательские метрики из API

Я использую диаграмму оператора prometheus-helm: https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml, и я ожидал, что он получит мои пользовательские метрики из моего golang api, как я делал ранее, путем «жесткого кодирования» имя службы и порт в файле values.yml:

 scrape_configs:
    - job_name: 'custom-api'
      static_configs:
        - targets: ['custom-api-service.backend.svc.cluster.local:8000']

Однако, поскольку у меня больше микросервисов, я знаю, что это также можно сделать динамически, используя теги _meta. Пример: __meta_kubernetes_service_name

Однако я не понял, что мне следует изменить из файла values.yaml, чтобы он работал.

Grafana получает данные об использовании процессора и памяти от custom-api, но custom-api не отображается на вкладке целей на панели инструментов Prometheus, что странно ...

Это мои услуги:

apiVersion: v1
kind: Service
metadata:
  name: custom-api-service
  namespace: backend
  labels:
    service: custom-api-service
spec:
  type: NodePort
  ports:
    - port: 8000
      targetPort: 8000
      nodePort: 30080
      protocol: TCP
      name: custom-api
  selector:
    component: goapi

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: servicemonitor
  namespace: backend
  labels:
    service: servicemonitor
spec:
  selector:
    matchLabels:
      service: custom-api-service
  endpoints:
  - port: custom-api


person alex    schedule 12.04.2020    source источник


Ответы (2)


Вам нужно будет создать CRD сервисного монитора чтобы очистить ваши метрики.

Допустим, у вас есть служба k8s (здесь: example-app), которая используется для связи с вашими микросервисами. Убедитесь, что ваш микросервис предоставляет метрики Prometheus на определенном порту, а служба k8s также включает этот порт (здесь: prom).

kind: Service
apiVersion: v1
metadata:
  name: example-app
  labels:
    app: example-app
spec:
  selector:
    app: example-app
  ports:
  - name: prom
    port: 8080
  - name: other-port
    port: xxxx

Этот объект службы обнаруживается ServiceMonitor, который выбирает таким же образом. Вам необходимо убедиться, что matchLabels объекта serviceMonitor соответствует metadata.labels службы.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
  labels:
    team: frontend
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: prom

После создания объекта serviceMonitor операторский контроллер сделает все остальное за вас (т. Е. Обновит конфигурацию Prometheus). Вы также можете предоставить индивидуальную конфигурацию с помощью объекта serviceMonitor.

Для получения дополнительной информации посетите Начало работы с оператором Prometheus. монитор службы

person Kamol Hasan    schedule 12.04.2020
comment
они находятся в разных пространствах имен. Helm prometheus-operator находится внутри пространства имен мониторинга, а мой custom-api находится внутри пространства имен backend, как я могу соответствующим образом настроить ваш ServiceMonitor ? - person alex; 12.04.2020
comment
Я обновил свой вопрос, указав текущую конфигурацию монитора служб @KamolHasan - person alex; 12.04.2020

Ресурс Prometheus включает поле с именем serviceMonitorSelector, которое определяет выбор ServiceMonitors для использования. По умолчанию и до версии v0.19.0 ServiceMonitors должен быть установлен в том же пространстве имен, что и экземпляр Prometheus. С помощью Prometheus Operator v0.19.0 и более поздних версий ServiceMonitors можно выбрать за пределами пространства имен Prometheus через поле serviceMonitorNamespaceSelector ресурса Prometheus.

В пространстве имен мониторинга создайте объект Prometheus, который выбирает ServiceMonitor по метке service: servicemonitor

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
spec:
  serviceAccountName: <service-account-name>
  serviceMonitorSelector:
    matchLabels:
      service: servicemonitor
  resources:
    requests:
      memory: 400Mi
  enableAdminAPI: false

serviceAccountName вы можете найти в пространстве имен monitoring как helmreleasename-prometheus-operator-prometheus

person Arghya Sadhu    schedule 12.04.2020
comment
который из? при установке диаграммы в это пространство имен по умолчанию добавляется не менее 20 конфигурационных карт. - person alex; 12.04.2020
comment
можете ли вы добавить его в файл values.yaml - person Arghya Sadhu; 12.04.2020
comment
это не сработало, и ответ должен был быть таким же, как и в этом другом потоке, но он тоже не сработал: stackoverflow.com/questions/60706343/ - person alex; 12.04.2020
comment
создать объект Prometheus, как в ответе - person Arghya Sadhu; 12.04.2020