snmp - 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
定义了多个子树的一个视图,但没有比“all”和“systemview”更多的视图。
access notConfigGroup "" any noauth exact all none none
notConfigGroup 有权访问“全部”视图。
推荐阅读
- javascript - (XPages/Javascript)点击按钮导出excel
- python-3.x - python的最佳copula包
- python - 尝试通过 Python 复制 Excel 数据透视函数
- javascript - 任何替代解决方案?
- google-cloud-firestore - 从跨平台 xamarin 项目连接 Cloud Firestore 数据库
- android - 使用 React 原生导航实现 android 原生侧边栏
- python - 无法使用 Python 请求/urllib 模块读取印地语/天城文
- .net - 时区更改后授权码立即过期
- python-3.x - `vispy.visuals.GraphVisual` 没有可用的示例。我的代码只显示空白屏幕
- javascript - onsubmit 事件处理程序 javascript 不起作用