Выделенный сервер 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, который не требует передачи учётных данных:
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"}}'
Сервер возвращает подтверждение жизнеспособности демона:
{
"data": {
"health": "healthy",
"serverCustomData": ""
}
}
Статус healthy свидетельствует о том, что веб-сервер внутри процесса Satisfactory активен и готов принимать команды.
Аутентификация администратора и генерация Bearer-токена#
Хотя HealthCheck подтверждает запуск процесса, он не предоставляет детальных сведений об игровом процессе. Доступ к операционным метрикам (QueryServerState, SaveGame, Shutdown) строго ограничен и требует авторизации по протоколу Bearer.
Для получения токена аутентификации выполняется функция PasswordLogin с указанием административного пароля сервера, заданного при первичной инициализации:
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:
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'
В ответе сервер возвращает исчерпывающий снимок состояния игровой сессии:
{
"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-сокета:
nc -z -v -u 127.0.0.1 7777
Только одновременное совпадение успешного отклика QueryServerState (с флагом isGameRunning: true) и доступности сетевого UDP-сокета гарантирует полноценную работоспособность сервера для игроков.
Для развёртывания масштабных промышленных комплексов с гарантированным тикрейтом и удобным мониторингом выберите оптимизированный игровой сервер с выделенными ресурсами CPU и поддержкой API.
Источники#
- Официальная документация Satisfactory Dedicated Server API: https://satisfactory.wiki.gg/wiki/Dedicated_servers/HTTPS_API
- Руководство по администрированию серверов Coffee Stain Studios: https://satisfactory.wiki.gg/wiki/Dedicated_servers
- Спецификация форматов JSON API Satisfactory 1.0: https://github.com/CoffeeStainStudios




