Knoppix
Модераторы: Warderer , Модераторы разделов
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 18.06.2014 12:30
Имеется сервер Debian 7 и демон dhcpd. Все работает. Нужно запилить мониторинг пулов по snmp для cacti.
Решение простое dhcp-snmp скрипт на перле, но вот не задача при запуске скрипта вываливается вот эьто:
Код: Выделить всё
./script.test dhcp-snmp.conf
defined(%hash) is deprecated at ./script.test line 224.
(Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./script.test line 226.
(Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./script.test line 228.
(Maybe you should just omit the defined()?)
На старой версии дебиана все летает.
Сейчас перл стоит: v5.14.2, а на старом шестой версии: v5.10.1
Как бы быть то не подскажите?
Поправите меня, если я не прав, буду тока рад.
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 18.06.2014 13:02
Не проще ли скрипт поправить? Как и написано в этом сообщении, defined(%hash) обычно можно спокойно заменить на %hash (в скалярном контексте - число элементов хеша, то есть в булевом - истина, если есть хотя бы один элемент, и ложь, если ни одного элемента нет).
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:
Сообщение
Hephaestus » 18.06.2014 13:02
BAF писал(а): ↑ 18.06.2014 12:30
Как бы быть то не подскажите?
Выяснить, что именно там deprecated и как это реализуется в нынешних версиях.
После чего переписать скрипт под новые условия.
Установка старых версий даже если и удастся (что не факт из-за зависимостей), всё равно будет напоминать о себе при каждом обновлении системы и рано или поздно дело всё-таки дойдет до перекраивания старых скриптов. Поэтому лучше уж сразу. Меньше проблем будет.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 18.06.2014 13:38
Переписать то понятно самый правильный вариант. Но я не програмист, так на шеле скрипт для бекапа и отправки по фтп могу тока накатать. А уж перл ваще загадка великая.
Может тогда посоветуете как по snmp мониторить пулы dhcp? Из всего что я сейчас сделал это закомпили пакет dhcpd-pool, но он показывает только локально.
Поправите меня, если я не прав, буду тока рад.
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 18.06.2014 13:42
BAF писал(а): ↑ 18.06.2014 13:38
я не програмист
Я же написал, что надо сделать. Если сомневаетесь, покажите проблемный кусок кода (строки с 220 по 230 или чуть больше).
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 18.06.2014 14:39
Bizdelnick писал(а): ↑ 18.06.2014 13:02
Не проще ли скрипт поправить? Как и написано в этом сообщении, defined(%hash) обычно можно спокойно заменить на %hash (в скалярном контексте - число элементов хеша, то есть в булевом - истина, если есть хотя бы один элемент, и ложь, если ни одного элемента нет).
Если бы я понимал в рперле я бы воспользовался вашим советом. Вот код
Код: Выделить всё
# Read leases
if (!open(LEASES, $conf->{"leases"})) {
printf STDERR "Unable to open leases file '%s'!\n", $conf->{leases};
return;
}
my %l = undef;
while (my $line = <LEASES>) {
if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
my $ip = ip2int($1);
undef %l;
foreach my $i (keys %{ $conf->{"pools"} }) {
my $pool = $conf->{"pools"}->{$i};
my $found = 0;
foreach my $r (@{ $pool->{"ranges"} }) {
if (($ip >= $r->{"from"}) && ($ip <= $r->{"to"})) {
%l = ( "pool" => $i, "ip" => $ip );
$found = 1;
last;
}
}
if ($found) {
last;
}
}
} elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
$l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
} elsif (defined %l && $line =~ /^\s+ends never;$/) {
$l{"ends"} = -1;
} elsif (defined %l && $line =~ /^\}$/) {
$conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
}
}
Ссылка на сам скрипт
https://yadi.sk/d/4O4CDKZaTt88P
Вот ссылка на сайт создателя
http://www.net-track.ch/opensource/dhcpd-snmp/ но сайт не открывается, хотя резолвится.
Поправите меня, если я не прав, буду тока рад.
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 18.06.2014 15:34
Экий изврат... Ну как-то так:
Код: Выделить всё
--- dhcp-snmp 2014-06-18 14:56:48.601380034 +0400
+++ dhcp-snmp.fixed 2014-06-18 15:36:19.245950233 +0400
@@ -199,12 +199,12 @@
return;
}
- my %l = undef;
+ my %l;
while (my $line = <LEASES>) {
if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
my $ip = ip2int($1);
- undef %l;
+ %l = ();
foreach my $i (keys %{ $conf->{"pools"} }) {
my $pool = $conf->{"pools"}->{$i};
@@ -221,12 +221,14 @@
last;
}
}
- } elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
- $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
- } elsif (defined %l && $line =~ /^\s+ends never;$/) {
- $l{"ends"} = -1;
- } elsif (defined %l && $line =~ /^\}$/) {
- $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+ } elsif (%l) {
+ if ($line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
+ $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
+ } elsif ($line =~ /^\s+ends never;$/) {
+ $l{"ends"} = -1;
+ } elsif ($line =~ /^\}$/) {
+ $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+ }
}
}
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 18.06.2014 15:50
Bizdelnick писал(а): ↑ 18.06.2014 15:34
Экий изврат... Ну как-то так:
Код: Выделить всё
--- dhcp-snmp 2014-06-18 14:56:48.601380034 +0400
+++ dhcp-snmp.fixed 2014-06-18 15:36:19.245950233 +0400
@@ -199,12 +199,12 @@
return;
}
- my %l = undef;
+ my %l;
while (my $line = <LEASES>) {
if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
my $ip = ip2int($1);
- undef %l;
+ %l = ();
foreach my $i (keys %{ $conf->{"pools"} }) {
my $pool = $conf->{"pools"}->{$i};
@@ -221,12 +221,14 @@
last;
}
}
- } elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
- $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
- } elsif (defined %l && $line =~ /^\s+ends never;$/) {
- $l{"ends"} = -1;
- } elsif (defined %l && $line =~ /^\}$/) {
- $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+ } elsif (%l) {
+ if ($line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
+ $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
+ } elsif ($line =~ /^\s+ends never;$/) {
+ $l{"ends"} = -1;
+ } elsif ($line =~ /^\}$/) {
+ $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+ }
}
}
У меня нет слов, огромное спасибо за помощь.
Теперь другая проблема
Делаю В snmpd.conf
Код: Выделить всё
.1.3.6.1.4.1.21695.1.2 DHCPPools /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf
А в ответ
Код: Выделить всё
pass .1.3.6.1.4.1.21695.1.2 /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf
И в ответ
Код: Выделить всё
snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2 = No Such Instance currently exists at this OID
Если сделать
Код: Выделить всё
extend .1.3.6.1.4.1.21695.1.2 DHCPPools /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf
То в ответ
Код: Выделить всё
snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2.1.2.9.68.72.67.80.80.111.111.108.115 = STRING: "/etc/dhcp/dhcp-mrtg/dhcp-snmp"
iso.3.6.1.4.1.21695.1.2.2.1.3.9.68.72.67.80.80.111.111.108.115 = STRING: "/etc/dhcp/dhcp-mrtg/dhcp-snmp.conf"
iso.3.6.1.4.1.21695.1.2.2.1.4.9.68.72.67.80.80.111.111.108.115 = ""
iso.3.6.1.4.1.21695.1.2.2.1.5.9.68.72.67.80.80.111.111.108.115 = INTEGER: 5
iso.3.6.1.4.1.21695.1.2.2.1.6.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.7.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.20.9.68.72.67.80.80.111.111.108.115 = INTEGER: 4
iso.3.6.1.4.1.21695.1.2.2.1.21.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1
Я так понимаю нужен первый способ, но он почему-то не работает, на редхатовском так
Код: Выделить всё
pass_persist .1.3.6.1.4.1.21695.1.2 /home/dhcp-mrtg/dhcp-snmp /home/dhcp-mrtg/dhcp-snmp.conf
Но на дебиане это не работает, странно.
Поправите меня, если я не прав, буду тока рад.
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 19.06.2014 06:51
У се, проблема решена.
Спасибо Bizdelnick за помощь в изменении скрипта под новый перл. Дальше все просто:
Код: Выделить всё
pass_persist .1.3.6.1.4.1.21695.1.2 /home/dhcp-mrtg/dhcp-snmp /home/dhcp-mrtg/dhcp-snmp.conf
и все работает:
Код: Выделить всё
root@cactiserver:/usr/share/cacti# snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.1.1 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.10 = INTEGER: 10
iso.3.6.1.4.1.21695.1.2.2.1.11 = INTEGER: 11
iso.3.6.1.4.1.21695.1.2.2.1.12 = INTEGER: 12
iso.3.6.1.4.1.21695.1.2.2.1.13 = INTEGER: 13
iso.3.6.1.4.1.21695.1.2.2.2 = ""
iso.3.6.1.4.1.21695.1.2.2.2.1 = STRING: "LAN"
iso.3.6.1.4.1.21695.1.2.2.2.10 = STRING: "pool_for_PETR_MG_36_1"
iso.3.6.1.4.1.21695.1.2.2.2.11 = STRING: "pool_for_PETR_MG_36_2"
iso.3.6.1.4.1.21695.1.2.2.2.12 = STRING: "pool_for_PETR_MG_36_3"
iso.3.6.1.4.1.21695.1.2.2.2.13 = STRING: "pool_for_PETR_MG_32_1"
iso.3.6.1.4.1.21695.1.2.2.3 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.3.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.3.10 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.11 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.12 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.13 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.4 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.10 = INTEGER: 4
iso.3.6.1.4.1.21695.1.2.2.4.11 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.12 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.13 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.5 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.5.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.5.10 = INTEGER: 509
iso.3.6.1.4.1.21695.1.2.2.5.11 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.5.12 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.5.13 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.6 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.6.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.6.10 = INTEGER: 1017
iso.3.6.1.4.1.21695.1.2.2.6.11 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.6.12 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.6.13 = INTEGER: 1021
Плюсы: есть люди у которых есть время помогать.
Минус: сам нифига ничему не научился.
Еще раз спасибо.
Поправите меня, если я не прав, буду тока рад.
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:
Сообщение
BAF » 25.06.2014 08:45
Вот такие графики получаются благодаря вашей помощи. Еще раз спасибо.
Поправите меня, если я не прав, буду тока рад.