Управление Probe

Содержание

Обзор функции

Функция probe платформы реализована на основе Blackbox Exporter, позволяя пользователям выполнять проверку сети через ICMP, TCP или HTTP для быстрого выявления сбоев, происходящих на платформе.

В отличие от систем белого ящика (white-box), которые опираются на различные метрики мониторинга, уже доступные на платформе, мониторинг черного ящика (blackbox) фокусируется на результатах. Когда мониторинг белого ящика не может охватить все факторы, влияющие на доступность сервиса, мониторинг черного ящика может быстро обнаружить сбои и выдать оповещения на основе этих сбоев. Например, если конечная точка API работает ненормально, мониторинг черного ящика может оперативно выявить такие проблемы для пользователей.

WARNING

Функция probe не поддерживает использование ICMP для обнаружения IPv6-адресов на узлах с версиями ядра 3.10 и ниже. Для использования данного сценария необходимо обновить версию ядра на узле до 3.11 или выше.

Мониторинг Blackbox

Для создания элемента мониторинга blackbox вы можете выбрать метод проверки ICMP, TCP или HTTP для периодического опроса указанного целевого адреса.

Предварительные требования

Компоненты мониторинга должны быть установлены в кластере и функционировать корректно.

Порядок действий

  1. В левой навигационной панели нажмите Operations Center > Monitoring > Blackbox Monitoring.

    Совет: Мониторинг blackbox является функцией на уровне кластера. Для переключения между кластерами используйте верхнюю панель навигации.

  2. Нажмите Create Blackbox Monitoring Item.

  3. Настройте соответствующие параметры согласно следующим инструкциям.

    ПараметрОписание
    Метод проверкиICMP: Проверяет доступность сервера путем ping доменного имени или IP-адреса, введенного в поле Target Address.
    TCP: Проверяет бизнес-порт хоста, слушая <domain:port> или <IP:port>, указанный в Target Address.
    HTTP: Проверяет URL, введенный в Target Address, для проверки доступности веб-сайта.
    Совет: Метод HTTP по умолчанию поддерживает только GET-запросы; для POST-запросов смотрите Настройка модуля мониторинга BlackboxExporter.
    Интервал проверкиИнтервал времени между проверками.
    Целевой адресЦелевой адрес для проверки, максимум 128 символов.
    Формат ввода зависит от метода проверки:
    ICMP: доменное имя или IP-адрес, например, 10.165.94.31.
    TCP: <domain:port> или <IP:port>, например, 172.19.155.133:8765.
    HTTP: URL, начинающийся с http или https, например, http://alauda.cn/.
  4. Нажмите Create.

    После успешного создания вы можете в реальном времени просматривать последние результаты проверки на странице списка, а на основе элементов мониторинга blackbox создавать политики оповещений. При обнаружении сбоя автоматически сработает оповещение для уведомления ответственных лиц о необходимости устранения.

WARNING

После успешного создания элементов мониторинга blackbox системе требуется около 5 минут для синхронизации конфигурации. В течение этого времени проверки не выполняются, и результаты проверки недоступны для просмотра.

Оповещения Blackbox

Предварительные требования

  • Компоненты мониторинга должны быть установлены в кластере и функционировать корректно.

  • Элемент мониторинга blackbox должен быть успешно создан, и система должна завершить синхронизацию конфигурации, чтобы результаты проверки были видны на странице мониторинга blackbox.

Порядок действий

  1. В левой навигационной панели нажмите Operations Center > Alerts > Alert Policies.

    Совет: Политики оповещений являются функцией на уровне кластера. Для переключения между кластерами используйте верхнюю панель навигации. Убедитесь, что вы переключились на кластер, в котором был настроен элемент мониторинга blackbox.

  2. Нажмите Create Alert Policy.

  3. Настройте соответствующие параметры согласно следующим инструкциям; для получения дополнительной информации о параметрах смотрите Создание политик оповещений.

  • Тип оповещения: выберите Resource Alert.

  • Тип ресурса: выберите Cluster.

  • Нажмите Add Alert Rule.

    • Тип оповещения: выберите Blackbox Alert.

    • Элемент мониторинга Blackbox: выберите нужный элемент мониторинга blackbox.

    • Имя метрики: выберите метрику, по которой хотите мониторить и получать оповещения. В настоящее время платформа поддерживает метрики Connectivity и HTTP Status Code.

      • Connectivity: доступна для всех элементов мониторинга blackbox, условие срабатывания “!= 1” означает, что целевой адрес элемента мониторинга недоступен.

      • HTTP Status Code: доступна, если метод проверки выбранного элемента мониторинга blackbox — HTTP. В качестве значения условия срабатывания можно ввести трехзначное положительное число, например, условие “> 299” означает, что оповещения срабатывают при кодах ответа 3XX, 4XX или 5XX.

    • Политика уведомлений: выберите заранее настроенную политику.

    • Нажмите Add.

  1. Нажмите Create. После отправки политика оповещений появится в списке политик.

Настройка модуля мониторинга BlackboxExporter

Вы также можете расширить функциональность мониторинга blackbox, добавив кастомные модули мониторинга в конфигурационный файл BlackboxExporter. Например, добавив модуль http_post_2xx в конфигурационный файл, при выборе метода проверки blackbox как HTTP будет возможна проверка статуса POST-запросов.

Конфигурационный файл мониторинга blackbox находится в namespace, где установлен компонент Prometheus кластера, по умолчанию называется cpaas-monitor-prometheus-blackbox-exporter. Имя можно изменить в зависимости от фактического названия.

TIP

Этот конфигурационный файл является ресурсом ConfigMap, относящимся к namespace, который можно быстро просмотреть и обновить через функцию управления платформы Cluster Management > Resource Management.

Порядок действий

  1. Обновите конфигурационный файл мониторинга blackbox, добавив кастомные модули мониторинга в ключ modules.

    В качестве примера добавления модуля http_post_2xx:

    blackbox.yaml: |
      modules:
        http_post_2xx:                    # Модуль проверки HTTP POST
          prober: http
          timeout: 5s
          http:
            method: POST                 # Метод запроса для проверки
            headers:
              Content-Type: application/json
            body: '{}'                   # Тело запроса, отправляемое при проверке

    Полные примеры YAML конфигурации мониторинга blackbox смотрите в Справочной информации.

  2. Активируйте конфигурацию одним из следующих способов.

    • Перезапустите компонент Blackbox Exporter cpaas-monitor-prometheus-blackbox-exporter, удалив его Pod.

    • Выполните команду для вызова API перезагрузки и обновления конфигурационного файла:

      curl -X POST -v <Pod IP>:9115/-/reload

Создание элементов мониторинга Blackbox и оповещений через CLI

Предварительные требования

  • Политики уведомлений должны быть настроены (если требуется автоматическая отправка оповещений).
  • В целевом кластере должны быть установлены компоненты мониторинга.

Порядок действий

  1. Создайте новый YAML-файл конфигурации с именем example-probe.yaml.

  2. Добавьте ресурс PrometheusRule в YAML-файл и отправьте его. В следующем примере создается новая политика оповещений с именем prometheus-liveness:

    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      annotations:
        cpaas.io/creator: jhshi@alauda.io # Создатель элемента probe
        cpaas.io/updated-at: '2021-05-25T08:08:45Z' # Время последнего обновления элемента probe
        cpaas.io/display-name: 'Prometheus prober' # Описание элемента probe
      creationTimestamp: '2021-05-10T02:04:33Z' # Время создания элемента probe
      labels:
        prometheus: kube-prometheus # Значение метки, используемой для имени prometheus
      name: prometheus-liveness # Имя элемента probe
      namespace: cpaas-system # Namespace, используемый для namespace prometheus
    spec:
      jobName: prometheus-liveness # Имя элемента probe
      prober:
        url: cpaas-monitor-prometheus-blackbox-exporter:9115 # URL для метрик Blackbox, полученный из features
      module: http_2xx # Имя модуля элемента probe
      targets:
        staticConfig:
          static:
            - http://www.prometheus.io # Целевой адрес элемента probe
          labels:
            module: http_2xx # Имя модуля элемента probe
            prober: http # Метод проверки элемента probe
      interval: 30s # Интервал проверки элемента probe
      scrapeTimeout: 10s
  3. Создайте новый YAML-файл конфигурации с именем example-alerting-rule.yaml.

  4. Добавьте ресурс PrometheusRule в YAML-файл и отправьте его. В следующем примере создается новая политика оповещений с именем policy:

    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      annotations:
        alert.cpaas.io/cluster: global # Имя кластера, в котором находится оповещение
        alert.cpaas.io/kind: Cluster # Тип ресурса
        alert.cpaas.io/name: global # Имя кластера, в котором находится элемент мониторинга blackbox
        alert.cpaas.io/namespace: cpaas-system # Namespace, используемый для namespace prometheus, оставьте по умолчанию
        alert.cpaas.io/notifications: '["test"]'
        alert.cpaas.io/repeat-config: '{"Critical":"never","High":"5m","Medium":"5m","Low":"5m"}'
        alert.cpaas.io/rules.description: '{}'
        alert.cpaas.io/rules.disabled: '[]'
        alert.cpaas.io/subkind: ''
        cpaas.io/description: ''
        cpaas.io/display-name: policy # Отображаемое имя политики оповещений
      labels:
        alert.cpaas.io/owner: System
        alert.cpaas.io/project: cpaas-system
        cpaas.io/source: Platform
        prometheus: kube-prometheus
        rule.cpaas.io/cluster: global
        rule.cpaas.io/name: policy
        rule.cpaas.io/namespace: cpaas-system
      name: policy
      namespace: cpaas-system
    spec:
      groups:
        - name: general # Имя группы правил оповещений
          rules:
            - alert: cluster.blackbox.probe.success-y97ah-9833444d918cab96c43e9ab6efc172cf
              annotations:
                alert_current_value: '{{ $value }}' # Текущее значение для уведомления, оставьте по умолчанию
              expr:
                max by (job, instance) (probe_success{job=~"test",
                instance=~"https://demo.at-servicecenter.com/"})!=1
                # Сценарий оповещения по доступности, обязательно измените имя элемента мониторинга blackbox и целевой адрес
              for: 30s # Продолжительность
              labels:
                alert_cluster: global # Имя кластера, в котором находится оповещение
                alert_for: 30s # Продолжительность
                alert_indicator: cluster.blackbox.probe.success # Оставьте без изменений
                alert_indicator_aggregate_range: '0' # Оставьте без изменений
                alert_indicator_blackbox_instance: https://demo.at-servicecenter.com/ # Целевой адрес мониторинга blackbox
                alert_indicator_blackbox_name: test # Имя элемента мониторинга blackbox
                alert_indicator_comparison: '!=' # Оставьте без изменений для оповещений по доступности
                alert_indicator_query: '' # Используется для оповещений по логам, не нужно настраивать
                alert_indicator_threshold: '1' # Пороговое значение правила оповещения, 1 означает доступность, оставьте без изменений
                alert_indicator_unit: '' # Единица измерения метрик правила оповещения
                alert_involved_object_kind: Cluster # Оставьте без изменений для оповещений blackbox
                alert_involved_object_name: global # Кластер, в котором находится элемент мониторинга blackbox
                alert_involved_object_namespace: '' # Namespace объекта, к которому принадлежит правило оповещения
                alert_name: cluster.blackbox.probe.success-y97ah # Имя правила оповещения
                alert_namespace: cpaas-system # Namespace, в котором находится правило оповещения
                alert_project: cpaas-system # Имя проекта объекта, к которому принадлежит правило оповещения
                alert_resource: policy # Имя политики оповещений, в которой находится правило оповещения
                alert_source: Platform # Тип данных правила оповещения: Platform — данные платформы, Business — бизнес-данные
                severity: High # Уровень правила оповещения: Critical — критический, High — высокий, Medium — средний, Low — низкий
            - alert: cluster.blackbox.http.status.code-235el-99b0095b6b6669415043e14ae84f43bc
              annotations:
                alert_current_value: '{{ $value }}'
                alert_notifications: '["message"]'
              expr:
                max by(job, instance) (probe_http_status_code{job=~"test",
                instance=~"https://demo.at-servicecenter.com/"})>200
                # Сценарий оповещения по HTTP статусу, обязательно измените имя элемента мониторинга blackbox и целевой адрес
              for: 30s
              labels:
                alert_cluster: global
                alert_for: 30s
                alert_indicator: cluster.blackbox.http.status.code
                alert_indicator_aggregate_range: '0'
                alert_indicator_blackbox_instance: https://demo.at-servicecenter.com/
                alert_indicator_blackbox_name: test
                alert_indicator_comparison: '>'
                alert_indicator_query: ''
                alert_indicator_threshold: '299' # Пороговое значение для правил оповещений, в сценариях оповещений по HTTP статусу должно быть трехзначное число, например, коды больше 299 (3XX, 4XX, 5XX) означают ошибку
                alert_indicator_unit: ''
                alert_involved_object_kind: Cluster
                alert_involved_object_name: global
                alert_involved_object_namespace: ''
                alert_involved_object_options: Single
                alert_name: cluster.blackbox.http.status.code-235el
                alert_namespace: cpaas-system
                alert_project: cpaas-system
                alert_resource: policy33
                alert_source: Platform
                severity: High

Справочная информация

Полный пример YAML-конфигурационного файла для мониторинга blackbox приведен ниже:

apiVersion: v1
data:
  blackbox.yaml: |
    modules:
      http_2xx_example:               # Пример HTTP проверки
        prober: http
        timeout: 5s                   # Таймаут проверки
        http:
          valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]                   # Версия в возвращаемой информации, обычно по умолчанию
          valid_status_codes: []  # По умолчанию 2xx                       # Диапазон допустимых кодов ответа; если возвращенный код входит в этот диапазон, проверка считается успешной
          method: GET                 # Метод запроса
          headers:                    # Заголовки запроса
            Host: vhost.example.com
            Accept-Language: en-US
            Origin: example.com
          no_follow_redirects: false  # Разрешать ли перенаправления
          fail_if_ssl: false
          fail_if_not_ssl: false
          fail_if_body_matches_regexp:
            - "Could not connect to database"
          fail_if_body_not_matches_regexp:
            - "Download the latest version here"
          fail_if_header_matches: # Проверка отсутствия установки cookies
            - header: Set-Cookie
              allow_missing: true
              regexp: '.*'
          fail_if_header_not_matches:
            - header: Access-Control-Allow-Origin
              regexp: '(\*|example\.com)'
          tls_config:                  # TLS конфигурация для https запросов
            insecure_skip_verify: false
          preferred_ip_protocol: "ip4" # по умолчанию "ip6"                 # Предпочтительная версия IP протокола
          ip_protocol_fallback: false  # Без fallback на "ip6"
      http_post_2xx:                   # Пример HTTP проверки с телом запроса
        prober: http
        timeout: 5s
        http:
          method: POST                 # Метод запроса для проверки
          headers:
            Content-Type: application/json
          body: '{"username":"admin","password":"123456"}'                   # Тело, передаваемое при проверке
      http_basic_auth_example:         # Пример проверки с именем пользователя и паролем
        prober: http
        timeout: 5s
        http:
          method: POST
          headers:
            Host: "login.example.com"
          basic_auth:                  # Имя пользователя и пароль для проверки
            username: "username"
            password: "mysecret"
      http_custom_ca_example:
        prober: http
        http:
          method: GET
          tls_config:                  # Указать корневой сертификат для проверки
            ca_file: "/certs/my_cert.crt"
      http_gzip:
        prober: http
        http:
          method: GET
          compression: gzip            # Метод сжатия при проверке
      http_gzip_with_accept_encoding:
        prober: http
        http:
          method: GET
          compression: gzip
          headers:
            Accept-Encoding: gzip
      tls_connect:                     # Пример TCP проверки
        prober: tcp
        timeout: 5s
        tcp:
          tls: true                    # Использовать ли TLS
      tcp_connect_example:
        prober: tcp
        timeout: 5s
      imap_starttls:                   # Пример настройки проверки для IMAP почтовых серверов
        prober: tcp
        timeout: 5s
        tcp:
          query_response:
            - expect: "OK.*STARTTLS"
            - send: ". STARTTLS"
            - expect: "OK"
            - starttls: true
            - send: ". capability"
            - expect: "CAPABILITY IMAP4rev1"
      smtp_starttls:                   # Пример настройки проверки для SMTP почтовых серверов
        prober: tcp
        timeout: 5s
        tcp:
          query_response:
            - expect: "^220 ([^ ]+) ESMTP (.+)$"
            - send: "EHLO prober\r"
            - expect: "^250-STARTTLS"
            - send: "STARTTLS\r"
            - expect: "^220"
            - starttls: true
            - send: "EHLO prober\r"
            - expect: "^250-AUTH"
            - send: "QUIT\r"
      irc_banner_example:
        prober: tcp
        timeout: 5s
        tcp:
          query_response:
            - send: "NICK prober"
            - send: "USER prober prober prober :prober"
            - expect: "PING :([^ ]+)"
              send: "PONG ${1}"
            - expect: "^:[^ ]+ 001"
      icmp_example:                    # Пример конфигурации для ICMP проверки
        prober: icmp
        timeout: 5s
        icmp:
          preferred_ip_protocol: "ip4"
          source_ip_address: "127.0.0.1"
      dns_udp_example:                 # Пример DNS-запросов с использованием UDP
        prober: dns
        timeout: 5s
        dns:
          query_name: "www.prometheus.io"                 # Доменное имя для разрешения
          query_type: "A"              # Тип, соответствующий доменному имени
          valid_rcodes:
          - NOERROR
          validate_answer_rrs:
            fail_if_matches_regexp:
            - ".*127.0.0.1"
            fail_if_all_match_regexp:
            - ".*127.0.0.1"
            fail_if_not_matches_regexp:
            - "www.prometheus.io.\t300\tIN\tA\t127.0.0.1"
            fail_if_none_matches_regexp:
            - "127.0.0.1"
          validate_authority_rrs:
            fail_if_matches_regexp:
            - ".*127.0.0.1"
          validate_additional_rrs:
            fail_if_matches_regexp:
            - ".*127.0.0.1"
      dns_soa:
        prober: dns
        dns:
          query_name: "prometheus.io"
          query_type: "SOA"
      dns_tcp_example:               # Пример DNS-запросов с использованием TCP
        prober: dns
        dns:
          transport_protocol: "tcp" # по умолчанию "udp"
          preferred_ip_protocol: "ip4" # по умолчанию "ip6"
          query_name: "www.prometheus.io"
kind: ConfigMap
metadata:
  annotations:
    skip-sync: 'true'
  labels:
    app.kubernetes.io/instance: cpaas-monitor
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: prometheus-blackbox-exporter
    helm.sh/chart: prometheus-blackbox-exporter-1.6.0
  name: cpaas-monitor-prometheus-blackbox-exporter
  namespace: cpaas-system