Управление Probe

Содержание

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

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

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

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” означает, что целевой адрес элемента blackbox мониторинга недоступен.

      • 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  # Без отката на "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