【问题标题】:shell script for Net-snmp (get/walk) is not efficientNet-snmp (get/walk) 的 shell 脚本效率不高
【发布时间】:2012-11-05 08:47:08
【问题描述】:
#!/bin/bash
for i in `seq 1 3000`
do
    index=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.1.$i` 
done

for i in `seq 1 3000`
do
    upload=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.10.$i` 
done

for i in `seq 1 3000`
do
    download=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.11.$i` 
done

(ubuntu-12.04) 以上是我的shell脚本......每次执行snmpget命令它都会返回一个整数并将值存储在上述三个变量中...... 问题是数据表有 9000 个值。因此,使用此脚本会消耗太多时间和 betelnake。

任何人都可以建议我一些简单的“SNMPWALK”(或其他任何东西)使用脚本,我可以将所有这些数据存储到单个数组 [9000] 或三个解析中,在三个不同的数组中,索引为 1 到3000.so 我可以尽可能地减少时间。

例如:snmpwalk -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067 给出所有值,但我不知道如何将所有这些值存储在具有不同索引的数组中。 ..................................................... ......

请参阅我在下面尝试过:但给我错误...

cat script.sh

 #!/bin/sh
OUTPUT1=$(snmpbulkwalk -Oqv -c public -v 2c localhost 1.3.6.1.2.1.2.2.1.1 2> /dev/null)
i=1
for LINE in ${OUTPUT1} ;
    do
        OUTPUT1[$i]=$LINE;
        i=`expr $i + 1`
    done

sh script.sh
j4.sh: 6: j4.sh: OUTPUT1[1]=1: not found
j4.sh: 6: j4.sh: OUTPUT1[2]=2: not found

【问题讨论】:

    标签: bash shell snmp net-snmp


    【解决方案1】:

    试试这样的:

    OID="1.3.6.1.4.1.21067.4.1.1"
    
    declare -a index=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.1))
    declare -a upload=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.10))
    declare -a download=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.11))
    
    echo "retrieved ${#index[@]} elements"
    echo"#${index[1]}: up=${upload[1]} down=${download[1]}
    

    注意,一般来说,我建议使用一些高级语言(如 python)而不是 bash 来更有效地使用 snmp...

    【讨论】:

    • 实际上我在脚本方面非常新。它向我显示语法错误“(”在第 3 行意外。看到这些是我的供应商特定的 mib...就像 ifindex、ifInoctets、ifOutoctects
    • 我看到您已经在使用 SNMPv2c。尝试使用 snmpbulkwalk 或 snmpbulkget 来加快数据检索过程。这是 snmpbulkwalk 手册页。请注意,您可以特别使用 -Cr 和 -Cn 选项来配置此命令。 snmpbulkwalk 通过避免大量的小型 PDU 来最小化网络流量,此外它还限制了 PDU 打包/解包调用的数量。
    • 似乎您将 stderr-redirection 拆分为两行(确保 2>/dev/null 在同一行 #2)
    • 你确定你在运行bash吗?尝试将 shebang 从 #!/bin/sh 更改为 #!/bin/bash
    • 我正在使用 bash.. 但问题是 bash 版本是 1.4 并且它不支持数组。
    【解决方案2】:

    我建议如果您要检索的表使用 SNMPTABLE 而不是 walk 或 get。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多