Jump to content

Recommended Posts

Posted

Задача состоит в том, чтобы построить с помощью 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?

 

Заранее благодарен за подсказки.

Posted

читал 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? :) Я ж конкретный вопрос задал. :)

Posted
Я выше написал подсказку - как
сорри, не понял в ваших ответах НИЧЕГО.

 

плохо вчитываетесь как в man (я там нашел это меньше чем за минуту), так и в ответы на форуме.
нет бы подсказать. :)

ладно. буду сам разбираться, раз сообщество ничего путного подсказать не может.

Posted
Возможно log_user 0 и в нужный момент ставить в 1

это я видел. можете пояснить глубинный смысл этой фразы. мне лично она непонятна. :) сорри, если обидел - и в мыслях не было. есть задача - надо ее решить. 3 дня танцев вокруг нее результата не дали.

  • 2 weeks later...
Posted

а не проще ли применить 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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.