Ответ
В DevOps для мониторинга внешних ресурсов (сторонние API, CDN, DNS-провайдеры) мы используем специализированные инструменты, а не разовые команды. Вот стек и подход.
1. Использование Prometheus Blackbox Exporter (стандарт для мониторинга изнутри сети): Blackbox Exporter — это специальный прокми-экспортер, который «звонит» наружу и возвращает метрики.
- Конфигурация (
blackbox.yml): Определяем модули проверок.modules: http_external_2xx: prober: http timeout: 10s http: valid_status_codes: [200] fail_if_ssl: false fail_if_not_ssl: false tcp_external: prober: tcp tcp: preferred_ip_protocol: "ip4" dns_external: prober: dns dns: query_name: "example.com" query_type: "A" valid_rcodes: [NOERROR] - Задачи в Prometheus (
prometheus.yml):scrape_configs: - job_name: 'blackbox-external' metrics_path: /probe params: module: [http_external_2xx] static_configs: - targets: - https://api.external-service.com/health - https://cdn.provider.com/ relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115 # Адрес экспортераТеперь в Prometheus есть метрика
probe_success{instance="https://api.external-service.com/health"}, где1— доступно,0— нет.
2. Настройка алертов в Alertmanager: Создаем правило алерта, если сервис недоступен 2 минуты.
groups:
- name: external-services.rules
rules:
- alert: ExternalServiceDown
expr: probe_success{job="blackbox-external"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: "External service {{ $labels.instance }} is down"
description: "The external service {{ $labels.instance }} has been unreachable for more than 2 minutes."
3. Синтетический мониторинг извне (Grafana Synthetic Monitoring / Checkmk): Чтобы проверить доступность так, как ее видят конечные пользователи, настраиваю проверки из нескольких точек мира (AWS regions, GCP zones). Это помогает обнаружить проблемы с конкретным ISP или регионом.
4. Резервные проверки через простые скрипты:
Для ad-hoc проверок или в скриптах деплоя использую curl с таймаутами и обработкой ошибок:
if ! curl -sSf --max-time 10 https://critical-dependency.com/health > /dev/null; then
echo "CRITICAL: External dependency is down. Aborting deployment."
exit 1
fi