Перегрузка логирования и мониторинга Logging / monitoring overhead
ID причины in-monitoring · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
При сбое логи растут лавиной, и серверы, которые отправляют логи синхронно, из-за этого тормозят ещё сильнее.
Почему Из-за ошибок резко растёт объём логов и метрик → Следствие Сборщик логов не успевает, серверы с синхронной отправкой ждут → На экране Во время сбоя микрофризы и фризы усиливаются из-за логов
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Отправлять асинхронно, делать сэмплирование, при переполнении буфера отбрасывать, одинаковые ошибки отправлять пачкой.
Команда инфраструктуры: задачи
Рассчитать мощность сборщика логов на всплеск объёма при сбое, настроить алерт на отставание сборщика.
На графике
Случайные всплески · объём логов, очередь сборщика логов
Где смотреть
Смотреть число строк и байтов логов в секунду на сервере, очередь и число отброшенных записей у агента сбора логов вместе с временем тика. Если есть остановившиеся потоки, проверить через bcc offcputime -p, не ждут ли они записи или отправки логов
Подтверждает
В моменты всплесков времени тика объём логов в десятки раз выше обычного, а время ожидания игрового потока сосредоточено в стеках вызовов записи и отправки логов
Опровергает
Если объём логов обычный или игровой поток не ждёт на логах, всплеск логов только следствие сбоя, и причину первой ошибки нужно искать отдельно
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
Logging in C#Microsoft Методы логирования в .NET синхронные, поэтому при медленном хранилище рекомендуется сначала писать в быстрое хранилище, а потом переносить
Asynchronous loggersApache Software Foundation Асинхронное логирование сглаживает короткие всплески очередью, но если вывод долго остаётся медленным, очередь заполняется, и скорость падает до скорости самого медленного вывода, либо логи отбрасываются по заданной политике (Discard)