Satisfactory Руководство

Как получать состояние сервера Satisfactory через HTTPS API: эндпоинты, авторизация и метрики

Мониторинг состояния сервера Satisfactory через HTTPS API: эндпоинт HealthCheck, аутентификация PasswordLogin, получение метрик QueryServerState и валидация UDP-порта.

Как получать состояние сервера Satisfactory через HTTPS API: эндпоинты, авторизация и метрики

Выделенный сервер Satisfactory (начиная с релизной ветки версии 1.0) оснащён современным встроенным HTTP-интерфейсом управления — Satisfactory Dedicated Server HTTPS API v1. Этот механизм позволяет системным администраторам и разработчикам дашбордов отказаться от нестабильных кастомных парсеров логов и получать достоверные метрики состояния фабрики напрямую из движка Unreal Engine: количество игроков в сети, текущий тикрейт, название загруженного сохранения, статус автосохранения и фазу технологического прогресса.

Однако при интеграции API в системы автоматического мониторинга (Zabbix, Prometheus, Grafana или кастомные боты) инженеры часто сталкиваются с ошибками рукопожатия TLS, неправильной обработкой уровней привилегий токенов или ложным определением доступности сервера.

Архитектура API, сетевые порты и работа с самоподписанными сертификатами#

Интерфейс Satisfactory Dedicated Server API работает по защищённому протоколу HTTPS и по умолчанию слушает на основном порту сервера (обычно 7777 TCP/UDP). В отличие от классических REST-сервисов с раздельными URL-путями для каждого ресурса, API Satisfactory использует RPC-подобную архитектуру: все запросы отправляются методом POST на единый корневой эндпоинт /api/v1, а конкретное действие задаётся параметром "function" в теле JSON.

По умолчанию сервер генерирует самоподписанный TLS-сертификат при первом запуске. При использовании стандартных утилит командной строки (таких как curl) необходимо явно разрешать небезопасные сертификаты флагом -k (--insecure) либо экспортировать публичный сертификат сервера в доверенное хранилище системы.

Самый простой способ проверить общую отзывчивость демона — отправить базовый запрос HealthCheck, который не требует передачи учётных данных:

bash
curl -k -s -X POST https://127.0.0.1:7777/api/v1 \
  -H "Content-Type: application/json" \
  -d '{"function": "HealthCheck", "data": {"clientCustomData": "monitoring-probe"}}'

Сервер возвращает подтверждение жизнеспособности демона:

json
{
  "data": {
    "health": "healthy",
    "serverCustomData": ""
  }
}

Статус healthy свидетельствует о том, что веб-сервер внутри процесса Satisfactory активен и готов принимать команды.

Аутентификация администратора и генерация Bearer-токена#

Хотя HealthCheck подтверждает запуск процесса, он не предоставляет детальных сведений об игровом процессе. Доступ к операционным метрикам (QueryServerState, SaveGame, Shutdown) строго ограничен и требует авторизации по протоколу Bearer.

Для получения токена аутентификации выполняется функция PasswordLogin с указанием административного пароля сервера, заданного при первичной инициализации:

bash
TOKEN=$(curl -k -s -X POST https://127.0.0.1:7777/api/v1 \
  -H "Content-Type: application/json" \
  -d '{"function": "PasswordLogin", "data": {"minimumPrivilegeLevel": "Administrator", "password": "SuperSecretServerPassword"}}' \
  | jq -r '.data.authenticationToken')
echo "Token length: ${#TOKEN}"

Полученный токен представляет собой криптографически подписанную строку. Его категорически запрещено публиковать в открытых репозиториях или логировать в незашифрованном виде, так как обладатель токена уровня Administrator имеет право скачивать файлы сохранений и инициировать остановку сервера.

Опрос состояния мира: функция QueryServerState#

Имея валидный токен в заголовке Authorization: Bearer <TOKEN>, система мониторинга может регулярно опрашивать состояние сервера с помощью функции QueryServerState:

bash
curl -k -s -X POST https://127.0.0.1:7777/api/v1 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"function": "QueryServerState"}' | jq '.data.serverGameState'

В ответе сервер возвращает исчерпывающий снимок состояния игровой сессии:

json
{
  "activeSessionName": "Apex-Factory-1.0",
  "numConnectedPlayers": 4,
  "playerLimit": 8,
  "techTier": 9,
  "isGameRunning": true,
  "totalGameDuration": 412800,
  "isGamePaused": false,
  "averageTickRate": 30.0,
  "autoLoadSessionName": "Apex-Factory-1.0"
}

Ключевые метрики для мониторинга:

  • isGameRunning — логический флаг, указывающий на то, что карта полностью загружена в память и мир функционирует;
  • averageTickRate — фактическая частота тиков сервера (целевое значение: 30.0). Падение тикрейта ниже 20 указывает на перегрузку процессора сложными фабричными цепочками;
  • numConnectedPlayers — текущее количество строителей на сервере;
  • isGamePaused — флаг паузы (если включена опция остановки времени при отсутствии игроков).

Разделение статуса API и реальной сетевой доступности игры#

Распространённая ошибка системных администраторов — полагаться исключительно на успешный HTTP 200 от /api/v1 при проверке доступности сервера в чек-листах мониторинга.

Веб-сервер Satisfactory работает по протоколу TCP, в то время как весь игровой трафик и синхронизация перемещений осуществляются через UDP. Ситуация, когда фаервол хоста или шлюза пропускает TCP-пакеты на порт 7777, но блокирует UDP-пакеты, приводит к тому, что мониторинг сообщает о «зелёном» статусе сервера, но ни один игрок не может подключиться из клиента игры.

Поэтому комплексный чек доступности должен параллельно проверять открытость UDP-сокета:

bash
nc -z -v -u 127.0.0.1 7777

Только одновременное совпадение успешного отклика QueryServerState (с флагом isGameRunning: true) и доступности сетевого UDP-сокета гарантирует полноценную работоспособность сервера для игроков.

Для развёртывания масштабных промышленных комплексов с гарантированным тикрейтом и удобным мониторингом выберите оптимизированный игровой сервер с выделенными ресурсами CPU и поддержкой API.

Источники#