Вопрос или проблема
Я хочу проанализировать ошибки сети и поэтому включил дополнительные уровни сообщений для драйвера Ethernet. После прочтения документации Linux для моего драйвера я выполнил ethtool -s eno2 msglvl 4805
.
Теперь ethtool eno2
показывает:
[...]
Текущий уровень сообщений: 0x000012c5 (4805)
drv link rx_err tx_err intr pktdata
[...]
и я ожидал бы увидеть очень много сообщений в журнале (например, содержание пакетов для всех полученных пакетов). Но dmesg
не показывает никаких новых сообщений.
Где я могу увидеть эти сообщения журнала от драйвера?
Это на Ubuntu 22.04, с ядром “5.15.0-92-lowlatency #102-Ubuntu”.
Я подозреваю, что вы ищете буфер ядра. Он имеет кольцевую структуру и будет сбрасывать сообщения. Попробуйте dmesg.
Ответ или решение
Ваша задача состоит в том, чтобы анализировать сетевые ошибки на локальной машине с операционной системой Ubuntu 22.04 и ядром 5.15.0-92-lowlatency. Вы включили дополнительные уровни сообщений для сетевого драйвера с помощью утилиты ethtool
, однако не наблюдаете ожидаемых логов в стандартном выводе командной строки, таком как dmesg
. Давайте рассмотрим, где и как эти сообщения могут быть зафиксированы.
Теория
В Linux сообщения драйверов сетевого оборудования обычно отправляются в системный журнал, который управляется подсистемой журнала ядра — klog
. Эти сообщения могут содержать информацию о событиях, таких как ошибки приема и передачи пакетов, состояния устройств и другие информационные сообщения, которые могут быть полезны для диагностики и отладки. Типичными местами, где можно ожидать появление этих сообщений, являются:
-
dmesg
— вывод ядра, который показывает сообщения, записанные в кольцевой буфер ядра. -
Системные лог-файлы — зачастую на основе системных демонов, таких как
rsyslog
илиsystemd-journald
, эти логи могут сохраняться в/var/log/syslog
или/var/log/messages
. -
journalctl
— утилита для работы с журнальными файлами, которая позволяет просматривать логи, записанныеsystemd-journald
.
Пример
Вы установили уровень сообщений драйвера на 0x000012c5
, что указывает на вывод сообщений, связанных с драйверами (drv
), состояниями соединения (link
), ошибками приема (rx_err
) и передачи (tx_err
), прерываниями (intr
) и данными пакетов (pktdata
). Это настраивается через следующую команду:
ethtool -s eno2 msglvl 4805
После этого логично ожидать увеличения количества сообщений, поступающих от драйвера Ethernet, однако в dmesg
новых сообщений не оказалось.
Применение
-
Проверка
dmesg
: Возможно, сообщения слишком быстро пересекают кольцевой буфер ядра в силу его ограниченного размера. Доступ на чтение старых сообщений может быть более удобным с помощьюdmesg --level=err,warn,info
. Попробуйте использовать эту команду для получения сообщений на разных уровнях логирования. -
Проверка
/var/log/
: Обычно, системные сообщения ядра сохраняются в файлы, например,/var/log/syslog
или/var/log/kern.log
. Используйте командыless
илиtail
, чтобы просматривать эти файлы, например:sudo less /var/log/syslog sudo less /var/log/kern.log
-
Использование
journalctl
: Демонsystemd-journald
собирает и сохраняет журнальные данные, их можно просмотреть с помощью:sudo journalctl -k
Для фильтрации конкретного устройства используйте:
sudo journalctl -k | grep eno2
-
Настройка логгирования: Чтобы убедиться в том, что уровень логгирования достаточен и нужные сообщения включены, вам может понадобиться отредактировать конфигурационные файлы
rsyslog
илиsystemd-journald
, чтобы убедиться, что все необходимые уровни сообщений записываются. -
Пересмотреть текущую конфигурацию: Проверьте документацию на ваш особенный драйвер и его поддержки в Linux. Возможно, существуют специфические для драйвера утилиты логгирования или дополнительные файлы конфигурации.
Заключение
Запуск большого количества сообщений логов от драйвера может требовать деликатной настройки системы для сохранения всех данных, учитывая быстродействие вашего сетевого трафика и настроек буферов. Регулярное наблюдение за состоянием журналов и проверка их на наличие критических ошибок или предупреждений поможет более эффективно диагностировать и решать проблемы с сетью.