Сценарий PowerShell для сетевого монитора PRTG - PullRequest
0 голосов
/ 06 августа 2020

В настоящее время я работаю с PRTG, чтобы отслеживать свойства интерфейса коммутатора Juniper EX4300.

Для этого я хочу получить ifDescr в виде строки, ifAlias ​​в виде строки, ifAdminStatus "как целое число," ifOperStatus "как целое число," IfInErrors "как целое число и" IfOutErrors "как целое число. Я хочу использовать первые два строковых значения так, как они есть, без каких-либо предупреждений. «IfOperStatus» и «IfInErrors» должны быть преобразованы и активированы, когда значение больше 1, через файл поиска. Последние два значения будут активированы ограничителем датчика, когда они будут выше 0. Все эти значения должны быть актуальными в течение всего времени, а операции должны быть перечислены и выполнены только в одном датчике для каждого. интерфейс, чтобы видение важных ценностей было структурированным и ясным.

В ходе исследования я обнаружил, что это не так просто, как я думал. Единственное решение для моих нужд - датчик сценария на основе PowerShell. Если есть другой способ, дайте мне знать.

У меня нет опыта программирования сценариев PowerShell. Поэтому я был бы очень рад некоторой помощи, особенно для получения значений от двух датчиков таблицы SNMP в моем сценарии PowerShell.

С уважением,

SAM_N

1 Ответ

0 голосов
/ 06 августа 2020

Первая часть была связана с SNMP и поиском - следующее должно помочь вам добиться этого в PRTG: Датчик поиска настраиваемой строки SNMP

Вторая часть - для объединения двух значений из одного (двух или больше), вы должны использовать PRTG Sensor Factory Sensor - вы можете даже выполнить некоторые вычисления с этими значениями, если вам нужно. Программирование не требуется.

Пример

Допустим, у вас есть один датчик, извлекающий одно значение из SNMP - этот датчик имеет идентификатор 100, и ваше значение сохраняется в канале 0

Второй датчик с идентификатором 101 подтягивает другое значение SNMP к каналу 0

С PRTG Sensor Factory Sensor вы создаете новый (третий) датчик, который будет иметь следующее определение канала:

#1:SUM_OF_VALUES
Channel(100,0) + Channel(101,0) 

Это означает, что добавит значения от обоих датчиков в ваш вновь созданный канал с именем "SUM_OF_VALUES". Вы можете

Вы всегда можете использовать PowerShell для извлечения данных из SNMP, но у PRTG есть инструменты для этого без программирования. Если вы все еще хотите сделать это в PowerShell, задайте новый вопрос с подробностями, и я могу дополнительно помочь вам с помощью сценария PowerShell

Сообщите мне, поможет ли это

EDIT

Это Простой скрипт должен помочь вам начать работу с вашим датчиком - он будет собирать описание и количество ошибок для перечисленных интерфейсов в массиве $ ifaceNumbers. Этот сценарий можно поместить в EXE-каталог зонда PRTG (не EXE XML, так как он не генерирует XML в качестве вывода).

Измените номера интерфейсов (с 1 и 12 на ваши числа) и измените строку сообщества и IP и попробуйте сначала запустить его вручную в Powershell IDE / Powershell

Удачи

### source: https://www.cisco.com/c/en/us/support/docs/ip/simple-network-management-protocol-snmp/26007-faq-snmpcounter.html
#
# ifInNUcastPkts (.1.3.6.1.2.1.2.2.1.12)    These are counts of inbound broadcast and multicast packets.
# ifInDiscards (.1.3.6.1.2.1.2.2.1.13)  These are counted as no buffers as reflected in the show interfaces command.
# ifInErrors (.1.3.6.1.2.1.2.2.1.14)    These are counts of all input errors as reflected in the show interfaces command.
# ifInUnknownProtos (.1.3.6.1.2.1.2.2.1.15)     These are counted as unclassified errors.
# ifOutOctets (.1.3.6.1.2.1.2.2.1.16)   These are counts of the number of bytes output by the interface as shown in the show interfaces command.
# ifOutUcastPkts (.1.3.6.1.2.1.2.2.1.17)    These are counts of outbound broadcast and multicast packets.
# ifOutDiscards (.1.3.6.1.2.1.2.2.1.19)     These are counted as output drops as shown in the show interfaces command.
# ifOutErrors (.1.3.6.1.2.1.2.2.1.20)   These are counted as output errors as shown in the show interfaces command.
# ifOutQLen (.1.3.6.1.2.1.2.2.1.21)     This is the number of packets allowed to be on the output queue as shown in the show interfaces command.
#
# desctiption .1.3.6.1.2.1.2.2.1.2
### 

$OIDDescripiton = ".1.3.6.1.2.1.2.2.1.2"
$OIDErrors = ".1.3.6.1.2.1.2.2.1.20"
$ifaceNumbers = @(1,12)
$state=0 # OK state
$cntErrors=0
$msg = "All interfaces are ok - no errors found"

function getSNMPValue ($oid)
{
    $snmp = New-Object -ComObject olePrn.OleSNMP
    $snmp.open('192.168.1.1','secretCommunityString',2,1000)
    return $snmp.get($oid)
}
foreach ($ifaceNum in $ifaceNumbers)
{
    $oid = ("{0}.{1}" -f $OIDDescripiton, $ifaceNum )
    $descr = getSNMPValue -oid $oid
    $oid = ("{0}.{1}" -f $OIDErrors, $ifaceNum )
    $errors = getSNMPValue -oid $oid

    if ([int]$errors -gt 0) { 
        $state=1; # ERROR state
        $cntErrors +=1; 
        $msg="$($descr) has $($errors) errors" 
    } 
}

# writing output to PRTG probe
echo "$($state):$($cntErrors) $($msg)" 
...