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 в конфигурации демона.