Snmpwalk随机返回较少的变量(以SNMPv2-MIB :: snmpSetSerialNo.0结尾)

时间:2019-03-17 23:15:40

标签: snmp mib snmpd

我正在创建新的MiB,其中包括对象groupProcessInfo,该任务将返回X应用程序进程的状态,其中X替换为应用程序的名称。

MiB中的每个过程的定义如下:

appXState OBJECT-TYPE
        SYNTAX          OCTET STRING (SIZE(0..255))
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION     "X service"
        ::= { groupProcessInfo 10 1 }
appXMemUsage OBJECT-TYPE
        SYNTAX          Integer32
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION     "X service"
        ::= { groupProcessInfo 10 2 }

并分配给对象:

groupProcessInfo OBJECT IDENTIFIER ::= { myMIB 1 }

有一个主要的bash脚本,它使用实用程序或其他bash脚本找出进程的状态,这些脚本花费的时间不同,因此在snmpwalk或snmpget时,我需要指定更大的超时时间(-t)。

使用以下命令将主要的bash脚本传递给snmpd.conf:

pass .1.3.6.1.4.1.x.y.3.10 /etc/snmp/scripts/process.sh

当我尝试使用snmpget或snmpgetnext获取appXState或appXMemUsage的值时,它可以工作,并且始终返回正确的值,但是snmpwalk不能按预期工作。

当我运行此命令时:

$ snmpwalk -Cp -Ct -v 2c -t 20 -m +MY-MIB -c testing localhost groupProcessInfo

它有时返回的变量较少,而遍历时间却少得多。

注意:

1。 Snmpwalk跟踪模式

在跟踪模式(-D全部)下发生此情况时,snmpagent作为最后一个变量 SNMPv2-MIB :: snmpSetSerialNo.0 返回,该变量不在OID树中。正确返回tree中的所有变量时,在运行中不会发生这种情况。

跟踪模式输出:

trace: snmp_comstr_parse(): snmp_auth.c, 130:
dumph_recv:   SNMP version
dumpx_recv:    02 01 01
dumpv_recv:      Integer:       1 (0x01)
trace: snmp_comstr_parse(): snmp_auth.c, 142:
dumph_recv:   community string
dumpx_recv:    04 07 74 65 73 74 69 6E 67
dumpv_recv:      String:        testing
trace: _snmp_parse(): snmp_api.c, 4142:
dumph_recv:   PDU
trace: snmp_pdu_parse(): snmp_api.c, 4362:
dumpv_recv:     Command RESPONSE
trace: snmp_pdu_parse(): snmp_api.c, 4447:
dumph_recv:     request_id
dumpx_recv:      02 04 0E 5E DD 9C
dumpv_recv:        Integer:     241098140 (0xE5EDD9C)
trace: snmp_pdu_parse(): snmp_api.c, 4458:
dumph_recv:     error status
dumpx_recv:      02 01 00
dumpv_recv:        Integer:     0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4469:
dumph_recv:     error index
dumpx_recv:      02 01 00
dumpv_recv:        Integer:     0 (0x00)
trace: snmp_pdu_parse(): snmp_api.c, 4487:
dumph_recv:     VarBindList
trace: snmp_pdu_parse(): snmp_api.c, 4503:
dumph_recv:       VarBind
trace: snmp_parse_var_op(): snmp.c, 164:
dumph_recv:         Name
dumpx_recv:          06 0A 2B 06 01 06 03 01 01 06 01 00
dumpv_recv:            ObjID: SNMPv2-MIB::snmpSetSerialNo.0
trace: snmp_pdu_parse(): snmp_api.c, 4512:
dumph_recv:         Value
dumpx_recv:          02 04 12 55 CB EF
dumpv_recv:            Integer: 307612655 (0x1255CBEF)
trace: _sess_process_packet(): snmp_api.c, 5244:
sess_process_packet: received message id#0 reqid#241098140 len 50
trace: snmp_synch_input(): snmp_client.c, 183:
snmp_synch: Response (ReqID: 241098140 - Cmd 162)
Variables found: 11
Total traversal time = 7.302387 seconds

2。 strace snmpwalk

使用strace实用程序运行以上命令时,返回的变量较少时,其行为就像返回了所有变量并且脚本结束而没有错误。

exit_group(0)                           = ?
+++ exited with 0 +++

谢谢您的提示。

1 个答案:

答案 0 :(得分:0)

我设法仅使用一个默认的公共社区,一个用户和一个小组来解决此问题。该组只能访问具有多个OID子树定义的视图:

com2sec notConfigUser    default          public

仅在com2sec行上定义了社区,而在其他地方则没有定义。

view    all           included   .1.3.6.1.4.1.x.y
view    all           included   .1.3.6.1.4.1.2021
view    all           included   .1                         80
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    systemview    included   .1.3.6.1.4.1

定义了一个可查看多个子树的视图,但是视图的数目不超过“全部”和“系统视图”。

access  notConfigGroup ""      any       noauth    exact  all none none

notConfigGroup有权访问“所有”视图。