Как следить за доступностью сервера Valheim через status.json
Для уже работающего контейнера community-valheim-tools/valheim-server можно настроить проверку status.json в UptimeKuma. Проверка должна учитывать и отсутствие ошибки, и свежесть данных: старый файл с успешным ответом не доказывает доступность сервера сейчас.
Когда подходит этот способ
Понадобятся существующий сервер в указанном контейнере и отдельный экземпляр UptimeKuma. Источник требует SERVER_PUBLIC=true: закрытый сервер не отвечает на используемые Steam-запросы. Если мир должен оставаться непубличным, не меняйте это правило только ради мониторинга; данный способ может вам не подойти.
Включите отдельный status endpoint
| Параметр контейнера | Роль по 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/подсети или логину и паролю.
Прочитайте поля ответа
По README файл /status.json обновляется каждые 10 секунд. При ошибке запроса error содержит строку ошибки, а при успешном ответе — null. last_status_update задаёт время последнего обновления. Остальные поля поступают из публичного query-порта игры, по умолчанию 2457/udp.
| Поле | Как интерпретировать |
|---|---|
| error | null — запрос не сообщил ошибку; строка — причина отказа запроса |
| last_status_update | Время обновления, которое нужно сравнивать с текущим |
| player_count | Число игроков в query-ответе, а не доказательство успешной записи мира |
| players[].name | Пустое имя означает отсутствие доступного значения, а не установленную личность игрока |
Даты 2021 года, версия игры и число игроков в примере README показывают форму ответа. Не копируйте их как показатели своего сервера. Если HTTP доступен, но отметка времени больше не меняется, данные могли устареть.
Добавьте HTTP(s) - Json Query в UptimeKuma
- Создайте монитор типа HTTP(s) - Json Query.
- Укажите URL своего status.json, например http://server.example.com:80/status.json, заменив адрес и внешний порт.
- Вставьте приведённое ниже выражение автора в Json Query.
- Задайте 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.
Проверьте отказ и устаревший ответ
- Сопоставьте ответ endpoint с состоянием сервера и убедитесь, что last_status_update движется вперёд.
- В согласованное окно обслуживания проверьте реакцию монитора на остановленный сервер: query-ошибка не должна оставаться успешным состоянием.
- Отдельно проверьте на тестовом ответе или в проверке выражения старую last_status_update при error=null: одного отсутствия ошибки недостаточно. Не заменяйте ради теста рабочие файлы сервера.
- После восстановления дождитесь нового времени и отсутствия ошибки. Разберите сетевую ошибку HTTP, ошибку query и ошибку разбора JSON как разные причины.
Что проверять дополнительно
Публичный query-ответ не подтверждает корректную загрузку нужного мира, сохранения, совместимость модов и возможность входа со всех платформ. Для этих задач нужны отдельные наблюдения: журнал загрузки и записи мира, проверка подключения и нужного игрового действия. Не запускайте восстановление сохранения автоматически из-за единственного неудачного status-запроса.
Гайд был полезен?