netconsole

10 октября 2018

  • Назначение: получать сообщения ядра Linux при ошибках, приводящих к перезагрузке или зависанию.
  • Принцип действия: на сервере загружается модуль netconsole, который отправляет по UDP копию всех сообщений указанному соседу.
  • Полное описание: http://www.mjmwired.net/kernel/Documentation/networking/netconsole.txt
  • Дополнительное управление через /proc/sys/kernel/printk: http://www.de-brauwer.be/wiki/wikka.php?wakka=printk

Важные ограничения:

  • Не поддерживается отправка через bond- и vlan- интерфейсы, только через eth.
  • Не поддерживается маршрутизация, только прямая доставка получателю.

Ссылки по теме:

Настройка и запуск:

  • EDIT (здесь и далее — создаем, редактируем, сохраняем файл) /etc/sysconfig/netconsole
  • SYSLOGADDR=...
  • В CentOS 6:
    • chkconfig netconsole on
    • service netconsole start
  • В CentOS 7:
    • systemctl enable netconsole
    • systemctl start netconsole
  • dmesg -n 8
    • В отличие от dmesg, на физическую консоль и в netconsole выводится только то, что меньше уровня, заданного через loglevel в параметрах ядра или через «dmesg -n xx».
    • «8» является максимальным значением, без него в netconsole почти ничего не выведется.
    • Список уровней см. в https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt (искать в «loglevel=»).
  • dmesg | grep netcon
    [259588.824312] netpoll: netconsole: local port 6666
    [259588.824314] netpoll: netconsole: local IPv4 address 10.20.30.40
    [259588.824315] netpoll: netconsole: interface 'enp9s0'
    [259588.824315] netpoll: netconsole: remote port 514
    [259588.824316] netpoll: netconsole: remote IPv4 address 10.20.30.50
    [259588.824316] netpoll: netconsole: remote ethernet address aa:bb:cc:dd:ee:ff
    [259588.824607] console [netcon0] enabled
    [259588.824607] netconsole: network logging started

Проверка:

  • на получателе:
    • либо запускаем сниффер: tcpdump -Annpei any port 514 and port 6666
    • либо добавляем /etc/rsyslog.d/Remote.conf
  • на отправителе: echo Test1 > /dev/kmsg
  • на получателе: видим прилетевшие пакеты.

Постоянный loglevel:

  • EDIT /etc/default/grub
  • GRUB_CMDLINE_LINUX="... loglevel=7"
  • grub2-mkconfig -o /boot/grub2/grub.cfg
  • grub2-set-default 0

Пример настроек Rsyslog:

  • EDIT /etc/rsyslog.d/Remote.conf
  • # V5
    $ModLoad          imudp
    $UDPServerAddress 10.20.30.50
    $UDPServerRun     514
    $template FROM_REMOTE,"/var/log/remote/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
    :fromhost-ip, !isequal, "127.0.0.1" ?FROM_REMOTE
    & ~
  • systemctl restart rsyslog


← Назад в Блог