Что измерять
Для большинства сервисов достаточно четырёх групп сигналов:
- Доступность: отвечает ли сервис на проверку.
- Задержка: за какое время приходит ответ.
- Ошибки: доля неуспешных ответов.
- Насыщение: загрузка процессора, памяти, диска и сети.
Типы проверок
| Проверка | Что показывает | Пример |
|---|---|---|
| ICMP | Достижимость узла | ping -c 4 example.org |
| TCP | Открыт ли порт | nc -vz example.org 443 |
| HTTP(S) | Код ответа и время | curl -sS -o /dev/null -w "%{http_code} %{time_total}\n" https://example.org |
| DNS | Корректность разрешения | dig example.org +short |
| TLS | Срок действия сертификата | openssl s_client -connect example.org:443 -servername example.org |
Пример: blackbox_exporter и Prometheus
Один из распространённых способов организовать внешние проверки — связка Prometheus и blackbox_exporter. Сначала описываем модуль проверки:
modules:
http_2xx:
prober: http
timeout: 5s
http:
method: GET
Файл blackbox.yml.
Затем подключаем его в Prometheus:
scrape_configs:
- job_name: blackbox-http
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets: ["https://example.org"]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
Фрагмент prometheus.yml. Адрес 127.0.0.1:9115 — где запущен blackbox_exporter.
Оповещения
Оповещение должно требовать действия. Если на него нечего ответить, его лучше убрать или превратить в график.
groups:
- name: availability
rules:
- alert: ProbeFailed
expr: probe_success == 0
for: 5m
- alert: CertificateExpiresSoon
expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 14
for: 1h
Быстрая диагностика
- Проверьте имя:
dig example.org. - Проверьте путь до узла:
mtr -rw example.org. - Проверьте порт и сертификат:
openssl s_client. - Проверьте сам сервис: журналы и
systemctl status.
Совет. Меняйте по одному параметру за раз и записывайте, что проверили: так диагностика не превращается в угадывание.