snmpwalk随机返回更少的变量(以snmpv2-mib :: snmpsetserialno.0结尾)



我正在创建新的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 all)中发生这种情况时,snmpagent返回为最后一个变量 snmpv2-mib :: snmpsetserialno.0 ,它不在OID树中。当正确返回树的所有变量时,这不会发生在运行中。

跟踪模式输出:

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 +++

感谢您的提示。

我仅使用一个默认公共社区,一个用户和一个组来解决问题。该小组必须只能访问一个具有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

定义了多个子树的一个视图,但是没有比"所有"one_answers" SystemView"的视图更多的视图。

access  notConfigGroup ""      any       noauth    exact  all none none

notConfigGroup可以访问"所有"视图。

最新更新