Серийные логи и порты
Операционная система, BIOS и другие системные компоненты выводят логи в серийные порты виртуальной машины. Логи можно просматривать и использовать для диагностики загрузки и анализа ошибок ОС или приложений.
У виртуальных машин Compute есть четыре виртуальных серийных порта:
- порт 1 —
/dev/ttyS0; - порт 2 —
/dev/ttyS1; - порт 3 —
/dev/ttyS2; - порт 4 —
/dev/ttyS3.
В порт /dev/ttyS0 по умолчанию выводятся логи следующих системных компонентов в порядке их запуска:
- UEFI — логи UEFI содержат информацию об инициализации процессора, памяти, поиске дисков.
- GRUB — в облачных образах ядро Linux выбирается автоматически, поэтому логи содержат только название запускаемой ОС.
- Ядро Linux — логи содержат информацию о загрузке драйверов, поиске файловых систем и распаковке временной файловой системы (
initrd). Логи ядра позволяют отследить системные ошибки, возникающие при загрузке ОС. - Cloud-init — логи содержат информацию о генерации SSH-ключей, увеличении размера диска, установке пакетов при первом запуске ВМ.
- 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 преобразуются в текст.