|
Модераторы: ginnie, korob2001 |
|
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
Стоит задача подсчета абонентов на сетевом оборудовании и отображения собранных данных в Zabbix.
Командой show vpls mac-table count instance PPPoE-хххх получаем таблицу с количеством абонентов (хххх - хостнейм железки). указанная команда вываливает таблицу из которой нам нужно только nnn MAC address learned in routing instance PPPoE-xxx bridge domain __PPPoE-xxxx__ где nnn - сумарное число маков в домене ххх Смысл такой: по telnet скрипт заходит на железку логин пароль conf t show vpls mac-table count вываливается таблица маков (например переменная MT), из которой он должен взять суммарное значение, т.е. должно применяться условие типа "если в переменной МТ имеется текст "MAC address learned in routing instance", то вывести из переменной МТ строку "nnn MAC address learned in routing instance PPPoE-xxx bridge domain __PPPoE-xxxx__" и записать в переменную sumMac (или файл который бы цеплялся заббиксом) end Как то так я это представляю. за основу думаю можно взять скрипт |
|||
|
||||
ginnie |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
sh1kima26, у Вас что-то не получается, есть какие-то вопросы или Вы ожидаете, что кто-то напишет код за Вас?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
ginnie, в жизни не занимался написанием скриптов, по этому да, прошу написать скрипт. Логика ясная, от чего оттолкнуться есть, знаний в языке нет, по этому я и прошу транслировать предпологаемую мной логику в скрипт.
Или по карйней мере мне бы хотелось узнать как по уакзанному выше примеру организовать сбор требуемой информации из лога. Это сообщение отредактировал(а) sh1kima26 - 16.12.2014, 14:57 |
|||
|
||||
sh1kima26 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
Вообще начал изучать язык, раз уж появилась нужда, понял что тут придется использовать регулярные выражения, но все еще не понял как выдрать из текста нужное слово.
Вот у меня будет лог файл в котором последней строкой будет: nnn MAC address learned in routing instance PPPoE-xxx bridge domain __PPPoE-xxxx__ Мне нужно извлечь и записать в другой файл (или сделать так чтобы в логе сохранялось только требуемое значение) nnn - целое число разной длинны (вроде \d). Вот думаю оттолкнутсья от такого примера
Только у меня будет текст из которого нужно извлечь первое число после которого стоит пробел (\s).
Только тут не указывается, что нужно найти первое число после котороего стоит пробел. Какой идентификатор будет указывать именно на первое совпадение? А может и не стоит замарачиваться, ведь в требуемой строке только nnn является целым числом (xxx может являться сочетанием букв и цифр) Это сообщение отредактировал(а) sh1kima26 - 17.12.2014, 08:41 |
||||
|
|||||
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
Вот так получается можно выловить нужное мне число. Но как сказать скрипту, что искомое значение находится именно в последней строке лога? Добавлено через 11 минут и 47 секунд Вообще я еще не разобрался как собственно последнюю строку лога занести в переменную. Т.е. сначала должно быть условие типа если существует строка содержащая "nnn MAC address learned in routing instance" то занести ее в переменную $s А далее уже $s = "nnn MAC address learned in routing instance PPPoE-xxx bridge domain __PPPoE-xxxx__"; if ($s =~ /^(\d)(?=\s)/) # Найти цифру за которой стоит '\s'(пробел) { print "$1\n"; } else { print "ошибка поиска\n";} Это сообщение отредактировал(а) sh1kima26 - 17.12.2014, 10:07 |
|||
|
||||
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
проглядел, интересующая меня строка
nnn MAC address learned in routing instance PPPoE-xxx bridge domain __PPPoE-xxxx__ будет самой первой после того как скрипт выполнит команду, следовательно нужно научить скрипт выводить нужную цифру из самой первой строки полученной информации |
|||
|
||||
alezzz |
|
|||
сплю... Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: нет Всего: 14 |
sh1kima26, вы можете показать кусок лога или весь? а то непонятно причем тут первая/последняя строка, если строка 'nnn MAC address learned ...' в логе встречается только 1 раз, то не важно где она. К тому что уже сделано вами такие замечения:
1. Ищите число, но в тестовой строке используете nnn вместо числа. 2. \d - это одна цифра, одна и более - это \d+. |
|||
|
||||
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
alezzz, это я для наглядности писал nnn, подразумевая, что оно может быть разным.
Вообще, вышло вот так, но все нет времени протестировать
|
|||
|
||||
alezzz |
|
|||
сплю... Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: нет Всего: 14 |
Должно работать, если с telnet-ом никаких косяков не будет. Пишите если будут проблемы после тестирования.
|
|||
|
||||
sh1kima26 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 16.12.2014 Репутация: нет Всего: нет |
alezzz,
дошли таки до тестирования. Стопорится на При запуске с FreeBSD ======================= START ======================= [+] Connecting to: ".$host."\n"; ===================================================== сначала указывал на строку open(my $cmds, "commands"); переименовали commands в commands.txt стопорится теперь там же, но просто без указания строки. При запуске через командную строку выдает readline() on closed filehandle $cmds at /usr/local/etc/zabbix22/zabbix/externalscripts/MAC_summary_script_v1.pl line 15. readline() on closed filehandle $iplist at /usr/local/etc/zabbix22/zabbix/externalscripts/MAC_summary_script_v1.pl line 17. 15 строка это commands, 17 while (my $host = <$iplist>) Порекомендовали в open () писать полные пути к файлам. Но по техническим причинам снова не омжем протестировать, о результатах напишу позже. Это сообщение отредактировал(а) sh1kima26 - 30.12.2014, 09:43 |
|||
|
||||
Loki |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 244 Регистрация: 9.7.2006 Репутация: нет Всего: нет |
а по snmp девайс такой статистики не отдает, зачем именно телнет?
|
|||
|
||||
alezzz |
|
|||
сплю... Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: нет Всего: 14 |
sh1kima26, напишите полные пути, или поместите скрипт и файлы в одну папку и запускайте скрипт оттуда.
Loki, может не давать, например смотрю walk-ом DES-1210, никаких dynamic macs. |
|||
|
||||
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |