WebSocket и метрики

Через WebSocket панель отдаёт всё, что обновляется в реальном времени: ход выполнения заданий, консоль игрового сервера и метрики. Интерфейс работает через эти же соединения.

Подключение

Соединения открываются по шести адресам:

Адрес Что отдаёт
/api/ws/tasks/{id} Ход выполнения задания и его вывод
/api/ws/servers/{server}/console Консоль игрового сервера, в обе стороны
/api/ws/servers/{server}/attach Интерактивная сессия с игровым сервером
/api/ws/servers/{server}/metrics Метрики игрового сервера
/api/ws/nodes/{id}/metrics Метрики выделенного сервера
/api/ws/nodes/metrics Метрики всех выделенных серверов

Авторизация

Токен передаётся в параметре запроса, потому что заголовки при открытии WebSocket из браузера задать нельзя:

wss://panel.example.com:8025/api/ws/servers/1/console?token=<токен>

В параметре token принимаются только короткоживущие токены с префиксом glst_. Персональный токен доступа панель в этом параметре не примет — то есть долгоживущий ключ доступа туда не попадёт даже по ошибке.

Сам короткоживущий токен в адресе всё же остаётся и может осесть в журналах обратного прокси, веб-сервера и систем наблюдения. Одноразовость и срок жизни в 10 секунд обесценивают такую запись, но если журналы хранятся долго, лучше вырезать из них параметр token.

Получить короткоживущий токен:

curl -X POST https://panel.example.com:8025/api/auth/short-lived-token \
  -H "Authorization: Bearer <токен сессии>"

Токен одноразовый и живёт не дольше 10 секунд, поэтому запрашивать его нужно непосредственно перед открытием соединения. Подробнее — API и токены.

Формат кадров

Все сообщения — JSON одного вида:

{
  "type": "task.status",
  "payload": { },
  "ts": 1711234567
}
Поле Описание
type Тип сообщения
payload Данные, зависят от типа
ts Метка времени, секунды Unix

Типы сообщений

Задания (/api/ws/tasks/{id}):

Тип Когда приходит
task.status Изменился статус задания
task.output Появился новый вывод команды
task.complete Задание завершено

Консоль (/api/ws/servers/{server}/console):

Тип Направление Назначение
console.history От панели Накопленный вывод при подключении
console.command К панели Отправка команды серверу

Интерактивная сессия (/api/ws/servers/{server}/attach):

Тип Направление Назначение
attach.input К панели Ввод в сессию
attach.detach К панели Отключиться, не останавливая сервер

Метрики:

Тип Назначение
metrics.replay Накопленные значения за период хранения
metrics.replay.done Накопленные значения переданы, дальше — текущие
metrics.error Ошибка сбора метрик

При подключении к метрикам панель сначала отдаёт историю за период хранения, затем присылает новые значения по мере поступления. Признак перехода — кадр metrics.replay.done.

В консоли игрового сервера пароль RCON заменяется на маску: игровой сервер печатает его в составе командной строки запуска.

Серии метрик

Метрики собирает демон и передаёт панели. Период съёма и время хранения задаются в конфигурации демона параметрами metrics.collection_interval (по умолчанию 5 секунд) и metrics.retention_duration (по умолчанию 10 минут), см. GameAP Daemon.

Игровой сервер

Серия Значение
gameap_server_up Работает сервер или нет
gameap_server_cpu_usage_percent Загрузка процессора, проценты
gameap_server_memory_usage_bytes Занятая память, байты
gameap_server_memory_limit_bytes Предел памяти, байты
gameap_server_memory_usage_percent Занятая память, проценты от предела
gameap_server_network_receive_bytes_total Принято по сети, байты нарастающим итогом
gameap_server_network_transmit_bytes_total Отправлено по сети, байты нарастающим итогом
gameap_server_block_io_read_bytes_total Прочитано с диска, байты нарастающим итогом
gameap_server_block_io_write_bytes_total Записано на диск, байты нарастающим итогом
gameap_server_process_pids Число процессов сервера

Метрики предела памяти заполняются только теми менеджерами процессов, которые умеют его ограничивать: systemd, Docker и Podman.

Выделенный сервер

Серия Значение
gameap_node_cpu_usage_percent Загрузка процессора, проценты
gameap_node_memory_usage_bytes Занятая память, байты
gameap_node_memory_total_bytes Всего памяти, байты
gameap_node_memory_usage_percent Занятая память, проценты
gameap_node_swap_usage_bytes Занят раздел подкачки, байты
gameap_node_swap_total_bytes Всего в разделе подкачки, байты
gameap_node_disk_usage_bytes Занято на диске, байты
gameap_node_disk_total_bytes Всего на диске, байты
gameap_node_disk_usage_percent Занято на диске, проценты
gameap_node_network_receive_bytes_total Принято по сети, байты нарастающим итогом
gameap_node_network_transmit_bytes_total Отправлено по сети, байты нарастающим итогом
gameap_node_load1 Средняя нагрузка за 1 минуту
gameap_node_load5 Средняя нагрузка за 5 минут
gameap_node_load15 Средняя нагрузка за 15 минут
gameap_node_uptime_seconds_total Время работы, секунды

Средняя нагрузка в Windows не собирается.

Какие сетевые интерфейсы и диски учитывать, задаётся параметрами if_list и drives_list в конфигурации демона.

Ограничения

Метрики хранятся у демона в оперативной памяти не дольше metrics.retention_duration (допустимо от 10 до 60 минут) и при перезапуске демона теряются. Долговременного хранения и выгрузки в системы мониторинга в панели нет.

Сбор метрик отключается параметром metrics.enabled: false в конфигурации демона.