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

Модуль включен по умолчанию в наборах модулей: 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 deploy/deckhouse -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 deploy/deckhouse -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

  • authобъект

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

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

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

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

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

    • auth.externalAuthenticationобъект

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

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

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

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

        Пример:

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

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

        Пример:

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

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

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

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

      Пример:

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

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

      Пример:

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

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

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

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

    Пример:

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

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

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

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

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

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

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

      Пример:

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

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

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

      Пример:

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

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

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

    Пример:

    highAvailability: true
    
  • httpsобъект

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

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

    Примеры:

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

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

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

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

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

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

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

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

    • 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

  • 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
    
  • longtermMaxDiskSizeGigabytesПараметр устарелцелочисленный

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

  • longtermNodeSelectorобъект

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

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

    Пример:

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

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

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

  • longtermScrapeIntervalстрока

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

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

  • longtermStorageClassстрока

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

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

    ОСТОРОЖНО! При указании этой опции в значение, отличное от текущего (из существующей PVC), диск Longterm Prometheus будет перезаказан, а все данные удалены.

    Пример:

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

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

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

    Пример:

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

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

  • nodeSelectorобъект

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

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

    Пример:

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

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

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

  • scrapeIntervalстрока

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

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

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

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

  • storageClassстрока

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

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

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

    ОСТОРОЖНО! При указании этой опции в значение, отличное от текущего (из существующей PVC), диск Prometheus будет перезаказан, а все данные удалены.

    Примеры:

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

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

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

    Пример:

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

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

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

    Примеры:

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

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

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

      Пример:

      longtermMaxCPU: 0.1
      
    • vpa.longtermMaxMemory

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

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

      Пример:

      longtermMaxMemory: 4Mi
      
    • vpa.maxCPU

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

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

      Пример:

      maxCPU: '3'
      
    • vpa.maxMemory

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

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

      Пример:

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

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

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

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

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

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

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

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

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

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

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

Примечание

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