Skip to content

Серийные логи и порты

Операционная система, BIOS и другие системные компоненты выводят логи в серийные порты виртуальной машины. Логи можно просматривать и использовать для диагностики загрузки и анализа ошибок ОС или приложений.

У виртуальных машин Compute есть четыре виртуальных серийных порта:

  • порт 1 — /dev/ttyS0;
  • порт 2 — /dev/ttyS1;
  • порт 3 — /dev/ttyS2;
  • порт 4 — /dev/ttyS3.

В порт /dev/ttyS0 по умолчанию выводятся логи следующих системных компонентов в порядке их запуска:

  1. UEFI — логи UEFI содержат информацию об инициализации процессора, памяти, поиске дисков.
  2. GRUB — в облачных образах ядро Linux выбирается автоматически, поэтому логи содержат только название запускаемой ОС.
  3. Ядро Linux — логи содержат информацию о загрузке драйверов, поиске файловых систем и распаковке временной файловой системы (initrd). Логи ядра позволяют отследить системные ошибки, возникающие при загрузке ОС.
  4. Cloud-init — логи содержат информацию о генерации SSH-ключей, увеличении размера диска, установке пакетов при первом запуске ВМ.
  5. Getty — логи содержат информацию о вводе имени пользователя.

В порт /dev/ttyS1 дублируются логи UEFI, а в /dev/ttyS2 и /dev/ttyS3 не поступает никакой вывод.

Примечание

Распределение логов по портам актуально для образов ОС от MWS. Если вы используете сторонний образ ОС, может потребоваться дополнительная настройка GRUB.

Вы можете перенаправить вывод пользовательского приложения в любой порт. Например, вывести в серийный порт текстовое сообщение или информацию из Docker-контейнера.

Хранение логов

У каждого порта есть циклический буфер, который хранит 1 МБ логов в виде сырых данных. Логи хранятся, пока виртуальная машина запущена. Когда виртуальная машина выключается, буфер очищается.

Формат логов

Сырые данные, поступающие в серийный порт, сериализируются в JSON по спецификации RFC 8259. При сериализации применяются следующие правила обработки символов:

СимволРезультат в JSONПояснение
\n (0x0A)\nПеревод строки (line feed)
\r (0x0D)\rВозврат каретки (carriage return)
\t (0x09)\tТабуляция
\b (0x08)\bВозврат на шаг (backspace)
\f (0x0C)\fПеревод страницы (form feed)
ESC (0x1B)\u001bНачало управляющей последовательности
NUL (0x00)\u0000Нулевой байт
BEL (0x07)\u0007Звуковой сигнал
" (0x22)\"Экранируется, чтобы не нарушить синтаксис строки
\ (0x5C)\\Экранируется, чтобы следующий символ не интерпретировался как часть последовательности
<, >, &<, >, &Не изменяется
Текст (многобайтовый)Не изменяетсяНе изменяется
Некорректный UTF-8\ufffdЗаменяющий символ (replacement character)

При просмотре через веб-консоль данные в формате JSON преобразуются в текст.