Управление Probe
Содержание
Обзор функции
Функция probe платформы реализована на основе Blackbox Exporter, позволяя пользователям выполнять проверку сети через ICMP, TCP или HTTP для быстрого выявления сбоев, происходящих на платформе.
В отличие от систем белого ящика (white-box), которые опираются на различные метрики мониторинга, уже доступные на платформе, мониторинг черного ящика (blackbox) фокусируется на результатах. Когда мониторинг белого ящика не может охватить все факторы, влияющие на доступность сервиса, мониторинг черного ящика может быстро обнаружить сбои и выдать оповещения на основе этих сбоев. Например, если конечная точка API работает ненормально, мониторинг черного ящика может оперативно выявить такие проблемы для пользователей.
WARNING
Функция probe не поддерживает использование ICMP для обнаружения IPv6-адресов на узлах с версиями ядра 3.10 и ниже. Для использования данного сценария необходимо обновить версию ядра на узле до 3.11 или выше.
Мониторинг Blackbox
Для создания элемента мониторинга blackbox вы можете выбрать метод проверки ICMP, TCP или HTTP для периодического опроса указанного целевого адреса.
Предварительные требования
Компоненты мониторинга должны быть установлены в кластере и функционировать корректно.
Порядок действий
-
В левой навигационной панели нажмите Operations Center > Monitoring > Blackbox Monitoring.
Совет: Мониторинг blackbox является функцией на уровне кластера. Для переключения между кластерами используйте верхнюю панель навигации.
-
Нажмите Create Blackbox Monitoring Item.
-
Настройте соответствующие параметры согласно следующим инструкциям.
Параметр | Описание |
---|
Метод проверки | 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/ . |
-
Нажмите Create.
После успешного создания вы можете в реальном времени просматривать последние результаты проверки на странице списка, а на основе элементов мониторинга blackbox создавать политики оповещений. При обнаружении сбоя автоматически сработает оповещение для уведомления ответственных лиц о необходимости устранения.
WARNING
После успешного создания элементов мониторинга blackbox системе требуется около 5 минут для синхронизации конфигурации. В течение этого времени проверки не выполняются, и результаты проверки недоступны для просмотра.
Оповещения Blackbox
Предварительные требования
-
Компоненты мониторинга должны быть установлены в кластере и функционировать корректно.
-
Элемент мониторинга blackbox должен быть успешно создан, и система должна завершить синхронизацию конфигурации, чтобы результаты проверки были видны на странице мониторинга blackbox.
Порядок действий
-
В левой навигационной панели нажмите Operations Center > Alerts > Alert Policies.
Совет: Политики оповещений являются функцией на уровне кластера. Для переключения между кластерами используйте верхнюю панель навигации. Убедитесь, что вы переключились на кластер, в котором был настроен элемент мониторинга blackbox.
-
Нажмите Create Alert Policy.
-
Настройте соответствующие параметры согласно следующим инструкциям; для получения дополнительной информации о параметрах смотрите Создание политик оповещений.
- Нажмите 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.
Порядок действий
-
Обновите конфигурационный файл мониторинга 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 смотрите в Справочной информации.
-
Активируйте конфигурацию одним из следующих способов.
-
Перезапустите компонент Blackbox Exporter cpaas-monitor-prometheus-blackbox-exporter, удалив его Pod.
-
Выполните команду для вызова API перезагрузки и обновления конфигурационного файла:
curl -X POST -v <Pod IP>:9115/-/reload
Создание элементов мониторинга Blackbox и оповещений через CLI
Предварительные требования
- Политики уведомлений должны быть настроены (если требуется автоматическая отправка оповещений).
- В целевом кластере должны быть установлены компоненты мониторинга.
Порядок действий
-
Создайте новый YAML-файл конфигурации с именем example-probe.yaml
.
-
Добавьте ресурс 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
-
Создайте новый YAML-файл конфигурации с именем example-alerting-rule.yaml
.
-
Добавьте ресурс 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