我正在创建新的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
它有时返回较少的变量,遍历时间明显减少。
当在跟踪模式(-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
当使用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
定义了多个子树的一个视图,但没有比“all”和“systemview”更多的视图。
access notConfigGroup "" any noauth exact all none none
notConfigGroup可以访问“所有”视图。