Управление 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 для периодического опроса указанного целевого адреса.
Предварительные условия
Компоненты мониторинга должны быть установлены в кластере и функционировать корректно.
Порядок действий
-
В левой навигационной панели нажмите 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 # Без отката на "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