Как настроить прикладной мониторинг

Локальный сбор метрик приложений в клиентском кластере.

Когда в кластере включён Модуль мониторинга. Компонент управления (shturval-metrics-collector) (shturval-metrics-collector, Victoria Metrics Agent), можно настроить прикладной мониторинг — сбор метрик клиентских приложений. Для этого в неймспейсе user-monitoring разворачивается отдельный экземпляр VMAgent.

Проверить работу можно на любом приложении с метриками в формате OpenMetrics; в инструкции — демо-приложение VictoriaMetrics.

Обратите внимание! Обратите внимание! Для корректного сбора метрик с клиентских приложений должны выполняться требования.

Перед началом

Перед настройкой проверьте:

  • В кластере установлен и включён shturval-metrics-collector.
  • Что приложение готово к сбору метрик: см. Требования к приложениям.
  • Что у вас есть права на создание кастомных ресурсов и доступ к интерфейсу/CLI кластера.

Что будет создано

Объект Неймспейс Назначение
Namespace user-monitoring — изоляция прикладного мониторинга
VMSingle user-monitoring Локальное хранилище метрик приложений
VMAgent user-monitoring Сбор метрик и запись в VMSingle (или remoteWrite)
ServiceAccount, ClusterRole, ClusterRoleBinding user-monitoring + cluster RBAC для VMAgent
PodMonitor / ServiceMonitor / VMPodScrape / VMServiceScrape неймспейс приложения Описание целей сбора метрик

Схема:

  • создаётся неймспейс user-monitoring;
  • в нём разворачиваются VMSingle (хранилище) и VMAgent (сбор и remoteWrite);
  • для ваших приложений создаются объекты, описывающие сбор метрик (PodMonitor/ServiceMonitor или VMPodScrape/VMServiceScrape).

Шаг 1. Создать неймспейс user-monitoring

В графическом интерфейсе кластера перейдите в раздел Неймспейсы и создайте новый неймспейс user-monitoring.

Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

Шаг 2. Загрузить VMSingle и VMAgent

Через импорт манифестов загрузите манифесты VMSingle и VMAgent с нужными параметрами.

Пример VMSingle:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
  name: user-monitoring # Имя не может быть изменено
  namespace: user-monitoring
spec:
  storage:
    volumeClaimTemplate:
      spec:
        resources:
          requests:
            storage: <ваше значение параметра>
Параметр Описание Тип Пример
requests.storage Запрашиваемый объём для хранения прикладных метрик string 3Gi

Пример VMAgent:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMAgent
metadata:
  labels:
    app: vmagent-user-monitoring # Имя не может быть изменено
    app.kubernetes.io/component: monitoring
    app.kubernetes.io/name: user-monitoring
  name: user-monitoring
  namespace: user-monitoring
spec:
  externalLabels:
    cluster: client-cluster
  extraArgs:
    <ваше значение параметров>
  logFormat: <ваше значение параметра>
  logLevel: <ваше значение параметра>
  nodeScrapeNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  podScrapeNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  port: "8429"
  probeNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  remoteWrite:
    - url: <ваше значение параметра>
  replicaCount: <ваше значение параметра>
  resources:
    limits:
      cpu: <ваше значение параметра>
      memory: <ваше значение параметра>
    requests:
      cpu: <ваше значение параметра>
      memory: <ваше значение параметра>
  scrapeConfigNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  scrapeInterval: <ваше значение параметра>
  securityContext:
    fsGroup: 2000
    runAsGroup: 2000
    runAsNonRoot: true
    runAsUser: 1000
  serviceAccountName: vmagent-user-monitoring
  serviceScrapeNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  staticScrapeNamespaceSelector:
    matchExpressions:
      - key: shturval.tech/system-namespace
        operator: DoesNotExist
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/infra
      operator: Exists
  vmAgentExternalLabelName: ""
Параметр Описание Тип данных Пример
extraArgs Список дополнительных аргументов запуска []object envflag.enable: "true", envflag.prefix: VM_, promscrape.dropOriginalLabels: "true", promscrape.maxScrapeSize: "67108864", promscrape.streamParse: "true", remoteWrite.tmpDataPath: /tmp
logFormat Формат лога string default
logLevel Уровень лога string INFO
replicaCount Количество реплик integer 1
remoteWrite Ссылки на удалённые хранилища метрик для записи []object url: vmcluster.local:8480/insert/123/prometheus
resources Ресурсы requests и limits []object limits: cpu: 10, memory: 10Gi; requests: cpu: 50m, memory: 50Mi
scrapeInterval Частота сбора метрик integer 15s
Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

Шаг 3. Загрузить ServiceAccount, ClusterRole, ClusterRoleBinding

Через импорт манифестов загрузите ресурсы (без изменения параметров):

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: vmagent-user-monitoring
    app.kubernetes.io/component: monitoring
    app.kubernetes.io/name: user-monitoring
  name: vmagent-user-monitoring
  namespace: user-monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app: vmagent-user-monitoring
    app.kubernetes.io/component: monitoring
    app.kubernetes.io/name: user-monitoring
  name: vmagent-user-monitoring
rules:
- apiGroups: ["discovery.k8s.io"]
  resources: ["endpointslices"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["services", "endpoints", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["networking.k8s.io"]
  resources: ["ingresses"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["nodes", "nodes/proxy", "nodes/metrics"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["configmaps","secrets"]
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    app: vmagent-user-monitoring
    app.kubernetes.io/component: monitoring
    app.kubernetes.io/name: user-monitoring
  name: vmagent-user-monitoring
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: vmagent-user-monitoring
subjects:
  - kind: ServiceAccount
    name: vmagent-user-monitoring
    namespace: user-monitoring
Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

Дальше можно проверить настройку на демо-приложении: Как проверить прикладной мониторинг.