Модуль не требует обязательной конфигурации (все работает из коробки).

В модуле реализовано 25 алертов.

Модуль включен по умолчанию в наборах модулей: Default, Managed. Модуль выключен по умолчанию в наборе модулей Minimal.

Как явно включить или отключить модуль…

Чтобы явно включить или выключить модуль prometheus, установите spec.enabled в true или false в ModuleConfig/prometheus (создайте, при необходимости), или воспользуйтесь командой deckhouse-controller module в поде d8-system/deckhouse.

Пример включения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: prometheus
    spec:
      enabled: true
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module enable prometheus
    

Пример выключения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: prometheus
    spec:
      enabled: false
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module disable prometheus
    

Чтобы настроить модуль, используйте custom resource ModuleConfig с именем prometheus (подробнее о настройке Deckhouse…).

Пример ресурса ModuleConfig/prometheus для настройки модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: prometheus
spec:
  version: 2
  enabled: true
  settings: # <-- Параметры модуля из раздела "Параметры" ниже.

Параметры

Версия схемы: 2

  • settings
    объект
    • settings.auth
      объект

      Опции, связанные с аутентификацией или авторизацией в приложении.

      • settings.auth.allowedUserGroups
        массив строк

        Массив групп, пользователям которых позволен доступ в Grafana и Prometheus.

        Используется, если включен модуль user-authn или параметр externalAuthentication.

        Внимание! При использовании совместно с модулем user-authn необходимо также добавить разрешенные группы в соответствующее поле в настройках DexProvider.

      • settings.auth.externalAuthentication
        объект

        Параметры для подключения внешней аутентификации (используется механизм NGINX Ingress external-auth, работающий на основе модуля NGINX auth_request.

        Внешняя аутентификация включается автоматически, если включен модуль user-authn.

        • settings.auth.externalAuthentication.authSignInURL
          строка

          URL, куда будет перенаправлен пользователь для прохождения аутентификации (если сервис аутентификации вернул код ответа HTTP, отличный от 200).

          Пример:

          authSignInURL: https://example.com/dex/sign_in
          
        • settings.auth.externalAuthentication.authURL
          строка

          URL сервиса аутентификации. Если пользователь прошел аутентификацию, сервис должен возвращать код ответа HTTP 200.

          Пример:

          authURL: https://example.com/dex/auth
          
      • settings.auth.satisfyAny
        булевый

        Разрешает пройти только одну из аутентификаций.

        В комбинации с опцией whitelistSourceRanges позволяет считать авторизованными всех пользователей из указанных сетей без ввода логина и пароля.

        По умолчанию: false

        Пример:

        satisfyAny: true
        
      • settings.auth.whitelistSourceRanges
        массив строк

        Массив адресов в формате CIDR, которым разрешено проходить авторизацию в Grafana и Prometheus.

        Пример:

        whitelistSourceRanges:
        - 1.1.1.1/32
        
    • settings.externalLabels
      объект

      Набор внешних меток для маркировки метрик.

      Допускается использование значений переменных окружения контейнера config-reloader в качестве значений меток, например:

      • HOSTNAME/POD_NAME — содержит наименование пода (например, prometheus-main-0, prometheus-main-1 и т. д.);
      • SHARD — содержит номер шарда.

      Пример:

      externalLabels:
        prometheus_replica: "$(POD_NAME)"
        shard: "$(SHARD)"
        hostname: "$(HOSTNAME)"
      
    • settings.grafana
      объект

      Настройки для инсталляции Grafana.

      • settings.grafana.customPlugins
        массив строк

        Список дополнительных plug-in’ов для Grafana.

        Необходимо указать в качестве значения список имен плагинов из официального репозитория.

        Пример добавления plug-in’ов для возможности указания clickhouse в качестве datasource и панели flow-chart:

        grafana:
          customPlugins:
          - agenty-flowcharting-panel
          - vertamedia-clickhouse-datasource
        

        Вы также можете устанавливать плагины из других источников передав ссылку на zip-архив плагина в формате <url to plugin zip>;<plugin name>:

        grafana:
          customPlugins:
          - http://10.241.32.16:3000/netsage-bumpchart-panel-1.1.1.zip;netsage-bumpchart-panel
        

        Пример:

        customPlugins:
        - agenty-flowcharting-panel
        - vertamedia-clickhouse-datasource
        
      • settings.grafana.useDarkTheme
        булевый

        Использование по умолчанию пользовательской темной темы.

        По умолчанию: false

        Пример:

        useDarkTheme: true
        
    • settings.highAvailability
      булевый

      Ручное управление режимом отказоустойчивости.

      По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.

      Пример:

      highAvailability: true
      
    • settings.https
      объект

      Тип сертификата, используемого для Grafana/Prometheus.

      При использовании этого параметра полностью переопределяются глобальные настройки global.modules.https.

      Примеры:

      https:
        mode: CustomCertificate
        customCertificate:
          secretName: foobar
      
      https:
        mode: CertManager
        certManager:
          clusterIssuerName: letsencrypt
      
      • settings.https.certManager
        объект
        • settings.https.certManager.clusterIssuerName
          строка

          ClusterIssuer, используемый для Grafana/Prometheus.

          Доступны letsencrypt, letsencrypt-staging, selfsigned, но вы можете определить свои.

          По умолчанию: "letsencrypt"

      • settings.https.customCertificate
        объект
        • settings.https.customCertificate.secretName
          строка

          Имя Secret’а в namespace d8-system, который будет использоваться для Grafana/Prometheus.

          Secret должен быть в формате kubernetes.io/tls.

          По умолчанию: "false"

      • settings.https.mode
        строка

        Режим работы HTTPS:

        • Disabled — Grafana/Prometheus будут работать только по HTTP;
        • CertManager — Grafana/Prometheus будут работать по HTTPS и заказывать сертификат с помощью ClusterIssuer, заданного в параметре certManager.clusterIssuerName.
        • CustomCertificate — Grafana/Prometheus будут работать по HTTPS, используя сертификат из namespace d8-system.
        • OnlyInURI — Grafana/Prometheus будут работать по HTTP (подразумевая, что перед ними стоит внешний балансировщик, который терминирует HTTPS) и все ссылки в user-authn будут генерироваться с HTTPS-схемой. Балансировщик должен обеспечивать перенаправление с HTTP на HTTPS.

        По умолчанию: "Disabled"

        Допустимые значения: Disabled, CertManager, CustomCertificate, OnlyInURI

    • settings.ingressClass
      строка

      Класс Ingress-контроллера, который используется для Grafana/Prometheus.

      Опциональный параметр, по умолчанию используется глобальное значение modules.ingressClass.

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

      Пример:

      ingressClass: public
      
    • settings.longtermMaxDiskSizeGigabytes
      Параметр устарел
      целочисленный

      Устарел и будет удален. Ни на что не влияет. Максимальный размер в гигабайтах, до которого автоматически может ресайзиться диск Longterm Prometheus.

    • settings.longtermNodeSelector
      объект

      Структура, аналогичная spec.nodeSelector пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

      Пример:

      longtermNodeSelector:
        disktype: ssd
      
    • settings.longtermRetentionDays
      целочисленный

      Сколько дней хранить данные в Longterm Prometheus. Если указать 0, Longterm Prometheus не будет запущен в кластере.

      По умолчанию: 1095

    • settings.longtermScrapeInterval
      строка

      Как часто Longterm Prometheus должен собирать себе «снимок» данных из основного Prometheus.

      По умолчанию: "5m"

    • settings.longtermStorageClass
      строка

      Имя StorageClass’а, который предполагается использовать для Longterm Prometheus.

      Если не указано, используется StorageClass существующей PVC Longterm Prometheus, а если PVC пока нет, используется или глобальный StorageClass, или global.discovery.defaultStorageClass, а если и их нет, данные сохраняются в emptyDir.

      global.discovery.defaultStorageClass применяется только при включении модуля, смена StorageClass по умолчанию в кластере не приведет к перезаказу диска.

      Внимание. При указании этой опции в значение, отличное от текущего (из существующей PVC), диск Longterm Prometheus будет перезаказан, а все данные удалены.

      Пример:

      longtermStorageClass: ceph-ssd
      
    • settings.longtermTolerations
      массив объектов

      Структура, аналогичная spec.tolerations пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

      Пример:

      longtermTolerations:
      - key: key1
        operator: Equal
        value: value1
        effect: NoSchedule
      
      • settings.longtermTolerations.effect
        строка
      • settings.longtermTolerations.key
        строка
      • settings.longtermTolerations.operator
        строка
      • settings.longtermTolerations.tolerationSeconds
        целочисленный
      • settings.longtermTolerations.value
        строка
    • settings.mainMaxDiskSizeGigabytes
      Параметр устарел
      целочисленный

      Устарел и будет удален. Ни на что не влияет. Максимальный размер в гигабайтах, до которого автоматически может ресайзиться диск Prometheus.

    • settings.nodeSelector
      объект

      Структура, аналогичная spec.nodeSelector пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

      Пример:

      nodeSelector:
        disktype: ssd
      
    • settings.retentionDays
      целочисленный

      Сколько дней хранить данные.

      По умолчанию: 15

    • settings.scrapeInterval
      строка

      Как часто Prometheus должен собирать метрики с target’ов.

      Evaluation Interval всегда равен scrapeInterval.

      По умолчанию: "30s"

      Шаблон: ^([\d]*y)?([\d]*w)?([\d]*d)?([\d]*h)?([\d]*m)?([\d]*s)?$

    • settings.storageClass
      строка

      Имя StorageClass’а, который предполагается использовать.

      Если не указано, используется StorageClass существующей PVC Prometheus, а если PVC пока нет, используется или глобальный StorageClass, или global.discovery.defaultStorageClass, а если и их нет, данные сохраняются в emptyDir.

      global.discovery.defaultStorageClass применяется только при включении модуля, смена StorageClass по умолчанию в кластере не приведет к перезаказу диска.

      false — принудительное использование emptyDir. Удалить старый PVC и рестартануть под придется вручную.

      Внимание. При переносе Prometheus с локальным хранилищем на другие узлы, поды зависнут в состоянии Pending. В этом случае будет необходимо сохранить базу данных Prometheus, удалить старые PVC и перезапустить под вручную. Под локальным хранилищем подразумевается StorageClass, связанный не с сетевым хранилищем, а с локальным томом на узле (например, StorageClass, создаваемый модулем local-path-provisioner).

      Внимание. При указании этой опции в значение, отличное от текущего (из существующей PVC), диск Prometheus будет перезаказан, а все данные удалены.

      Примеры:

      storageClass: ceph-ssd
      
      storageClass: 'false'
      
    • settings.tolerations
      массив объектов

      Структура, аналогичная spec.tolerations пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

      Пример:

      tolerations:
      - key: key1
        operator: Equal
        value: value1
        effect: NoSchedule
      
      • settings.tolerations.effect
        строка
      • settings.tolerations.key
        строка
      • settings.tolerations.operator
        строка
      • settings.tolerations.tolerationSeconds
        целочисленный
      • settings.tolerations.value
        строка
    • settings.vpa
      объект

      Настройки VPA для подов.

      По умолчанию: {"updateMode":"Initial"}

      Примеры:

      vpa:
        updateMode: Initial
        longtermMaxCPU: '1'
        longtermMaxMemory: 1500Mi
        maxCPU: 1000m
        maxMemory: 1500Mi
      
      vpa:
        updateMode: 'Off'
      
      • settings.vpa.longtermMaxCPU

        Максимальное значение, которое может выставить VPA для запроса CPU (CPU requests) для подов Longterm Prometheus.

        Значение по умолчанию подбирается автоматически, исходя из максимального количества подов, которое можно создать в кластере при текущем количестве узлов и их настройках. Подробнее см. хук detect_vpa_max модуля.

        Пример:

        longtermMaxCPU: 0.1
        
      • settings.vpa.longtermMaxMemory

        Максимальное значение, которое может выставить VPA для запроса к памяти (memory requests) для подов Longterm Prometheus.

        Значение по умолчанию подбирается автоматически, исходя из максимального количества подов, которое можно создать в кластере при текущем количестве узлов и их настройках. Подробнее см. хук detect_vpa_max модуля.

        Пример:

        longtermMaxMemory: 4Mi
        
      • settings.vpa.maxCPU

        Максимальное значение, которое может выставить VPA для запроса CPU (CPU requests) для подов основного Prometheus.

        Значение по умолчанию подбирается автоматически, исходя из максимального количества подов, которое можно создать в кластере при текущем количестве узлов и их настройках. Подробнее см. хук detect_vpa_max модуля.

        Пример:

        maxCPU: '3'
        
      • settings.vpa.maxMemory

        Максимальное значение, которое может выставить VPA для запроса к памяти (memory requests) для подов основного Prometheus..

        Значение по умолчанию подбирается автоматически, исходя из максимального количества подов, которое можно создать в кластере при текущем количестве узлов и их настройках. Подробнее см. хук detect_vpa_max модуля.

        Пример:

        maxMemory: 3Mi
        
      • settings.vpa.updateMode
        строка

        Режим работы VPA.

        По умолчанию: "Initial"

        Допустимые значения: Initial, Auto, Off

Аутентификация

По умолчанию используется модуль user-authn. Также можно настроить аутентификацию через externalAuthentication (см. ниже). Если эти варианты отключены, модуль включит basic auth со сгенерированным паролем и пользователем admin.

Посмотреть сгенерированный пароль можно командой:

kubectl -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module values prometheus -o json | jq '.internal.auth.password'

Чтобы сгенерировать новый пароль, нужно удалить Secret:

kubectl -n d8-monitoring delete secret/basic-auth

Внимание! Параметр auth.password больше не поддерживается.

Примечание

  • retentionSize для main и longterm рассчитывается автоматически, возможности задать значение нет!
    • Алгоритм расчета:
      • pvc_size * 0.85 — если PVC существует;
      • 10 GiB — если PVC нет и StorageClass поддерживает ресайз;
      • 25 GiB — если PVC нет и StorageClass не поддерживает ресайз.
    • Если используется local-storage и требуется изменить retentionSize, необходимо вручную изменить размер PV и PVC в нужную сторону. Внимание! Для расчета берется значение из .status.capacity.storage PVC, поскольку оно отражает реальный размер PV в случае ручного ресайза.
  • 40 GiB — размер PersistentVolumeClaim создаваемого по умолчанию.
  • Размер дисков Prometheus можно изменить стандартным для Kubernetes способом (если в StorageClass это разрешено), отредактировав в PersistentVolumeClaim поле .spec.resources.requests.storage.