我正在创建新的 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 +++
谢谢你的提示。