PRTG 网络监视器的 PowerShell 脚本
PowerShell script for PRTG Network Monitor
我目前正在使用 PRTG 来监控 Juniper EX4300 交换机的接口属性。
为此,我想获取字符串形式的“ifDescr”、字符串形式的“ifAlias”、整数形式的“ifAdminStatus”、整数形式的“ifOperStatus”、整数形式的“IfInErrors”和“IfOutErrors” " 作为整数。我想按原样使用前两个字符串值,没有任何警报。 “ifOperStatus”和“IfInErrors”应该在值大于 1 时通过查找文件进行转换和触发。当最后两个值高于 0 时,传感器限制器将触发它们。所有这些值必须在整个时间内保持最新,并且应该列出每个操作并仅在一个传感器中完成界面,以保持对重要价值的看法结构化和清晰。
在研究过程中,我发现这并不像我想象的那么容易。满足我需求的唯一解决方案似乎是基于 PowerShell 的脚本传感器。
如果有其他方法,请告诉我。
我没有编写 PowerShell 脚本的经验。所以我会很高兴得到一些帮助,特别是从两个 SNMP table 传感器获取值到我的 PowerShell 脚本中。
此致,
SAM_N
第一部分与 SNMP 和查找相关 - 以下内容应该可以帮助您在 PRTG 中实现:SNMP Custom String Lookup Sensor
第二部分 - 要组合来自一个(两个或多个)不同传感器的两个值,您应该使用 PRTG Sensor Factory Sensor - 如果需要,您甚至可以对这些值进行一些计算。无需编程
例子
假设您有一个传感器从 SNMP 中提取一个值 - 该传感器的 ID 为 100,并且您的值存储在通道 0
ID 为 101 的第二个传感器正在将不同的 SNMP 值拉到通道 0
使用 PRTG 传感器工厂传感器,您可以创建新的(第三个)传感器,其通道定义如下:
#1:SUM_OF_VALUES
Channel(100,0) + Channel(101,0)
这意味着它将把来自两个传感器的值添加到您新创建的名为“SUM_OF_VALUES”的通道中。你可以
您始终可以使用 PowerShell 从 SNMP 中提取数据,但 PRTG 拥有无需编程即可实现的工具。如果您仍想在 PowerShell 中执行此操作,请提出新问题并提供详细信息,我可以进一步帮助您使用 PowerShell 脚本
如果有帮助请告诉我
编辑
这个简单的脚本应该可以帮助您开始使用传感器 - 它会收集 $ifaceNumbers 数组中列出的接口的描述和错误数量。
这个脚本可以放在 PRTG 探针的 EXE 目录中(不是 EXEXML 因为这不会生成 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)"
我目前正在使用 PRTG 来监控 Juniper EX4300 交换机的接口属性。
为此,我想获取字符串形式的“ifDescr”、字符串形式的“ifAlias”、整数形式的“ifAdminStatus”、整数形式的“ifOperStatus”、整数形式的“IfInErrors”和“IfOutErrors” " 作为整数。我想按原样使用前两个字符串值,没有任何警报。 “ifOperStatus”和“IfInErrors”应该在值大于 1 时通过查找文件进行转换和触发。当最后两个值高于 0 时,传感器限制器将触发它们。所有这些值必须在整个时间内保持最新,并且应该列出每个操作并仅在一个传感器中完成界面,以保持对重要价值的看法结构化和清晰。
在研究过程中,我发现这并不像我想象的那么容易。满足我需求的唯一解决方案似乎是基于 PowerShell 的脚本传感器。 如果有其他方法,请告诉我。
我没有编写 PowerShell 脚本的经验。所以我会很高兴得到一些帮助,特别是从两个 SNMP table 传感器获取值到我的 PowerShell 脚本中。
此致,
SAM_N
第一部分与 SNMP 和查找相关 - 以下内容应该可以帮助您在 PRTG 中实现:SNMP Custom String Lookup Sensor
第二部分 - 要组合来自一个(两个或多个)不同传感器的两个值,您应该使用 PRTG Sensor Factory Sensor - 如果需要,您甚至可以对这些值进行一些计算。无需编程
例子
假设您有一个传感器从 SNMP 中提取一个值 - 该传感器的 ID 为 100,并且您的值存储在通道 0
ID 为 101 的第二个传感器正在将不同的 SNMP 值拉到通道 0
使用 PRTG 传感器工厂传感器,您可以创建新的(第三个)传感器,其通道定义如下:
#1:SUM_OF_VALUES
Channel(100,0) + Channel(101,0)
这意味着它将把来自两个传感器的值添加到您新创建的名为“SUM_OF_VALUES”的通道中。你可以
您始终可以使用 PowerShell 从 SNMP 中提取数据,但 PRTG 拥有无需编程即可实现的工具。如果您仍想在 PowerShell 中执行此操作,请提出新问题并提供详细信息,我可以进一步帮助您使用 PowerShell 脚本
如果有帮助请告诉我
编辑
这个简单的脚本应该可以帮助您开始使用传感器 - 它会收集 $ifaceNumbers 数组中列出的接口的描述和错误数量。 这个脚本可以放在 PRTG 探针的 EXE 目录中(不是 EXEXML 因为这不会生成 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)"