Перейти к содержанию

Как следить за доступностью сервера Valheim через status.json

HTTP status.json существующего контейнера: доступ, error, свежесть отметки времени и UptimeKuma без обещания полной исправности мира.
Версия не проверена

Для уже работающего контейнера community-valheim-tools/valheim-server можно настроить проверку status.json в UptimeKuma. Проверка должна учитывать и отсутствие ошибки, и свежесть данных: старый файл с успешным ответом не доказывает доступность сервера сейчас.

Когда подходит этот способ

Понадобятся существующий сервер в указанном контейнере и отдельный экземпляр UptimeKuma. Источник требует SERVER_PUBLIC=true: закрытый сервер не отвечает на используемые Steam-запросы. Если мир должен оставаться непубличным, не меняйте это правило только ради мониторинга; данный способ может вам не подойти.

Информация
Гайд описывает настройку имеющегося развёртывания. Контейнер, монитор и реальные сетевые проверки здесь не запускались. README не привязан к точному digest образа, а синтаксис запроса следует проверить на вашей версии UptimeKuma.

Включите отдельный status endpoint

Параметр контейнера · Роль по README
Параметр контейнераРоль по README
STATUS_HTTP=trueВключает status HTTP; по умолчанию выключен
STATUS_HTTP_PORTПорт HTTP внутри контейнера, по умолчанию 80
STATUS_HTTP_CONFКонфигурация busybox httpd; по умолчанию /config/httpd.conf
STATUS_HTTP_HTDOCSКаталог status.json; по умолчанию /opt/valheim/htdocs

В конфигурации своего развёртывания включите STATUS_HTTP и обеспечьте доступ UptimeKuma к выбранному TCP-порту. Внутренний порт контейнера и внешний адрес могут различаться: URL монитора должен вести именно к вашему опубликованному status endpoint. В STATUS_HTTP_CONF можно ограничить доступ по IP/подсети или логину и паролю.

Информация
Status HTTP — отдельная функция от SUPERVISOR_HTTP. Supervisor по умолчанию использует порт 9001 и предоставляет управление процессами и XML-RPC API. Не открывайте административный интерфейс вместо read-only status endpoint ради этой проверки.

Прочитайте поля ответа

По README файл /status.json обновляется каждые 10 секунд. При ошибке запроса error содержит строку ошибки, а при успешном ответе — null. last_status_update задаёт время последнего обновления. Остальные поля поступают из публичного query-порта игры, по умолчанию 2457/udp.

Поле · Как интерпретировать
ПолеКак интерпретировать
errornull — запрос не сообщил ошибку; строка — причина отказа запроса
last_status_updateВремя обновления, которое нужно сравнивать с текущим
player_countЧисло игроков в query-ответе, а не доказательство успешной записи мира
players[].nameПустое имя означает отсутствие доступного значения, а не установленную личность игрока

Даты 2021 года, версия игры и число игроков в примере README показывают форму ответа. Не копируйте их как показатели своего сервера. Если HTTP доступен, но отметка времени больше не меняется, данные могли устареть.

Добавьте HTTP(s) - Json Query в UptimeKuma

  1. Создайте монитор типа HTTP(s) - Json Query.
  2. Укажите URL своего status.json, например http://server.example.com:80/status.json, заменив адрес и внешний порт.
  3. Вставьте приведённое ниже выражение автора в Json Query.
  4. Задайте Expected Value равным healthy. Проверьте, что установленная версия UptimeKuma принимает выражение и получает ожидаемые поля.

Выражение из первичного README: ( $now := $toMillis($now()[0]); $lastUpdate := $toMillis(last_status_update); $minutesDiff := ($now - $lastUpdate) / 60000; error = null and $minutesDiff <= 1 ? "healthy" : "unhealthy" )

Ожидаемый результат healthy требует одновременно error=null и возраста отметки не более одной минуты. unhealthy означает, что хотя бы это условие не выполнено. Название healthy здесь — строка результата конкретной проверки, а не гарантия исправности всех функций Valheim.

Проверьте отказ и устаревший ответ

  1. Сопоставьте ответ endpoint с состоянием сервера и убедитесь, что last_status_update движется вперёд.
  2. В согласованное окно обслуживания проверьте реакцию монитора на остановленный сервер: query-ошибка не должна оставаться успешным состоянием.
  3. Отдельно проверьте на тестовом ответе или в проверке выражения старую last_status_update при error=null: одного отсутствия ошибки недостаточно. Не заменяйте ради теста рабочие файлы сервера.
  4. После восстановления дождитесь нового времени и отсутствия ошибки. Разберите сетевую ошибку HTTP, ошибку query и ошибку разбора JSON как разные причины.

Что проверять дополнительно

Публичный query-ответ не подтверждает корректную загрузку нужного мира, сохранения, совместимость модов и возможность входа со всех платформ. Для этих задач нужны отдельные наблюдения: журнал загрузки и записи мира, проверка подключения и нужного игрового действия. Не запускайте восстановление сохранения автоматически из-за единственного неудачного status-запроса.

Информация
Частота опроса UptimeKuma и способ уведомления в источнике для этого примера не заданы. Настройте их под свой режим обслуживания; не выдавайте стандартный интервал обновления status.json за гарантию обнаружения любой игровой проблемы за десять секунд.

Гайд был полезен?