Ad Widget
Collapse
Расширяем snmp lld скриптами
Collapse
X
-
Comment
-
одну проблему решил)
установил apt-get install libsnmp-perl
теперь другая проблема)
sudo su -c "/home/cisco_ifindex.pl.txt 10.*.*.* 161 comm" zabbix
Created directory: /var/lib/snmp/mib_indexes
Unknown user name at /home/cisco_ifindex.pl.txt line 27.
что за юзер ей не нравиться?))
Code:#!/usr/bin/perl -w $TAGSEP = ","; use SNMP; die "Usage: $0 <host> <port> <community>" if ($#ARGV < 2); $sess = new SNMP::Session(DestHost => "$ARGV[0]:$ARGV[1]", Community => "$ARGV[2]", UseNumeric => 1, NonIncreasing => 1, UseLongNames => 1); die $sess->{ErrorStr} if ($sess->{ErrorNum}); ($ifInOctets, $ifDescr, $ifType, $ifAdmin, $ifInErrors, $ifHCInOctets, $ifAlias) = $sess->bulkwalk(0, 500, [ ['.1.3.6.1.2.1.2.2.1.10'], ['.1.3.6.1.2.1.2.2.1.2'], ['.1.3.6.1.2.1.2.2.1.3'], ['.1.3.6.1.2.1.2.2.1.7'], ['.1.3.6.1.2.1.2.2.1.14'], ['.1.3.6.1.2.1.31.1.1.1.6'], ['.1.3.6.1.2.1.31.1.1.1.18'] ]); die $sess->{ErrorStr} if ($sess->{ErrorNum}); for $i (0..$#$ifInOctets) { $json{ $$ifInOctets[$i]->iid } = {}; } for $i (0..$#$ifDescr) { if (exists( $json{ $$ifDescr[$i]->iid } )) { $json{ $$ifDescr[$i]->iid }->{IFDESCR} = $$ifDescr[$i]->val; $json{ $$ifDescr[$i]->iid }->{IFTAGS} = $TAGSEP . $$ifDescr[$i]->val . $TAGSEP; } } for $i (keys %json) { delete $json{$i} unless (exists( $json{$i}->{IFDESCR} )); } for $i (0..$#$ifType) { if (exists( $json{ $$ifType[$i]->iid } )) { $json{ $$ifType[$i]->iid }->{IFTAGS} .= "Type:" . $$ifType[$i]->val . $TAGSEP; } } for $i (0..$#$ifAdmin) { if (exists( $json{ $$ifAdmin[$i]->iid } )) { $json{ $$ifAdmin[$i]->iid }->{IFTAGS} .= "AdminStatus:" . ( $$ifAdmin[$i]->val == 1 ? "up" : $$ifAdmin[$i]->val == 2 ? "down" : $$ifAdmin[$i]->val == 3 ? "testing" : $$ifAdmin[$i]->val ) . $TAGSEP } } for $i (0..$#$ifInErrors) { if (exists( $json{ $$ifInErrors[$i]->iid } )) { $json{ $$ifInErrors[$i]->iid }->{IFTAGS} .= "Physical" . $TAGSEP; } } for $i (0..$#$ifHCInOctets) { if (exists( $json{ $$ifHCInOctets[$i]->iid } )) { $json{ $$ifHCInOctets[$i]->iid }->{IFTAGS} .= "Counter64" . $TAGSEP; } } for $i (0..$#$ifAlias) { if (exists( $json{ $$ifAlias[$i]->iid } )) { $alias = $$ifAlias[$i]->val; $flag = quotemeta($ARGV[3]) if $ARGV[3]; if ($flag and $alias =~ s/^(.*)$flag\s*/$1/o) { $alias =~ s/\s*$//o; $json{ $$ifAlias[$i]->iid }->{IFTAGS} .= "FLAG" . $TAGSEP; } $json{ $$ifAlias[$i]->iid }->{IFALIAS} = $alias; } } # # Output in JSON format # print "{\"data\":["; $first_data = 1; while (($index, $data) = each %json) { $first_data ? $first_data = 0 : print ","; print "\n{\"{#IFINDEX}\":\"", $index, "\""; while (($macro, $value) = each %$data) { print ",\"{#", $macro, "}\":\"", $value, "\""; } print "}"; } print "]}\n";Last edited by izuchator; 13-01-2015, 06:26.Comment
-
Я тем более не разбираюсь в вашем дистрибутиве. net-snmp это C библиотеки и утилиты, а так же модули Perl, Python и какая то фигня на Tcl. Каким образом и кто собирал в вашем дистрибутиве net-snmp мне не ведомо. Ставить из cpan эти модули не стоит.Comment
-
мне не нужен SNMPv3, что где изменить нужно для использования SNMPv1 и SNMPv2c?"Unknown user name" в виде SNMP ошибки намекает что скрипт пытается лезть по SNMPv3, а сессию выше мы создает только с указанием комьюнити, т.е. только под SNMPv1 и SNMPv2c.
Если вам нужно работать по SNMPv3 то надо поправить скрипт, передавать в него не комьюнити, а юзеров, пароли и что там еще нужно, соответсвенно если кол-во параметров увелится то ниже по тексту так же надо будет сдвинуть индексы в списке @ARGV.Comment
-
Думаю, что стоит явно задать версию протокола snmp при создании экземпляра, если опираться на это:
Version
default taken from library configuration - probably 3 [1, 2 (same as 2c), 2c, 3]Comment
-
Написано же жирным: Update 2. Актуальная версия скрипта, шаблона и regexp в посте 46
Зачем вы мучаете старый скрипт?
P.S. еще нужно прочитать вот это: https://www.zabbix.com/forum/showpos...8&postcount=87Comment
-
-
Он и так 0, по умолчанию. Это тоже там написано.
LLD_IF_REGEX это обычный perl regex, можно использовать все доступные возможности. AdminStatus проверяется в zabbix regex, пример есть на картинке, а отфильтровать "тип 6" можно с помощью. OperStatus скрипт не анализирует вообще, использовать его для фильтрации, мягко говоря, не правильно.Code:{#LLD_IF_REGEX}=,Type:6,Comment
-
скопировал скрипт и импортировал шаблон, фильтр{$mpls_vrf_rd} в шаблоне выставил = 0(был =[d]), регулярные выражения добавил. Повесил шаблон на узел, но ничего не происходит, из командной строки работает. Может я что-то просмотрел?)Он и так 0, по умолчанию. Это тоже там написано.
Lld_if_regex это обычный perl regex, можно использовать все доступные возможности. Adminstatus проверяется в zabbix regex, пример есть на картинке, а отфильтровать "тип 6" можно с помощью. Operstatus скрипт не анализирует вообще, использовать его для фильтрации, мягко говоря, не правильно.Code:{#lld_if_regex}=,type:6,
как проверить что скрипт работает из забикса?Comment
-
'[d]' значение по умолчанию для {$LLD_IF_FLAG}, а {$MPLS_VRF_RD} и так по умолчанию 0 (undef). Прочитайте еще раз пост, там же все подробно расписано, в том числе для чего используется "FLAG".
По "ничего не происходит" нельзя ничего сказать. Может оно и работает, просто интервал дискаверинга в моем шаблоне стоит 3 часа, если я правильно помню. Включите отладку в zabbix, или добавьте отладку в скрипт. Мне отсюда не видно что у вас сконфигурировано, настройка LLD требует аккуратности.Last edited by Jimson; 14-01-2015, 10:19.Comment
-
Никак не получу результат.
есть еще такие сообщенияCode:19679:20150115:132334.014 In substitute_key_macros() data:'cisco_ifmib.pl[{HOST.CONN},{$SNMP_PORT},{$SNMP_COMMUNITY},{$MPLS_VRF_RD},{$LLD_IF_FLAG},{$LLD_IF_REGEX},PHY]' 19679:20150115:132334.014 In substitute_simple_macros() data:'{HOST.CONN}' 19679:20150115:132334.014 End substitute_simple_macros() data:'10.*.*.*' 19679:20150115:132334.014 In substitute_simple_macros() data:'{$SNMP_PORT}' 19679:20150115:132334.014 In DCget_user_macro() macro:'{$SNMP_PORT}' 19679:20150115:132334.014 In DCget_host_macro() macro:'{$SNMP_PORT}' 19679:20150115:132334.014 In DCget_host_macro() macro:'{$SNMP_PORT}' 19679:20150115:132334.014 End of DCget_host_macro():FAIL 19679:20150115:132334.014 End of DCget_host_macro():FAIL 19679:20150115:132334.014 In DCget_global_macro() macro:'{$SNMP_PORT}' 19679:20150115:132334.014 End of DCget_global_macro() 19679:20150115:132334.014 End of DCget_user_macro() 19679:20150115:132334.014 End substitute_simple_macros() data:'161' 19679:20150115:132334.014 In substitute_simple_macros() data:'{$SNMP_COMMUNITY}' 19679:20150115:132334.014 In DCget_user_macro() macro:'{$SNMP_COMMUNITY}' 19679:20150115:132334.014 In DCget_host_macro() macro:'{$SNMP_COMMUNITY}' 19679:20150115:132334.014 In DCget_host_macro() macro:'{$SNMP_COMMUNITY}' 19684:20150115:132334.014 poller #30 [got 0 values in 0.000228 sec, getting values] 19679:20150115:132334.014 End of DCget_host_macro():FAIL 19679:20150115:132334.014 End of DCget_host_macro():FAIL 19684:20150115:132334.014 In get_values() 19679:20150115:132334.014 In DCget_global_macro() macro:'{$SNMP_COMMUNITY}' 19684:20150115:132334.014 In DCconfig_get_poller_items() poller_type:0 19679:20150115:132334.014 End of DCget_global_macro() 19679:20150115:132334.014 End of DCget_user_macro() 19679:20150115:132334.015 End substitute_simple_macros() data:'COMM' 19684:20150115:132334.015 End of DCconfig_get_poller_items():0 19679:20150115:132334.015 In substitute_simple_macros() data:'{$MPLS_VRF_RD}' 19684:20150115:132334.015 End of get_values():0 19679:20150115:132334.015 In DCget_user_macro() macro:'{$MPLS_VRF_RD}' 19684:20150115:132334.015 In DCconfig_get_poller_nextcheck() poller_type:0 19679:20150115:132334.015 In DCget_host_macro() macro:'{$MPLS_VRF_RD}' 19679:20150115:132334.015 In DCget_host_macro() macro:'{$MPLS_VRF_RD}' 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_user_macro() 19679:20150115:132334.015 End substitute_simple_macros() data:'0' 19679:20150115:132334.015 In substitute_simple_macros() data:'{$LLD_IF_FLAG}' 19684:20150115:132334.015 End of DCconfig_get_poller_nextcheck():1421310272 19679:20150115:132334.015 In DCget_user_macro() macro:'{$LLD_IF_FLAG}' 19679:20150115:132334.015 In DCget_host_macro() macro:'{$LLD_IF_FLAG}' 19684:20150115:132334.015 poller #30 [got 0 values in 0.000172 sec, idle 5 sec] 19679:20150115:132334.015 In DCget_host_macro() macro:'{$LLD_IF_FLAG}' 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_user_macro() 19679:20150115:132334.015 End substitute_simple_macros() data:'0' 19679:20150115:132334.015 In substitute_simple_macros() data:'{$LLD_IF_REGEX}' 19679:20150115:132334.015 In DCget_user_macro() macro:'{$LLD_IF_REGEX}' 19679:20150115:132334.015 In DCget_host_macro() macro:'{$LLD_IF_REGEX}' 19679:20150115:132334.015 In DCget_host_macro() macro:'{$LLD_IF_REGEX}' 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_host_macro():SUCCEED 19679:20150115:132334.015 End of DCget_user_macro() 19679:20150115:132334.015 End substitute_simple_macros() data:'0' 19679:20150115:132334.015 End of substitute_key_macros():SUCCEED data:'cisco_ifmib.pl[10.*.*.*,161,COMM,0,0,0,PHY]' 19679:20150115:132334.015 In get_value() key:'cisco_ifmib.pl[{HOST.CONN},{$SNMP_PORT},{$SNMP_COMMUNITY},{$MPLS_VRF_RD},{$LLD_IF_FLAG},{$LLD_IF_REGEX},PHY]' 19679:20150115:132334.015 In get_value_external() key:'cisco_ifmib.pl[{HOST.CONN},{$SNMP_PORT},{$SNMP_COMMUNITY},{$MPLS_VRF_RD},{$LLD_IF_FLAG},{$LLD_IF_REGEX},PHY]' 19679:20150115:132334.015 In zbx_popen() command:'/cisco_ifmib.pl "10.*.*.*" "161" "COMM" "0" "0" "0" "PHY"'
Code:In zbx_waitpid() zbx_waitpid() exited, status:0 End of zbx_waitpid():466 End of get_value_external():SUCCEED End of get_value():SUCCEED In activate_host() hostid:10821 itemid:395552 type:10 End of activate_host() In lld_process_discovery_rule() itemid:395552 query [txnlev:0] [select hostid,key_,state,evaltype,formula,error,lifetime from items where itemid=395552] In substitute_simple_macros() data:'365' query [txnlev:0] [select item_conditionid,macro,value from item_condition where itemid=395552] In lld_rows_get() End of lld_rows_get():FAIL End of lld_process_discovery_rule() End of get_values():1
Last edited by izuchator; 15-01-2015, 11:08.Comment
-
Вот результат постановок:
In zbx_popen() command:'/cisco_ifmib.pl "10.*.*.*" "161" "COMM" "0" "0" "0" "PHY"'
Запускайте ручками и смотрите что получается (звездочки это вы специально поставили, скрываете private адрес?).
Опять же, если у вас элемент-правило с ошибкой пулится, то это вероятнее всего проблемы запуска скрипта из под окружения zabbix_server, например, переменные окружения, ограничения вроде selinux и т.п. Если же ошибки нет, но и элементы не создаются, значит ошибка в конфигурации правила, скорее всего в "фильтре".Comment
-
проблема решилась маленьким переделыванием скрипта, убрана последняя запитая в JSON после чего все заработало.
Code:my $i = 0 ; while (($index, $data) = each %json) { if ($i) { print ",";} $i += 1; print '{"{#IFINDEX}":"', $index, '"'; while (($macro, $value) = each %$data) { print ',"{#', $macro, '}":"', $value, '"'; } print "}";Comment
Comment