gvan
-
Posts
210 -
Joined
-
Days Won
2
Content Type
Profiles
Forums
Gallery
Downloads
Blogs
Events
Posts posted by gvan
-
-
В 30.12.2016 в 15:50, Downloader сказал:
На скриншоте то, что хотелось бы видеть на роутере
Если есть желание "рисовать картинки" прямо на роутере, то можно попробовать решение. Тем более пакет collectd включили в официальный список пакетов entware (т.е. можно ставить напрямую через opkg). Там же есть упоминание о готовом пакете netdata, который требует минимум настроек для получения результата, но статистика хранится не долговременно.
Либо использовать внешний ресурс (сервер), который будет собирать статистику по SNMP с роутера и отображать ее (ссылки на такое ПО были в этой теме).
14 часа назад, dexter сказал:наблюдаю непонятные скачки в счетчиках траффика
6 минут назад, Le ecureuil сказал:Там порой бывают переполнения, которые нужно обрабатывать особенно
Если используются 32-битные счетчики, то переполнение возникнет довольно быстро. Чтобы проверить из-за этого ли это происходит можно сделать следующее.
Посчитать сколько времени прошло с предыдущего скачка (в секундах) и умножить на среднюю скорость по статистике нужного нам трафика. Если получим в сумме объем, равный примерно 4Гб (перевести биты в xБайты), то это оно - переполнение Но это очень примерно.
-
1 час назад, John9110 сказал:
destination messages { file("/opt/My_Files/log/$YEAR/$MONTH/$DAY/messages.txt" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));};
Есть один небольшой (или большой) минус. Будьте готовы к тому, что после перезагрузки роутера часть лога до того момента, пока на нем не синхронизируются часы через интернет, может попасть в старые даты (логи).
В роутере батарейки нет, поэтому при его загрузке дата берется из конфа.
-
2 часа назад, milokc сказал:
/opt/etc/darkstat/init.cfg
На Entware-3g тоже этого файла нет. Но необходимый интерфейс можно указать в скрипте старта/стопа /opt/etc/init.d/S54darkstat в строке
ARGS="-i ppp0 --chroot /opt/var/empty --syslog"
Причем у меня он запускается (через данный скрипт) без ошибок (но у меня подключение с провайдером - PPPoE).
- 1
-
3 часа назад, Roman_Petrov сказал:
Если вы хотите писать логи с помощью syslog на NAS
Сам не пробовал на внешний сервер отдавать, но, судя по всему, примерно так:
destination remote {udp("192.168.1.111" port(514));}; log { source(src); destination(remote); };
-
11 час назад, emlen сказал:
А как можно создавать резервные копии только измененного конфига? Мне бы не хотелось бы иметь образно говоря сто одинаковых копий за опред. срок, а просто по одной копии всех версий конфига..
Ну, собственно говоря сто копий не хранится. Остаются архивы за последние несколько дней в зависимости от значения переменной DAYSTOR. Да и объем этих архивов конфигов небольшой.
Также при выполнении команды "show running-config" всегда изменяется MD5 конфига и строка "clock date". Так что задача не совсем тривиальная.
Первое сообщение дополнил кодом по сохранению только измененного конфига. Для этого при каждом запуске бэкапа сохраняется локальная так называемая текущая версия конфига. При последующих запусках содержимого полученного с роутера и сохраненного конфига сравнивается. При этом указанные выше строки не учитываются (переменная EXCLCONFCMD="Md5 checksum:\|clock date").
Т.к. логика скрипта усложнилась, то возможны какие-то неучтенные баги Проверяйте.
- 2
-
Первое сообщение дополнено информацией по восстановлению entware из резервной копии.
- 1
-
27 минут назад, vasek00 сказал:
Для меня так же 15минут поставить новую entware (только ту которая текущая на данный момент времени, так как релизы имеют свойство изменяться, улучшаться и исправленные ошибки и не дочеты пред.версий), потом конфиги в /opt/etc.
Да, если софта пару-тройку пакетов. Но у меня побольше. Да и вспоминать, что нужно поставить, а что нет, куда положить нужные данные и т.п., не хочется.
А по поводу изменений релизов, вообще не вижу проблем. Ведь указанный скрипт запускается каждую ночь и мы всегда получаем полный свежий слепок системы, причем в новом архиве. У меня он на данный момент занимает менее 20Мб.
А обновление того же самого софта opkg update/upgrade также можно добавить в cron.
Но каждый волен выбирать сам
- 1
-
2 часа назад, vasek00 сказал:
Вопрос, а зачем его конфиг так сложно вытаскивать, если он спокойно лежит "/flash/startup-config" берем куда надо, в место
У меня это какой-то полубинарный файл. Если сделать:
cp /flash/startup-config /opt/tmp/test.txt
То вначале файла test.txt какая-то каша. Да и вариант с ndmq -p более универсальный (вдруг захочется сохранить в третьем файле результат вывода каких-либо других CLI команд).
2 часа назад, vasek00 сказал:Да и Entware наверное не стоит копировать весь его (так как библиотеки и версии приложений тоже меняются) возможно достаточно /opt/etc
Да, ничто не мешает изменить переменную BACDIR на
BACDIR=/opt/etc/
Но у меня, например, кроме конфигов есть еще БД, которые лежат вне /opt/etc.
Также мой вариант, если вдруг умрет флэшка, позволяет за 15 минут развернуть новую entware, без танцев с бубном и без каких-либо установок дополнительных программ. Рассказываю как.
Есть переносимая флэшка, на которой развернут пустой entware. Ну, не совсем пустая. На ней есть fdisk, e2mkfs (и прочие дисковые утилиты).
Запускаю entware с нее. Создаю раздел на новом диске, форматирую его, запускаю распаковку созданного в первом сообщении .tgz на новую флэшку (еще надо будет создать var/log и tmp, т.к. в архиве их нет). Все. Можно монтировать entware на новой флэшке.
Уже несколько раз подобным образом переезжал.
Если нужна более подробная информация по шагам, то могу расписать и дополнить первое сообщение.
-
18 минут назад, Le ecureuil сказал:
Нет, перезаписывается весь netfilter целиком по каждой нужде. Пока это невозможно "быстро" исправить.
Ясно
А "каждая нужда" какими примерно событиями определяется (чтобы для себя понимать насколько часто это может происходить и от чего это зависит)?
-
3 часа назад, Le ecureuil сказал:
Нет, пока прошивка сделана именно так, и переделывать ее не запланировано.
Т.е. при возникновении таких сетевых событий делается flush всех правил и цепочек без исключений? Или же какие-то служебные все-таки остаются?
Если есть возможность хака в виде создания некой своей кастомной цепочки (например, с именем, начинающимся с определенных символов), то можно в ней уже учитывать трафик. Ну естественно при этом эта цепочка не должна чиститься.
-
А чем определяется частое передергивание правил?
Использую collectd c плагином iptbales, который напрямую общается c netfilter для получения значений счетчиков. Для отрисовки трафика определенных клиентов через iptables создаю и маркирую правила. Соответственно, в свой скрипт /opt/etc/ndm/netfilter.d/filter.sh добавил код (правила). Например:
[ "$table" != "filter" ] && exit 0 # check the table name /opt/sbin/iptables -I OUTPUT -p ICMP -s 192.168.1.0/24 -m comment --comment "ICMP" -j ACCEPT /opt/bin/logger -t "iptables" "Rule for collectd added"
Но по syslog вижу, что этот код часто выполняется. Скорее всего, это происходит, когда подключаются/отключаются клиенты wi-fi, порты роутера. При этом и обнуляются счетчики на данном правиле. Это не очень положительно сказывается на точности учета трафика (если, особенно период опроса счетчиков большой).
Можно ли этого как-то избежать?
-
- Popular Post
- Popular Post
На форуме уже пару раз возникал вопрос о периодическом бэкапе конфига. Но не менее обидно потерять свои наработки в entware. В данной статье выложен простой скрипт, который запускается по cron и сохраняет содержимое /opt, конфига и прошивки. Есть возможность отказаться от бэкапа любого из указанных компонентов. Резервная копия прошивки не сжимается архиватором, т.к. файл прошивки и так уже максимально упакован. Старые архивы в соответствии с установленным интервалом времени удаляются.
Предварительно необходимо изменить настройки скрипта в разделе конфигурационных параметров.
Данная резервная копию может использоваться как для полного, так и частичного восстановления entware. Информация об этом дана в конце статьи.
Для нормальной работы cron entware д.б. установлена на раздел с файловой системой ext2/ext3/ext4.
Устанавливаем и запускаем cron
opkg install cron /opt/etc/init.d/S10cron start
В каталоге /opt/etc/cron.daily создаем файл backup и размещаем в нем следующий код:
Скрытый текст#!/opt/bin/sh # Скрипт сохраняет резервную копию entware, конфига роутера и прошивки prefix="/opt" PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin #===================================================================================== # Конфигурационные параметры скрипта #===================================================================================== # Префикс для записи сообщений в syslog TAG=Backup # Каталог, куда сохранять бэкапы BACSTORDIR=/tmp/mnt/ADATA/backup/ # Какие компоненты бэкапить (1|0) # Entware. Всегда сохраняется новая копия IsEnt=1 # Конфигурация роутера. Сохраняется копия, если были изменения в конфиге IsConf=1 # Прошивка. Создается резервная копия, если прошивка изменялась IsFirm=1 # Префикс для имени файла с бэкапом BACNAME=entware # Что архивировать BACDIR=/opt/ # Какие каталоги пропускать при бэкапе entware EXCLUDE=" tmp var/log " # При определении изменялся ли конфиг, не учитывать данные строки (через экраннированный символ "ИЛИ" -> "\|". # При сравнении копий конфига не учитываются служебные строки, начинающиеся на '! $$$', и строка 'clock date', т.к. она обновляется при считывании конфига # Лучше не трогать :) EXCLCONFCMD='\! \$\$\$\|clock date' # Путь к резервной копии прошивки на USB FLASH. Определить в CLI по команде 'ls ?'. Обычно это метка диска в виде 'LABEL:/' BACFIRMDIR=ADATA:/backup/ # Сколько дней хранить бэкапы. DAYSTOR=8 #===================================================================================== # Начало скрипта #===================================================================================== # Текущая дата для формирования имени файла с архивом DATE=`date +%Y-%m-%d` logger -t $TAG "Starting process" cd $BACDIR # Делаем архив entware if [ "$IsEnt" = "1" ] then logger -t $TAG "Starting backup entware" echo "$EXCLUDE" | tar -X - -cf - * | gzip > ${BACSTORDIR}${BACNAME}-${DATE}.tgz else logger -t $TAG "Skiping backup entware" fi # Делаем архив конфига if [ "$IsConf" = "1" ] then logger -t $TAG "Starting backup config" ndmq -p "show running-config" -P message > ${BACSTORDIR}config-${DATE} if [ -f "${BACSTORDIR}config-cur" ] then OLDCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-cur` CURCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-${DATE}` if [ "$OLDCONF" != "$CURCONF" ] then logger -t $TAG "Config is changed. Do new copy." cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur-new mv -f ${BACSTORDIR}config-cur ${BACSTORDIR}config-${DATE} gzip -f ${BACSTORDIR}config-${DATE} mv ${BACSTORDIR}config-cur-new ${BACSTORDIR}config-cur else logger -t $TAG "Config is not changed. Renew current config copy." mv -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur fi else logger -t $TAG "Current config copy not found. Is it first run? Do config copy." cp ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur gzip -f ${BACSTORDIR}config-${DATE} fi else logger -t $TAG "Skiping backup config" fi # Делаем архив прошивки if [ "$IsFirm" = "1" ] then logger -t $TAG "Starting backup firmware" ndmq -p "copy flash:/firmware ${BACFIRMDIR}firmware-${DATE}" -P message if [ -f "${BACSTORDIR}firmware-cur" ] then CMPFIRM=`cmp ${BACSTORDIR}firmware-cur ${BACSTORDIR}firmware-${DATE}` if [ -n "$CMPFIRM" ] then logger -t $TAG "Firmware is changed. Do new copy." cp -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-cur-new mv -f ${BACSTORDIR}firmware-cur ${BACSTORDIR}firmware-${DATE} mv ${BACSTORDIR}firmware-cur-new ${BACSTORDIR}firmware-cur else logger -t $TAG "Firmware is not changed. Renew current firmware copy." mv -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-cur fi else logger -t $TAG "Current firmware copy not found. Is it first run? Do firmware copy." cp ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-cur fi else logger -t $TAG "Skiping backup firmware" fi logger -t $TAG "Finished" cd $BACSTORDIR # Выводим в лог список файлов-архивов до удаления старых резервных копий и после logger -t $TAG "Files before removing old archives `ls -l`" logger -t $TAG "Remove old archives" find $BACSTORDIR -mtime +${DAYSTOR} -delete logger -t $TAG "Files after removing old archives `ls -l`" logger -t $TAG "Exiting"
Делаем файл backup исполняемым:
chmod +x backup
В данном скрипте предусмотрено исключение определенных каталогов (например, tmp, var/log). Бэкап производится на другой диск (флэшку). Если будете бэкапить содержимое на этот же диск, не забудьте добавить каталог с архивами в исключение. Иначе скрипт будет выполняться, пока не закончится место на диске.
Архивы хранятся 8 дней (переменная DAYSTOR). Новый архив конфига создается только в том случае, если произошло его изменение. При этом не учитывается MD5 и строка "clock date".
Информация о ходе бэкапа передается в syslog. Если эта информация нужна, и syslog у вас еще не настроен, то рекомендую его включить, как указано в соответствующей статье. Если не нужна, то ничего делать не нужно.
Как минимум в данном коде вам необходимо изменить переменные BACSTORDIR и BACNAME.
Всё. Каждую ночь будет сохраняться свежая копия entware и конфига роутера.
Использование сохраненной резервной копии.
По восстановлению конфига роутера вопросов возникнуть не должно. Распаковываем файл командой gzip, копируем его себе на устройство и далее его можно загрузить в роутер через соответствующий пункт в веб-интерфейсе ("Система-Файлы"). Пример команды для распаковки конфига:
gzip -d config-2016-11-29.gz
Таким же образом можно воспользоваться сохраненным файлом прошивки.
Теперь о том, для чего делается резервная копия entware и как можно использовать полученный архив.
Возможны случаи, когда мы наставили большое количество пакетов (какие не помним, они начали работать некорректно и т.п.), но точно знаем что хотелось бы вернуться на состояние "как было пару дней назад". Или еще хуже в результате экспериментов удалили системные файлы entware, полностью нарушив ее работу. Или вышел из строя диск (флэшка).
0. Подготовительная стадия.
Предполагается, что у нас есть чистая entware, используемая для функции восстановления. Например, отдельная флэшка или раздел на диске/флэшке (далее диск восстановления - ДВ). На нем предварительно установлены утилиты для работы с диском (создания разделов, форматирования файловой системы):
opkg install fdisk tune2fs e2fsprogs
Через веб-интерфейс в разделе "Приложения-OPKG" подключаем entware с ДВ.
1. Создание раздела на диске.
В моем примере восстановление entware будет выполняться на второй раздел флэшки (диск /dev/sda). ДВ находится на первом разделе флэшки. Используемая файловая система для entware - ext2
Скрытый текст$ fdisk -l /dev/sda Disk /dev/sda: 14,9 GiB, 16001269760 bytes, 31252480 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 10487807 10485760 5G 83 Linux /dev/sda3 20973568 31252479 10278912 4,9G 83 Linux
Создаем раздел диска через fdisk. Если на новом диске есть какие-то не нужные разделы, то их также можно удалить (см. help по команде "m").
Скрытый текст$ fdisk /dev/sda Welcome to fdisk (util-linux 2.28). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): p Partition number (2,4, default 2): 2 First sector (10487808-31252479, default 10487808): Last sector, +sectors or +size{K,M,G,T,P} (10487808-20973567, default 20973567): Created a new partition 2 of type 'Linux' and of size 5 GiB. Command (m for help): w The partition table has been altered. $ fdisk -l /dev/sda Disk /dev/sda: 14,9 GiB, 16001269760 bytes, 31252480 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 10487807 10485760 5G 83 Linux /dev/sda2 10487808 20973567 10485760 5G 83 Linux /dev/sda3 20973568 31252479 10278912 4,9G 83 Linux
2. Форматирование раздела.
Создаем ФС ext2 с меткой KINGSTON2 и UID (для удобства работы c OPKG) 00000000-0000-0000-1111-000000000002:
Скрытый текст$ mke2fs -m 0 -t ext2 -L KINGSTON2 -U 00000000-0000-0000-1111-000000000002 /dev/sda2 mke2fs 1.43.1 (08-Jun-2016) Creating filesystem with 1310720 4k blocks and 327680 inodes Filesystem UUID: 00000000-0000-0000-1111-000000000002 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done
Создаем каталог /tmp/mnt/KINGSTON2 и монтируем вновь созданную ФС:
mount /dev/sda2 /tmp/mnt/KINGSTON2
Предполагаем, что архив entware уже находится на ДВ в /opt/tmp/king3-2016-12-06.tgz
3. Восстановление и запуск entware.
Запускаем восстановление entware и создаем каталоги, которые мы не включили в резервную копию:
Скрытый текстcd /tmp/mnt/KINGSTON2 tar -xzf /opt/tmp/king3-2016-12-06.tgz mkdir tmp var/log var/log/lighttpd
Запускаем восстановленную entware в веб-интерфейсе.
Примечание: Пункты 0-2 можно пропустить, если раздел для entware создается на каком-то другом устройстве (например, ПК). Также для простоты, используя midnight commander (opkg install mc), можно в архиве entware просмотреть интересующие нас файлы или скопировать их в какой-то другой каталог. Возможно извлечение и просмотр отдельных файлов и через команду tar.
- 22
-
Collectd - это простой и легкий сервис, который собирает данные о производительности системы и приложений и предоставляет механизмы для хранения полученных значений в различных форматах, например в RRD файлах. Сбор статистики производится с помощью подключаемых плагинов. В данном примере будет рассмотрена возможность использования плагина для работы с SNMP (получения данных со встроенного в роутер SNMP-сервера), плагина для работы с дисковой подсистемой и плагина для записи полученных данных в RRD БД.
Задача collectd только собирать данные. Отрисовка графиков производится с помощью rrdcgi, который позволяет использовать некое подобие шаблонов, упрощающих формирование html-файлов и облегчающих процесс их настройки. Создание графиков выполняется только по запросу пользователя (при обращении к веб-скриптам), соответственно, нагрузка на систему незначительная.
До графических возможностей netdata, недавно включенного в состав готовых пакетов, конечно, далеко, но здесь в первую очередь обеспечивается задача долговременного хранения данных статистики.
Примеры отображения полученной информации:
Скрытый текстЭтим возможности программы не ограничиваются. Существует дополнительные плагины, открывающие другие варианты сбора статистики (в том числе с определенных сервисов). Например, плагин iptables, позволяющий собирать данные по помеченным цепочкам правил (в планах отрисовывать графики по определенным клиентам wi-fi), плагин ping, формирующий данные по задержкам до определенного хоста и т.п.. Также есть возможность формирования нотификаций при достижении определенных значений полученной информации с помощью плагина threshold.
Этап 1. Формирование данных статистики.
Включаем через CLI поддержку snmp на роутере:
service snmp system configuration save
Ставим в entware SNMP-утилиты и проверяем работу протокола SNMP на роутере:
opkg install snmp-utils snmp-mibs snmpwalk -c public 127.0.0.1 . >/opt/tmp/snmp.txt
Если все прошло успешно, то должен создаться файл, содержащий все возможные OID роутера.
Распаковываем содержимое приложенного архива files.zip во временную папку и устанавливаем collectd c необходимыми для нашего примера плагинами:
opkg install collectd collectd-mod-logfile collectd-mod-disk collectd-mod-snmp collectd-mod-rrdtool
Создаем каталог для rrd файлов:
mkdir -p /opt/var/lib/collectd/rrd
Копируем файл кастомных типов из архива share/custom-types.db в /opt/share/collectd
Заменяем конфигурационный /opt/etc/collectd.conf на файл conf/collectd.conf
Некоторые пояснения по конфигурационному файлу.
Вначале указываются рабочие каталоги, а также подключается файл с кастомными типами (в нем описывается хранение характерных для keenetic данных: оперативной памяти и CPU).
Далее указывается интервал (в примере 180 сек.) сбора статистики для плагинов (в настройках плагина snmp д.б. такой же интервал). Изменение интервала в дальнейшем допускается только при удалении всех rrd файлов (обнуление статистики). Но также можно выполнить их тюнинг вручную. В противном случае получим некорректную статистику.
Плагин logfile нужен для записи журналов самого сервиса collectd. В нем и будем смотреть возникающие при настройке и работе сервиса ошибки.
Плагин disk пишет информацию о работе выбранных дисков (разделов). В примере указаны только хардварные диски (производительность отдельных разделов не учитываю, т.к. у меня в этом необходимости нет). Информация начинает записываться в БД через 3*интервал_опроса после запуска collectd.
Плагин rrdtool собственно и обеспечивает сохранение данных в БД RRD. Размер каждого созданного файла БД фиксированный, информация записывается по кругу, переписывая устаревшие данные. Наибольшая точность данных получается для статистики за последние сутки (в примере точность до 3 минут). Данные за неделю, месяц и год усредняются и хранятся с большими интервалами времени. Но при этом существует возможность считывания максимальных значений статистики, которые были в указанные периоды (эти данные не усредняются, и в отрисовке графиков мы их также будем отображать). Значение “RRARows 480” определяет количество записей для каждого раздела данных (сутки, неделя, месяц, год). 480 соответствует точности для записи данных за сутки с интервалом три минуты (24*60/3).
Плагин snmp выполняет сбор статистики по протоколу SNMP. В разделе Host указывается узел, с которого собираются данные, а также имена разделов с данными для опроса определенных OID (информацию по нужным мне OID брал из временного файла /opt/tmp/snmp.txt).
Запускаем collectd
/opt/etc/init.d$ /opt/etc/init.d/S??collectd start
Проверяем лог /opt/var/log/collectd.log на наличие ошибок.
Если все прошло успешно, то через несколько минут в БД RRD можно посмотреть вносимые сервисом данные, например по uptime системы.
Для этого установим rrdtool:
opkg install rrdtool rrdtool dump /opt/var/lib/collectd/rrd/localhost/snmp/uptime.rrd | less
На этом данный этап закончен. Можно спокойно передохнуть, а настройку отрисовки графиков продолжить в следующий раз.
Этап 2. Формирование графиков статистики.
Приступим к настройке визуальной части системы.
Для этого установим http-сервер. В примере будет использоваться lighttpd с модулем lighttpd-mod-cgi. Можете использовать другой http-сервер, но необходимо будет в соответствии с документацией на сервер настроить поддержку выполнения CGI-скриптов.
Также необходимо установить rrdcgi для формирования динамических HTML-файлов.
Устанавливаем сервер и необходимое ПО:
opkg install lighttpd lighttpd-mod-cgi rrdcgi
Настраиваем сервер.
В /opt/etc/lighttpd/lighttpd.conf меняем порт на 8000 и убираем комментарий:
server.port = 8000
И добавляем в index-file.names запуск индексной страницы с именем index.rcgi:
index-file.names = ( "index.php", "index.html", "index.htm", "default.htm", "index.lighttpd.html", "index.rcgi" )
В /opt/etc/lighttpd/conf.d/30-cgi.conf корректируем cgi.assign для выполнения скриптов с расширением .rcgi:
cgi.assign = ( ".pl" => "/opt/bin/perl", ".cgi" => "/opt/bin/perl", ".rb" => "/opt/bin/ruby", ".erb" => "/opt/bin/eruby", ".py" => "/opt/bin/python", ".rcgi" => "/opt/bin/rrdcgi" )
Запускаем сервер:
/opt/etc/init.d/S80lighttpd start
Копируем содержимое архива www/* в каталог /opt/share/www.
В переменной RRDPATH файлов 3*.rcgi нужно указать правильный путь к каталогу статистики, т.к. он зависит от названия вашего роутера.
Также у меня для доступа в Интернет используется PPPoE, физическое подключение имеется только к WAN и к трем интерфейсам роутера. Поэтому набор файлов редактируйте под свои нужды. Но скрипты для общей статистики системы должны работать без каких-либо изменений.
Подключаемые шаблоны находятся в /opt/share/www/include. Их тоже можно корректировать, если возникнет необходимость (например, изменить дизайн страницы, поменять цвет и форму графиков и т.п.). Документацию смотрите на официальной странице RRDTOOL. Если требуется выполнить какие-то дополнительные вычисления над данными в RRD (а в некоторых шаблонах это используется), то они производятся в обратной польской записи (RPN), в конце статьи есть ссылка на он-лайн конвертер.
В общем шаблоне /opt/share/www/include/0-page.tmpl используется параметр <RRD::SETVAR ADDOPT5 --lazy>, необходимый для того, чтобы каждый раз не пересоздавать изображения с графиками, если информация в RRD файле не менялась.
При отладке (например, подборе цвета линий на графике или изменении шрифтов) можно данный параметр изменить на заглушку <RRD::SETVAR ADDOPT5 --title=''>. В этом случае картинка будет перерисовываться каждый раз при открытии страницы со статистикой.
Делаем исполняемым скрипт формирования индексной страницы и запускаем его для создания файла index.cgi:
chmod +x /opt/share/www/scripts/index.sh /opt/share/www/scripts/index.sh
Если потребуется изменить дизайн индексной страницы, то его придется изменять непосредственно в скрипте. Выносить HTML-код в отдельный файл пока не планировал.
Открываем сайт со статистикой в браузере по адресу http://адрес_роутера:8000/
Архив (конфигурация, шаблоны, скрипт для создания индексной страницы): files.zip
Список используемой литературы:
- Официальная страница collectd
- Collectd Wiki
- Официальная страница rrdtool
- Он-лайн конвертер для обратной польской записи
- Названия и коды цветов в HTML, CSS и JavaScript
- 7
-
21 час назад, emlen сказал:
Добрый день! А как по крону сохранять конфиг ndms (running-config) на флешку?
Для сохранения конфига во временную папку можно воспользоваться командой:
ndmq -p "show running-config" -P message > /opt/tmp/config.txt
Данную задачу можно добавить в /opt/etc/crontab. Например, сохранение конфига в 4 часа утра:
0 4 * * * root ndmq -p "show running-config" -P message > /opt/tmp/config.txt
Если требуется каждый раз создавать новый файл конфига (например, для истории), то можно усложнить команду сохранения конфига:
ndmq -p "show running-config" -P message > /opt/tmp/config-`date +%Y-%m-%d`
- 1
-
22 минуты назад, Cosmit сказал:
Ещё мона конешно добавить скипт запуска Nagios в /opt/etc/init.d/
Еще бы добавить информацию по первичной настройке, показать на примерах, что в итоге мы можем получить и после этого вынести статью в каталог готовых решений.
Графики, насколько я понимаю, также можно строить на самом entware?
-
17 минут назад, Dimash сказал:
PATH==/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin
Наверно стоит поменять '==', на '=' .
Такое ощущение, что не находит программу microdc2, т.к. задан неправильный путь поиска бинарников.
- 2
-
1 час назад, omezik сказал:
Интернет отключился и на этом все
Не могу подсказать. Нужно знать правильную команду на включение/отключение pppoe. Я взял команду из сообщения Le ecureuil. Возможно, в мануале на CLI найдете.
Но ребут в крон, как я написал выше, должен работать.
-
В 13.11.2016 в 06:10, omezik сказал:
0 */1 * * * root /opt/sbin/reboot не работает ни чего не происходит
Это я неправильно написал. Нужно так
0 * * * * root /opt/sbin/reboot
В 13.11.2016 в 06:10, omezik сказал:Мне бы команду просто для переподключения pppoe0 соединения
Команду подсказали выше. Пример выполнения нескольких команд в одной строке в cron каждый час (выполняется команда date ожидается 1 секунда и date выполняется повторно, результат выполнения записывается в файл):
0 * * * * root (/opt/bin/date && sleep 1 && /opt/bin/date) >> /opt/tmp/date.txt
Попробуйте. Если результат для этого примера будет также отрицательный, то лучше настроить логирование entware и смотреть /opt/var/log/message на наличие ошибок.
Предполагаю, что переподключение pppoe каждый час будет выглядеть так:
0 * * * * root /opt/bin/ndmq -p 'interface PPPoE0 no connect' -P message && sleep 5 && /opt/bin/ndmq -p 'interface PPPoE0 connect' -P message
Проверить не могу, т.к. обрублю себе сук, на котором сижу (если что-то пойдет не так), т.к. сижу удаленно.
Но предварительно можно проверить результат в командной строке, выполнив команду:
/opt/bin/ndmq -p 'interface PPPoE0 no connect' -P message && sleep 5 && /opt/bin/ndmq -p 'interface PPPoE0 connect' -P message
А далее уже добавить в cron.
-
10 часов назад, omezik сказал:
50 22 * * * reboot
Ну, неправильно введено, пропущено имя пользователя, от которого нужно запускать команду. Нужно так (в принципе path задан правильный, но лучше указать полный путь к команде перезагрузки)
50 22 * * * root /opt/sbin/reboot
Также не забудьте сделать в файле /opt/etc/crontab последнюю строку пустой.
Чтобы сделать перезагрузку роутера раз в час (например, в 00:00, 01:00 и так далее) команда будет выглядеть так:
0 */1 * * * root /opt/sbin/reboot
Также файловая система на entware должна быть ext*.
Чтобы отлавливать ошибки cron. можно включить логирование с помощью syslog-ng (см. соответствующую тему на форуме в разделе готовых решений).
-
Хотелось уточнить по поводу счетчиков:
UCD-SNMP-MIB::ssCpuRawUser.0 = Counter32: 58739 UCD-SNMP-MIB::ssCpuRawNice.0 = Counter32: 0 UCD-SNMP-MIB::ssCpuRawSystem.0 = Counter32: 22109 UCD-SNMP-MIB::ssCpuRawIdle.0 = Counter32: 517951 UCD-SNMP-MIB::ssRawInterrupts.0 = Counter32: 0 UCD-SNMP-MIB::ssRawContexts.0 = Counter32: 0
Такое ощущение, что они у меня в версии v2.08(AAFS.2)A9 показывают погоду в Австралии. Ими как-то можно пользоваться для расчета нагрузки CPU или же они для этого не предусмотрены? Сам веб-интерфейс как получает загрузку процессора?
По данному вопросу написал в ветке тестирования 2.08. Сегодня перегрузил роутер, но лучше не стало. Причем в 2.06 (правда я тестировал SNMP всего один день) у меня сложилось впечатление, что работало нормально.
Или же остается получать загрузку CPU только через внешние скрипты?
Дополнение:
Вопрос, скорее всего, снят. Формула для расчета
cpu_user=ssCpuRawUser*100/(ssCpuRawUser+ssCpuRawSystem+ssCpuRawIdle)
неверна. В качестве переменных в правой части равенства надо брать не полученные по SNMP значения, а разность текущего и предыдущего показания счетчика. Т.е.
cpu_user=(ssCpuRawUser2-ssCpuRawUser1)*100/((ssCpuRawUser2-ssCpuRawUser1)+(ssCpuRawSystem2-ssCpuRawSystem1)+(ssCpuRawIdle2-ssCpuRawIdle1))
-
1 час назад, HuduGuru сказал:
По умолчанию есть скрипт не автозапуска, но просто запуска.
Если его запустить вручную так, то все нормально отрабатывает?:
/etc/init.d/S37xmail start
Если да, то, возможно, запуск xmail при загрузке роутера не укладывается в какие-то таймауты. Соответственно, и возникает ошибка...
И я бы подкорректировал строчку PATH, добавив в конце ":/opt/bin":
PATH=$XMAIL_ROOT/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin
-
3 часа назад, HuduGuru сказал:
Что мне нужно сделать, чтобы прописать автозапуск корректно?
Что у вас в самом скрипте автозапуска xmail вы не показали (по-умолчанию его в самом пакете нет).
Протестировать вручную автоматический запуск программы можно с параметром start или stop (остановка). Например:
# S37xmail start
Если скрипт не отрабатывает нормально, то и роутер при перезапуске не сможет его запустить.
Простой пример скрипта автозапуска выглядит так:
Скрытый текст#!/bin/sh PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin start() { /opt/bin/prog_name } stop() { killall prog_name } case $1 in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac
Но это не совсем правильный вариант написания подобных скриптов для entware, но в простейших случаях сгодится.
-
Обновился с тестовой версии 2.06 с поддержкой SNMP на версию v2.08(AAFS.2)A9. Снимал показания загрузки CPU со следующих счетчиков:
UCD-SNMP-MIB::ssCpuRawUser.0 = Counter32: 189927 UCD-SNMP-MIB::ssCpuRawSystem.0 = Counter32: 144865 UCD-SNMP-MIB::ssCpuRawIdle.0 = Counter32: 11349065
Далее по формуле, найденной в Сети, вычисляю загрузку процессора в процентах:
cpu_user=ssCpuRawUser*100/(ssCpuRawUser+ssCpuRawSystem+ssCpuRawIdle)
Таким же образом считаю для cpu_system и cpu_idle:
cpu_system=ssCpuRawSystem*100/(ssCpuRawUser+ssCpuRawSystem+ssCpuRawIdle)
cpu_idle=ssCpuRawIdle*100/(ssCpuRawUser+ssCpuRawSystem+ssCpuRawIdle)
Общую загрузку cpu получал суммой вычисленных выше cpu_user и cpu_system.
Сравнивал результат с показанием в веб-интерфейсе кинетика. Примерно совпадало, динамика изменений - тоже.
Но сегодня обратил внимание, что нагрузка, полученная по SNMP перестала, соответствовать действительности.
Для теста нагрузил процессор командой "cat /dev/zero | bzip2 -c > /dev/null", запустил snmpwalk и увидел, что значения в CpuRawUser и ssCpuRawSystem не растут, а в ssCpuRawIdle, соответственно, не уменьшаются (как было ранее).
Думаю, что если перегружу железку, то опять станет нормально. Но пока этого делать не хочу, т.к. баг/фича сейчас воспроизводится.
Также увидел, что по отношению к версии 2.06, в 2.08 команда htop стала показывать 2 процессора (ядра):
1 [||||||||||||||||||||||||||||||||||||||||||||||||||| 77.3%] Tasks: 34, 29 thr; 2 running 2 [||||||||||||||||||||| 29.9%] Load average: 0.35 0.10 0.29 Mem[||||||||||||||||||||||||||||||||| 59.0M/250M] Uptime: 18:38:07 Swp[ 0K/0K]
Это так и должно быть? Не может быть тогда проблема связана с тем, что загрузка CPU по SNMP для второго "ядра" должна показываться в других счетчиках, например, ssCpuRawIdle.1, но при этом их в поддержки нет?
Также отмечаю, что значения Load Average, получаемые по SNMP, при этом соответствуют действительности (в данном примере не обращать внимания на несоответствие значений в выводе команды htop):
UCD-SNMP-MIB::laLoad.1 = STRING: 0.26 UCD-SNMP-MIB::laLoad.2 = STRING: 0.62 UCD-SNMP-MIB::laLoad.3 = STRING: 0.52
Дополнение
Вопрос снят. Моя ошибка. Для расчета нужно брать не прямые значения ssCpuRawUser, ssCpuRawSystem, ssCpuRawIdle, а их разницу от предыдущих показаний.
- 1
-
14 часа назад, Илларион сказал:
А можно как-то эти логи(от разных так скажем сервисов) складывать в одну папку?
1. Проводить ротацию логов можно в разных каталогах. Делайте, например, отдельный конф-файл для этого.
2. В соответствии с документацией, существует опция olddir
ЦитатаПереместить сдвинутые журналы в каталог. Заданный каталог должен размещаться на том же физическом устройстве, что и обращаемый файл журнала. При использовании этого параметра все старые версии журнала будут попадать в каталог. Этот параметр может быть переопределён параметром noolddir.
Это требуется?
Документацию можно посмотреть в интернете. Например, есть перевод мануала на сайте OpenNET.
- 1
В логах кинетика фиксируются ошибки во время записи на диск
in 2.09
Posted
Насколько периодически? Т.е., например, транзакции на запись идут постоянно, а потом раз - и проскочила ошибка. Или же диск не использовался некоторое время, а потом при попытке записать на него возникает данная ошибка и далее проблем не наблюдается?
Я тоже фиксирую похожие изменения по работе с диском на 2.09 и 2.08 в отличии от версии 2.06. Но это проблема связана с тем, что у меня диск засыпает (отключается двигатель). Хотя пытался через параметры smart отключать остановку. Но он на это плюет.
Соответственно, при обращении к винту (если двигатель отключился), пока он не раскрутится в логах проскакивают ошибки (но номер сектора всегда разный). Далее никаких проблем с работой не наблюдается.