управляющий прометей-оператор не получает пользовательские метрики от API - PullRequest
0 голосов
/ 12 апреля 2020

Я использую диаграмму оператора-прометея руля: 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, чтобы он работал.

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

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

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

Ответы [ 2 ]

1 голос
/ 12 апреля 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

1 голос
/ 12 апреля 2020

Вам понадобится создать Сервисный монитор 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, контроллер оператора сделает все за вас (ie. Обновить конфигурацию Prometheus). Вы также можете предоставить пользовательскую конфигурацию через объект serviceMonitor.

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

...