Логирование kernel panic на удаленный syslog сервер.

Несколько из обслуживаемых мною серверов внезапно с небольшим интервалом времени попадали в kernel panic. Очень хотелось узнать почему, но серверы находятся в датацентрах в разных точках планеты и физически увидеть это нереально. Если попросить подключить kvm, то время простоя сервера будет недопустимо большим. В результате я стал искать возможность сохранения лога dmesg на диск или еще куда-нибудь, чтобы увидеть на что заругалось ядро….

В результате поисков я наткнулся на информацию о kexec kdump и netconsole. Первое сохраняет дамп оперативки, что мне не подходит. А вот netconsole оказалась намного интереснее. Это стандартный модуль ядра, дающий возможность отсылать сообщения ядра по сети в виде обычного текста по сети.

При загрузке модуля в параметрах задается на какой хост и на какой порт и через какой интерфейс отсылать сообщения.

modprobe netconsole netconsole="1234@192.168.88.246/eth0,6665@
192.168.88.250/aa:bb:cc:dd:ee:ff"

где

  • 1234 — исходящий порт
  • 192.168.88.246 — адрес интерфейса с которого слать
  • eth0 — интерфейс через который слать
  • 6665 — порт назначения
  • 192.168.88.250 — адрес сервера куда мы логи шлем
  • aa:bb:cc:ff:ee:ff — mac-адрес сервера назначения. Если не указывать, то он выставится в ff:ff:ff:ff:ff:ff, что будет соответствовать широковещательному сообщению.

Некоторые из параметров можно пропускать:

modprobe netconsole netconsole="@/,514@192.168.88.250/"

Проблемы с которыми я столкнулся

1. Если сервер назначения находится не в одной подсети с нашим сервером, то нужно указывать не его mac-адрес, а mac ближайшего к нам маршрутизатора, через который идет маршрут до сервера назначения. Иначе пакет не уйдет куда надо и мы ничего не увидим.

2. Я несколько часов мучался и не знал почему же у меня сообщения не отсылаются =). В результате почитал официальную документацию и узнал, что по умолчанию в ядре уровень логирования в консоль низкий и шлются только сообщения о чрезвычайных событиях. А я же проверял на подключении/отключении флешки. Для изменения уровня логирования нужно скомандовать

dmesg -n 8

Если 8 не подходит, то 7 точно подойдет =). В разных дистрибутивах были разные цифры. Я не копался в эту сторону, так что не знаю чем это обусловлено.

З.Ы. Чтобы вызвать kernel panic вручную, нужно выполнить

echo "c" > /proc/sysrq-trigger

Документация

Запись опубликована в рубрике Программное обеспечение, Работа с метками , , , , , , . Добавьте в закладки постоянную ссылку.

Комментарии запрещены.