Добавить новые сервисные показатели в prometheus-operator

#kubernetes #microservices #prometheus #kubernetes-helm #prometheus-operator

#кубернетес #микросервисы #prometheus #kubernetes-рулевой #prometheus-operator #kubernetes

Вопрос:

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

Как я могу это сделать?

Ответ №1:

Сначала вам необходимо развернуть Prometheus-operator с помощью Helm или вручную:

 # By Helm:
$ helm install stable/prometheus-operator --generate-name
 
# By manual: for release `release-0.41`
kubectl apply -f  https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/release-0.41/bundle.yaml
  

Если в вашем кластере включен RBAC, вам необходимо установить RBAC для Prometheus объекта:

 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: default
  

Затем вам нужно развернуть Promethues объект:

 apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
  labels:
    prometheus: prometheus
spec:
  replicas: 1
  serviceAccountName: prometheus
  serviceMonitorSelector:
    matchLabels:
      k8s-app: prometheus
  serviceMonitorNamespaceSelector:
    matchLabels:
      prometheus: prometheus
  resources:
    requests:
      memory: 400Mi
  

Здесь Prometheus объект выберет все ServiceMonitor , которые соответствуют приведенным ниже условиям:

  • ServiceMonitor будет иметь k8s-app: prometheus метку.
  • ServiceMonitor будут созданы в тех пространствах имен, которые имеют prometheus: prometheus метку.

ServiceMonitor имеет селектор меток для выбора сервисов и их базовых конечных объектов. Объект Service для примера приложения выбирает модули по app метке, имеющей example-app значение. Объект Service также указывает порт, на котором отображаются показатели.

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

Этот сервисный объект обнаруживается ServiceMonitor, который выбирает таким же образом. app Метка должна иметь значение example-app .

 apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
  labels:
    k8s-app: prometheus
spec:
  selector:
    matchLabels:
      app: example-app
  namespaceSelector:
    # matchNames:
    # - demo
    any: true
  endpoints:
  - port: web
  

Здесь namespaceSelector используется для выбора всех пространств имен, в которых создается сервис. вы можете указать конкретное любое пространство имен с помощью matchNames .

Вы также можете создать ServiceMonitor в любом пространстве имен по своему усмотрению. Но вам нужно указать это в Prometheus cr spec , например:

   serviceMonitorNamespaceSelector:
    matchLabels:
      prometheus: prometheus
  

Вышеуказанное serviceMonitorNamespaceSelector используется в Prometheus operator для выбора того пространства имен, в котором есть метка prometheus: prometheus . Предположим, у вас есть пространство имен, demo и в этом demo пространстве имен вы создали Prometheus затем вам нужно добавить метку prometheus: prometheus в demo пространство имен с помощью patch:

 $ kubectl patch namespace demo -p '{"metadata":{"labels": {"prometheus":"prometheus"}}}'
  

Вы можете найти более подробную информацию здесь:

Комментарии:

1. спасибо, если у меня есть Prometheus в другом пространстве имен и мой сервис в пространстве имен по умолчанию, что я меняю?

2. Я обновил свой ответ и добавил новую ссылку. возможно, вы найдете свой ответ из приведенного выше ответа.

3. спасибо, но теперь, после применения вашего решения, Prometheus Service Discovery получает >>> monitoring/sg-prometheus-rabbitmq-exporter/0 (0/16 активных целей) — это мой сервис, и данные не отображаются в Prometheus

4. мой сервис — это селектор: app =prometheus-rabbitmq-exporter,release=sg-prometheus-rabbitmq-exporter Тип: ClusterIP IP: 10.3.144.40 Порт: rabbitmq-exporter 9419 / TCP targetPort: публикация / Конечные точки TCP: 10.2.0.47: 9419 Привязка к сеансу: Отсутствует

5. мой ServiceMonitor — это apiVersion: monitoring.coreos.com/v1 вид: метаданные ServiceMonitor: имя: sg-prometheus-rabbitmq-exporter метки: k8s-приложение: prometheus релиз: sg-prometheus-operator спецификация: конечные точки: — путь: /metrics порт: веб-селектор: Соответствующие метки: приложение: prometheus-rabbitmq-exporter релиз: sg-prometheus-rabbitmq-exporter