Andrei Posted August 28, 2008 Posted August 28, 2008 Задача состоит в том, чтобы построить с помощью mrtg графики изменения некоторых величин, которые надо получать с удаленного сервера, не поддерживающего snmp. Эти величины можно получить зайдя на этот сервер telnet-м. Например, получить с сервера кол-во коннектов через него в данный момент веремени. Сделал так: На сервере (Debian), где строится mrtg в mtrg.cfg создал секцию: ## >> Descr: '' | Name: 'elf2-ree_connections' | Ip: '' | Eth: '' ### Target[elf2-ree_connections]: `/etc/elf2-ree_connections.sh` YLegend[elf2-ree_connections]: elf2-ree_connections ShortLegend[elf2-ree_connections]: connections MaxBytes[elf2-ree_connections]: 63492 Options[elf2-ree_connections]: gauge, nopercent, growright Title[elf2-ree_connections]: elf2-ree_connections PageTop[elf2-ree_connections]: <H1>elf2-ree_connections</H1> В файле /etc/elf2-ree_connections.sh написан скрипт, который идет на другой сервер-роутер 87.226.ххх.ххх (Linux 2.4.22 ((none)), BusyBox v0.60.5 (2004.03.04-14:03+0000) Built-in shell (ash) ): #!/usr/bin/expect spawn telnet 87.226.ххх.ххх expect {*login:} send "root\r" expect {*password:} send "хххххх\r" expect {*#} send "cat /proc/net/ip_conntrack | wc -l\r" expect {*#} send "exit\r" Однако в mrtg возвращается всегда "87", что неверно. При этом если ручками зайти телнетом на 87.226.ххх.ххх и выполнить команду cat /proc/net/ip_conntrack | wc -l то искомая величина выдается на консоль. Как эту же величину скормить mtrg ? PS. Попутно: таким же образом надо забрать последнее значение, выдаваемое командой # uptime 9:28am up 1 day, 7:11, load average: 0.29, 0.62, 0.97 Последнее значение можно получить так: uptime | sed -e 's/.*, //' но опять же - как его скормить mtrg? Заранее благодарен за подсказки. Вставить ник Quote
nuclearcat Posted August 28, 2008 Posted August 28, 2008 Возвращаются первые цифры в выводе команды т.е. нужно выводить не все в процессе работы expect, а только нужное значение показывать Вставить ник Quote
Andrei Posted August 28, 2008 Author Posted August 28, 2008 Вот-вот. Нужно на выходе скрипта получить число, выдаваемое командой cat /proc/net/ip_conntrack | wc -l Как? Вставить ник Quote
nuclearcat Posted August 28, 2008 Posted August 28, 2008 Возможно log_user 0 и в нужный момент ставить в 1 Неужели так влом читать ман по expect? Вставить ник Quote
Andrei Posted August 28, 2008 Author Posted August 28, 2008 читал man except вот тут - http://ru.wikipedia.org/wiki/Expect - даже пример приводится. Пробовал сделать по аналогии: #!/usr/bin/expect spawn telnet 87.226.ххх.ххх expect {*login:} send "root\r" expect {*password:} send "хххххх\r" expect {*#} send "cat /proc/net/ip_conntrack | wc -l\r" expect {*#} set results $expect_out(buffer) send "echo $expect_out(buffer)\r" send "exit\r" На этот вариант ругается: cat /proc/net/ip_conntrack | wc -l can't read "expect_out(buffer)": no such variable while executing "set results $expect_out(buffer)" (file "./elf2" line 11) PS. Вы знаете как это сделать? :) Или в конце концов отправите читать man? :) Я ж конкретный вопрос задал. :) Вставить ник Quote
nuclearcat Posted August 28, 2008 Posted August 28, 2008 Я выше написал подсказку - как, плохо вчитываетесь как в man (я там нашел это меньше чем за минуту), так и в ответы на форуме. Вставить ник Quote
Andrei Posted August 29, 2008 Author Posted August 29, 2008 Я выше написал подсказку - каксорри, не понял в ваших ответах НИЧЕГО. плохо вчитываетесь как в man (я там нашел это меньше чем за минуту), так и в ответы на форуме.нет бы подсказать. :)ладно. буду сам разбираться, раз сообщество ничего путного подсказать не может. Вставить ник Quote
nuclearcat Posted August 29, 2008 Posted August 29, 2008 Специально для слепых, повторю: Возможно log_user 0 и в нужный момент ставить в 1 Вставить ник Quote
Andrei Posted September 1, 2008 Author Posted September 1, 2008 Возможно log_user 0 и в нужный момент ставить в 1 это я видел. можете пояснить глубинный смысл этой фразы. мне лично она непонятна. :) сорри, если обидел - и в мыслях не было. есть задача - надо ее решить. 3 дня танцев вокруг нее результата не дали. Вставить ник Quote
nuclearcat Posted September 1, 2008 Posted September 1, 2008 #!/usr/bin/expect log_user 0 spawn telnet 87.226.ххх.ххх expect {*login:} send "root\r" expect {*password:} send "хххххх\r" expect {*#} send "cat /proc/net/ip_conntrack | wc -l\r" log_user 1 expect {*#} send "exit\r" Вставить ник Quote
Andrei Posted September 11, 2008 Author Posted September 11, 2008 Да, так получилось. Большое спасибо! :) Вставить ник Quote
Мартен Posted September 11, 2008 Posted September 11, 2008 а не проще ли применить ssh authorized keys? а потом написать скрипт, который лежит на удаленном сервере и выдает то,что нужно. вот пример, как у меня забираются для mrtg счетчики байтов in и out c интерфесов (писался за 5 мин. на коленке): cat /usr/sbin/cbt #!/usr/bin/perl # This script shows current bytes count # on specified interface my $File='/proc/net/dev'; my $int=$ARGV[0]; die "Need interface" if $int eq ''; open FILE, "$File"; my $line; my $ib=0; my $ob=0; until ( eof(FILE) ) { $line = <FILE>; if($line=~m/^\s*$int:/) { $line=~s/^\s*$int:\s*//s; @Arr = split ( /\s+/, $line); $ib=$Arr[0]; $ob=$Arr[8]; } } $upt=`uptime`; $upt=~s/^.*\ up\ (.*)\,.*user.*/\1/s; print "$ib\n$ob\n"; print "$upt\n".`hostname`; вызов: ssh server.provider.com '/usr/sbin/cbt eth3.3' 31093062540 2414888414 26 days 21:01 server.provider.com вывод в формате, который ест mrtg. Вставить ник Quote
Andrei Posted September 11, 2008 Author Posted September 11, 2008 не проще ли применить ssh authorized keys?нет там ssh - http://www.parabel.ru/products/elf2-re/ Управление маршрутизатором Консоль Telnet tftp сервер и клиент Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.