• Русский
  • Управление 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