Практика Руководство

Внешние проверки игровых серверов в Prometheus с Blackbox Exporter: мониторинг TCP, HTTPS и задержки

Внешние синтетические проверки игровых серверов в Prometheus через Blackbox Exporter: мониторинг TCP-сокетов, валидация веб-панелей HTTPS, замер latency и настройка relabel_configs.

Внешние проверки игровых серверов в Prometheus с Blackbox Exporter: мониторинг TCP, HTTPS и задержки

Традиционный мониторинг игровых серверов с помощью node_exporter отслеживает утилизацию процессора, выделение оперативной памяти и нагрузку на дисковые накопители. Однако сервер с идеальными показателями белого ящика (whitebox metrics) может быть абсолютно недоступен для игроков: сетевой сокет игры завис в дедлоке, локальный фаервол отбросил входящие пакеты после обновления правил, или на маршруте возникла критическая потеря пакетов. Для точного контроля реальной доступности инфраструктуры применяется внешний синтетический мониторинг через Prometheus Blackbox Exporter.

В этом практическом руководстве мы разберём установку Blackbox Exporter, настройку модулей зондирования TCP-сокетов и веб-панелей, а также конфигурацию перенаправления целевых адресов (relabeling) в Prometheus.

Белый ящик против чёрного: почему метрик хоста недостаточно для игровых серверов#

Игровой процесс — это высоконагруженное приложение реального времени, критически зависящее от своевременной обработки сетевых дейтаграмм и пакетов.

Разница между подходами очевидна:

  • Whitebox (внутренний мониторинг): опрашивает агент внутри операционной системы (node_exporter, Java JVM экспортер). Показывает, сколько ресурсов потребляет процесс java или valheim_server.
  • Blackbox (внешний мониторинг): отправляет реальные сетевые запросы снаружи хоста, измеряя время отклика сокета (TCP handshake), валидность SSL-сертификатов веб-панелей управления и доступность сетевого периметра.

Установите Blackbox Exporter в операционной системе Ubuntu/Debian:

bash
sudo apt-get update && sudo apt-get install -y prometheus-blackbox-exporter
sudo systemctl enable --now prometheus-blackbox-exporter

По умолчанию служба запускается на порту 9115 и ожидает указания целевых зондов через параметры URL.

Настройка модулей TCP и HTTPS в файле blackbox.yml#

Конфигурационный файл /etc/prometheus/blackbox.yml задаёт правила поведения для различных протоколов. Откройте файл и настройте модули для проверки игровых портов (Minecraft, Factorio RCON, Terraria) и веб-интерфейсов управления:

yaml
modules:
  tcp_connect:
    prober: tcp
    timeout: 5s
  http_2xx:
    prober: http
    timeout: 5s
    http:
      valid_status_codes: [200, 301, 302]
      method: GET
      fail_if_ssl: false
      fail_if_not_ssl: false
  icmp_ping:
    prober: icmp
    timeout: 3s

Перезапустите экспортер для применения модулей:

bash
sudo systemctl restart prometheus-blackbox-exporter

Модуль tcp_connect выполняет полноценное трехстороннее рукопожатие TCP SYN -> SYN/ACK -> ACK. Если игровой демон упал или заблокирован фаерволом, зонд немедленно фиксирует отказ соединения.

Интеграция Blackbox Exporter в конфигурацию Prometheus#

Чтобы Prometheus опрашивал удалённые игровые узлы через Blackbox Exporter, используется специальный механизм подмены адреса relabel_configs. Добавьте задание сбора метрик в /etc/prometheus/prometheus.yml:

yaml
scrape_configs:
  - job_name: 'game_servers_blackbox_tcp'
    metrics_path: /probe
    params:
      module: [tcp_connect]
    static_configs:
      - targets:
          - '198.51.100.10:25565'  # Minecraft Java
          - '198.51.100.10:25575'  # Minecraft RCON
          - '198.51.100.20:7777'   # Terraria
    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:

bash
curl -X POST http://localhost:9090/-/reload

Prometheus обращается к локальному экспортеру 127.0.0.1:9115, передавая целевой IP-адрес игрового сервера в URL-параметре target. В результирующей базе временных рядов метрика probe_success сохраняется с понятным лейблом instance="198.51.100.10:25565".

Настройка правил оповещения и проверка доступности#

Проверьте работу зонда вручную из терминала:

bash
curl -s "http://127.0.0.1:9115/probe?target=198.51.100.10:25565&module=tcp_connect" | grep -E "probe_success|probe_duration_seconds"

Значение probe_success 1 подтверждает, что игровой порт отвечает на входящие сетевые запросы. Создайте правило оповещения в /etc/prometheus/alert_rules.yml:

yaml
groups:
  - name: game_server_alerts
    rules:
      - alert: GameServerPortUnreachable
        expr: probe_success{job="game_servers_blackbox_tcp"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Game server socket {{ $labels.instance }} unreachable"
          description: "Blackbox Exporter has failed to establish a TCP connection for over 2 minutes."

Благодаря внешним зондам дежурный администратор получает уведомление об аварии ещё до того, как игроки начнут массово жаловаться в сообществе на разрыв связи.

Если вы хотите развернуть отказоустойчивые игровые кластеры с предустановленным мониторингом Prometheus, автоматическими проверками сокетов и мгновенной реакцией на сбои, надёжный хостинг игровых серверов обеспечивает готовую инфраструктуру с круглосуточным контролем сетевых портов.

Источники#