В любом сложном электронном устройстве необходима функциональность ведения журналов его работы (системных логов). Анализ записанных логов оказывает неоценимую помощь при диагностике сложных ситуаций.
В роутерах iRZ логи работы по умолчанию ведутся в буфере оперативной памяти, поэтому при перезагрузке устройства они полностью затираются. После старта устройства файлы логов и начинают записываться заново. Эта особенность работы не позволяет диагностировать ситуации приведшие к перезагрузке устройства или его недоступности по внешним интерфейсам.
Для решения этого вопроса мы предлагаем настроить ведение системных логов на внешнюю, энергонезависимую память.
Запись логов на внутреннюю память роутера
Для данной настройки необходимо подключиться к консоли роутера через протоколы Telnet или SSH и произвести необходимые манипуляции с настройками роутера.
Для внесения изменений ведения лог-файла необходимо отредактировать файл /etc/config/system.
В базовой настройке это можно сделать с помощью текстового редактора vi. Если же вы привыкли к другому текстовому редактору, то его можно поискать в репозиториях и установить с помощью менеджера пакетов - opkg.
opkg update; opkg install nano #установка текстового редактора nano
А вот пример того выглядит файл system:
root@iRZ-Router:~# cat /etc/config/system config system option hostname 'iRZ-Router' option timezone 'GMT' option log_size '128' option enable_telnet '1' option telnet_port '23' config timeserver 'ntp' list server '0.openwrt.pool.ntp.org' list server '1.openwrt.pool.ntp.org' list server '2.openwrt.pool.ntp.org' list server '3.openwrt.pool.ntp.org' option enabled '1' option enable_server '0'
В выводе данного файла присутствует два блока информации из которых нас интересует первый - config system.
Строка option log_size '128' отвечает за размер файла (измеряется в килобайтах). Для того чтобы писать лог не в буфер оперативной памяти, а в файл, необходимо добавить строку в конце данного блока данных:
option log_file '/opt/log.txt'
В роутере есть не затираемая область памяти. Она которая монтируется в папку /opt. Мы предлагаем записывать лог-файл log.txt именно в неё.
При изменении размера файла логов следует учитывать размеры свободного пространства в данной области памяти. Количество свободной памяти можно узнать по команде:
root@iRZ-Router:~# df -h Filesystem Size Used Available Use% Mounted on rootfs 69.1M 6.9M 58.6M 11% / /dev/root 13.3M 13.3M 0 100% /rom tmpfs 60.9M 160.0K 60.8M 0% /tmp /dev/ubi0_2 69.1M 6.9M 58.6M 11% /overlay overlayfs:/overlay 69.1M 6.9M 58.6M 11% / tmpfs 512.0K 0 512.0K 0% /dev /dev/ubi1_0 25.3M 812.0K 23.2M 3% /opt
Это вывод с роутера серии R4 и для других серий будет выглядеть по другому. В данном случае мы видим что в разделе памяти, смонтированной в папку /opt , свободно 23 мегабайта.
Следует учесть ещё одну особенность ведения логов на роутере: при записи логов в файл, роутер при достижении граничного размера файла, указанного в настройках, перезапишет этот файл в файл с расширением .old. То есть если вы пишете в файл /opt/log.txt, то в этой папке появится второй файл - /opt/log.txt.old максимального размера, указанного в настройках. Таким образом эти два файла /opt/log.txt и /opt/log.txt.old будут максимум того размера, что вы укажете в настройках. Они будут циклически перезаписываться по мере накопления логов.
Итоговый файл настроек для записи логов во внутреннюю память роутера должен выглядеть приблизительно так:
config system option hostname 'iRZ-Router' option timezone 'GMT' option log_size '1024' option enable_telnet '1' option telnet_port '23' option log_file '/opt/log.txt' config timeserver 'ntp' list server '0.openwrt.pool.ntp.org' list server '1.openwrt.pool.ntp.org' list server '2.openwrt.pool.ntp.org' list server '3.openwrt.pool.ntp.org' option enabled '1' option enable_server '0'
После внесения данных изменений необходимо сделать рестарт служб командами:
/etc/init.d/log restart /etc/init.d/system restart
Запись логов на внешние накопители
К роутерам серии R4 и R2 можно подключить внешние накопители. К роутерам серии R4 можно подключить USB flash-накопитель, а к роутерам серии R2 - microSD карту.
В случае записи логов на внешние накопители необходимо проделать все те же манипуляции с настройками что и в предыдущем пункте данного руководства с одним отличием - путь куда записывать файлы логов будет отличаться.
Чтобы понять как будет смонтирован ваш внешний накопитель необходимо подключиться к консоли роутера и выполнить команду:
mount
пример вывода команды для роутеров серии R4
root@iRZ-Router:~# mount rootfs on / type rootfs (rw) /dev/root on /rom type squashfs (ro,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/ubi0_2 on /overlay type ubifs (rw,noatime) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600) debugfs on /sys/kernel/debug type debugfs (rw,noatime) /dev/ubi1_0 on /opt type ubifs (rw,relatime) mountd(pid3156) on /tmp/run/mountd type autofs (rw,relatime,fd=5,pgrp=3152,timeout=60,minproto=5,maxproto=5,indirect) **/dev/sda1 on** **/tmp/run/mountd/sda1** type vfat (rw,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-,shortname=mixed,errors=remount-ro)
пример вывода команды для роутеров серии R2
root@iRZ-Router:~# mount rootfs on / type rootfs (rw) /dev/root on /rom type squashfs (ro,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/mtdblock6 on /overlay type jffs2 (rw,noatime) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600) debugfs on /sys/kernel/debug type debugfs (rw,noatime) /dev/mtdblock7 on /opt type jffs2 (rw,relatime) **/dev/mmcblk0p1 on /mnt/mmcblk0p1** type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
В последней строке данных вывода будет искомый внешний накопитель и то путь монтирования. Следовательно в пункте option log_file (см. предыдущий раздел), необходимо указать путь до файла в соответствии с теми данными, которые вы получите из вывода команды mount.
Пример для роутер серии R4:
option log_file '/tmp/run/mountd/sda1/log.txt'
Пример для роутера серии R2:
option log_file '/mnt/mmcblk0p1/log.txt'
Ведение логов на удалённый сервер
Во всех сериях роутеров есть возможность отправки логов работы на удалённый сервер по протоколу Syslog. Данная настройка находится в меню Tools => System log. Описание данного пункта есть в документации к роутерам - Средства управления и мониторинга на роутерах iRZ.
Протокол Syslog - это стандарт отправки и регистрации сообщений о происходящих в системе событиях и используется на всех операционных системах. Так как это стандарт, то серверов для данного протокола очень много для всех операционных систем. Установить и настроить такой сервер не сложно. Достаточно почитать инструкции к выбранному серверу и указать в настройках роутера внешний IP адрес вашего сервера. В рамках этой статьи мы не хотим подробно углубляться в процесс настройки сервера сбора логов, но приведём небольшой пример.
Пример на базе opensource проекта Visual Syslog Server for Windows.
Вот домашняя страница данного проекта на русском языке: https://github.com/MaxBelkov/visualsyslog/blob/master/readme_rus.md. С данной страницы скачиваем стабильную версию сервера в zip архиве на хост машину, которая будет собирать логи с роутера. Установка заключается в разархивировании архива и запуске исполняемого файла. Установка не вызывает никаких проблем, достаточно везде нажать кнопки далее и готово.
Далее цитата со страницы проекта:
После установки Visual Syslog Сервер для Windows сразу готов к работе: настройка не требуется. По умолчанию ожидает сообщений на портах 514 UDP и 514 TCP. Программа установки добавляет исключения брандмауэра для Visual Syslog Сервер.
Далее необходимо включить необходимую функциональность на самом роутере. Это делается в разделе Tools => System Log. Следуя документации, приведённой выше, нужно включить ведение удаленного логирования и вписать IP адрес хост машины на которой вы запустили Visual Syslog Server.
Пример приведён на рисунке ниже:
Поле Prefix необходимо для маркировки сообщений от данного роутера в Visual Syslog Server. Это сделано на для случаев когда данный сервер собирает данные с нескольких устройств и для вывода логов по каждому устройству отдельно на основе данных префиксов.
После вышеописанных шагов в окне сервера логов вы сразу увидите те сообщения которые поступят с роутера после включения функции логирования: