SNMP Manager
SNMP Manager 用于采集 Agent 的 OID、执行 Set、GetNext、Walk、GetBulk,并接收 Trap/Inform。插件名称为“SNMP Manager”,类型标识为 SnmpManagerMaster。公共操作见采集配置。Manager 连接 Agent,不会自动把网关变为 SNMP Agent。
建立通道和设备
进入“开发配置 → 采集配置”,创建 UDP 通道,设置本地绑定与 Agent 地址,通常远端端口 161。添加 SNMP Manager 设备,选择匹配的版本和安全参数,保存并启用。
| 参数 | 说明 |
|---|---|
| SNMP 版本 | V1、V2c、V3;认证失败不会降级版本。V1 不使用 GetBulk。 |
| Community | V1/V2c 的访问凭据,须与 Agent 和通知发送端一致。 |
| USM 用户名、contextName | V3 的用户和上下文;按目标 Agent 配置填写。 |
| USM 安全级别 | NoAuthNoPriv、AuthNoPriv、AuthPriv;认证和加密算法须与该级别一致。 |
| USM 认证算法、口令 | 认证支持 MD5、SHA1;按设备能力选择。口令不放入变量地址。 |
| USM 私密算法、口令 | AuthPriv 使用 AES128,并配置对应认证参数。 |
| 请求超时毫秒 | 100–120000,默认 3000。 |
| 最大报文字节数 | 默认 65507,限制 Manager 请求和响应的完整 BER 编码,包括认证、加密与变量绑定开销。V1/V2c 最少 64,V3 最少 484,V3 按此值声明 msgMaxSize。 |
| 最大 Walk varbind 数 | 1–4096,默认 1024,防止无限遍历。 |
| GetBulk repetitions | 1–128,默认 16;单次响应预算最多 512 个 varbind,设备不支持时 Walk 自动回退 GetNext。 |
| 启用 Trap/Inform 接收 | 使用本设备独立拥有的通知监听端口;无需另建采集通道。 |
| 通知监听地址、端口 | 默认 0.0.0.0:162,应选择允许的网卡与空闲端口,避免多个设备重复绑定。 |
| 通知权威引擎 ID | V3 通知必填,5–32 字节十六进制;同一接收端保持稳定且唯一。 |
| 最近通知缓存数 | 1–1024,默认 64,仅保留最近有限通知。 |
| 通知最大数据报字节数 | 默认 65507,独立限制 Trap/Inform 接收及确认报文;V1/V2c 最少 64,V3 最少 484。 |
配置 OID 变量
{"oid":"1.3.6.1.2.1.1.3.0","syntax":"TimeTicks"}
OID 使用数字形式,可带一个前导点。地址应从目标 MIB 和 Agent 实际数据确认,不能根据示例假定可写。
| syntax | 值和类型说明 |
|---|---|
| Integer | 有符号 32 位整数,范围 -2147483648~2147483647,以 JSON 数值显示。 |
| BitString | ASN.1 BIT STRING 显示并写入为按最高有效位优先排列的 JSON Boolean 数组。 |
| Counter32、Gauge32、TimeTicks | 无符号 32 位数;Unsigned32 使用同一 Gauge32 编码,TimeTicks 单位为百分之一秒。 |
| Counter64 | 无符号 64 位计数;前端或下游处理时注意大整数精度。 |
| OctetString、Opaque | JSON 值为 Base64 字符串,保留二进制内容,不按 UTF-8 自动猜测。 |
| ObjectIdentifier、IpAddress | 分别使用数字 OID 字符串与 IPv4 字符串。 |
| Null、NoSuchObject、NoSuchInstance、EndOfMibView | 空值或远端异常语义;异常项不作为正常采集值。 |
例如文本 browser-set 的 OctetString 值为 JSON 字符串 "YnJvd3Nlci1zZXQ="。SNMPv2 MIB 的 BITS 通常以 OCTET STRING 承载,应按 MIB 解释位;独立 ASN.1 BIT STRING 则使用 JSON Boolean 数组,例如 [true,false,true]。
读写均校验语法的数值范围。超出 Integer 或无符号 32 位类型范围的值会被拒绝,不会截断为较小数值;需要无符号 64 位计数时选择 Counter64,并使用 v2c/v3。IpAddress 值必须为四字节 IPv4;将十六字节 IPv6 数据编码成该语法会报协议错误。
V1 响应不允许包含 Counter64、NoSuchObject、NoSuchInstance 或 EndOfMibView,错误状态只能为 0–5。收到这些 v2c/v3 专用语法或扩展错误状态时,本次读取报协议错误;请核对主站、Agent 和通知发送端的协议版本。V1 查询不存在的对象应由 Agent 返回 noSuchName。
使用地址字段编辑器
- 在设备“实时变量”页新增或编辑变量,点击“变量地址”右侧的“字段编辑”。
- 填写完整数字 OID,并选择 MIB 规定的 ASN.1 类型。可以输入一个前导点,回填时统一为无前导点形式。
- 点击“确认并回填”,检查生成的 oid 与 syntax,再点击变量窗口的“确定”。重新打开字段编辑器,核对保存结果。

NoSuchObject、NoSuchInstance、EndOfMibView 属于响应异常,不应作为变量配置类型;V1 变量不能使用 Counter64。取消字段窗口会放弃本次修改。
检查实时变量和通知
保持当前设备,在采集工作区顶部切换到“实时变量”标签,核对 OID、当前值、在线状态、采集时间和错误。正常 Get 的采集时间持续推进;值相同时变化时间保持不变。启用通知接收后,匹配变量的 Trap/Inform 也会更新当前值和时间;OctetString 按 Base64 显示。

从 Agent 发送新通知后,同时在专属调试“Trap / Inform”页确认来源、OID、通知内容和 Inform 确认状态。收到通知不代表 Manager Get 成功,两条路径应分别检查。
专属调试
选中设备,打开顶部“协议调试”。第一个页签“核心状态”集中显示连接、安全参数、报文预算和通知监听状态。
使用工作区顶部“刷新”更新状态。Trap/Inform 通知列表默认每页 20 项,可切换页码和每页数量;通知更新后保留当前页。通知列表分页不改变 GetBulk repetitions 或 Manager 报文字节预算。
- 在“读取”输入 OID,执行 Get;GetNext 返回字典顺序的下一个 OID,应核对返回地址。
- 在“批量 Get”逐行输入包含 oid 与 syntax 的变量地址 JSON,最多 32 项。
- “执行 Walk”输入根 OID 和上限;只遍历该子树,达到上限即停止。V1 逐项 GetNext,V2c/V3 先使用 GetBulk,设备明确拒绝时自动改为 GetNext。
- “GetBulk”填写 OID、nonRepeaters、maxRepetitions。V1 改用 GetNext/Walk。
- “写入”填写
{oid,syntax}地址和强类型 JSON 值,经确认后执行 Set,再用 Get 读回。Set 必须收到正确 OID、类型和值的远端回显才成功。 - “Trap / Inform”检查版本、通知类型、来源、USM 用户和 Varbind。Inform 显示“已确认”时表示接收端已发送确认;Trap 不提供可靠交付保证。
分批、分包和小型 Agent
周期采集默认逐 OID Get,每个变量独立确认,适合只接受单点读取或报文预算很小的 Agent。调试批量 Get 最多 32 个 OID;单次 Manager 请求最多 128 个 varbind。v1 不发送 GetBulk;v2c/v3 的 GetBulk 受最多 128 个 repetitions、单次 512 个 varbind 和响应字节上限共同约束。WalkBulk 收到 Agent 的协议拒绝时,会保留已经成功的页,从最后成功 OID 改用 GetNext 续读;首页就被拒绝时从根 OID 开始。整次遍历和回退共用一个总期限,不会重新扫描成功页或延长期限;畸形 BER、OID 不递增、错误来源或超时不会伪装成成功。
下图在 64 字节 Manager 预算、repetitions 为 1 的条件下取得四项结果:首个 Bulk 页成功,下一页被 Agent 拒绝,随后以 GetNext 继续。核对最终 OID 顺序和数量,避免只查看第一项就结束验证。

回退中的单点请求无响应时,整次 Walk 以总期限错误结束,不返回半份成功。用户主动取消则显示取消;排除异常后,使用读取页重新 Get,确认正常请求已经恢复。
Trap/Inform 使用独立通知监听器和独立接收状态,不占用 Manager 请求等待池。通知监听启用后,Debug 页面每 1.5 秒刷新一次监听状态;Manager 最近响应与 Trap/Inform 最近通知分别判断,不能用其中一个替代另一个。
V1 Trap 头部的 agent-addr 必须为四字节 IPv4,generic-trap 为 0~6,specific-trap 为有符号 32 位整数,时间戳为 0~4294967295 的 TimeTicks。非法头部会记录通知解析错误,不进入最近通知缓存、不更新变量;修正发送端后,合法通知可继续接收。
community、USM 用户名和 contextName 使用配置要求的可打印 ASCII,身份按字节精确匹配。? 是普通字符,不是通配符;其他编码的字节不能替换为 ? 后使用。身份不符或编码非法的响应不会完成当前读取或刷新最近响应时间,通知不会进入缓存或更新变量。排查时核对发送端的实际身份字节,修正后可继续使用原连接验证。
SNMP 不在应用层拆分一份 BER 报文。小型 Agent 建议先使用单点 Get,GetBulk repetitions 从 1 开始;按设备或链路能力配置完整报文预算。返回值长度事先未知,varbind 数量小也可能超出字节预算;此时应减少 repetitions 或逐点读取。单个 OID 的返回值仍超限时必须调整设备数据或预算,不能把截断结果当成完整值。
例如 v2c 的 Manager 完整报文上限设为 64 字节、repetitions 设为 1 后,先在读取页验证一个较短的 TimeTicks 标量。该设置不保证较长字符串或多个 OID 也能装入相同预算。v3 的完整报文下限为 484 字节,需包含 USM 安全封装。


核心 Manager 状态与通知监听状态分开显示。没有周期采集或 Get 时 Manager 可能离线,而通知监听仍在线;应分别检查最近响应和最近通知时间。
特殊方法
打开“协议调试”,选择“核心状态”右侧的“特殊方法”进入方法面板。
切换“特殊方法”可执行 GetAsync、GetBatchAsync、GetNextAsync、WalkAsync、GetBulkAsync、SetAsync 和 GetNotifications。批量参数 objectIdentifiersJson 是 OID 字符串数组。Set 的 addressJson 是地址 JSON 字符串,valueJson 是强类型 JSON 文本。
JSON 参数按方法参数顺序填写数组,可省略使用默认值的尾部参数,也可使用“字段编辑”。例如执行 GetAsync:
["1.3.6.1.2.1.1.3.0"]
不需要参数的 GetNotifications 使用 []。专属批量页填写变量地址 JSON,特殊方法批量填写 OID 字符串数组,两者应按各自字段说明输入。

故障处理
| 现象 | 检查与处理 |
|---|---|
| 请求超时 | 核对通道远端、UDP 161、防火墙、版本与 community;不自动切换版本。 |
| V3 发现或认证失败 | 核对用户名、context、算法和口令、Agent engine boots/time,确认设备重启及时间窗。 |
| noSuchObject/noSuchInstance | 核对 MIB、实例后缀 .0、版本及用户 view 权限。 |
| Set wrongType/noAccess | 使用 MIB 声明类型和允许写范围;不要通过更换类型盲试生产 OID。 |
| Walk 过早停止 | 检查返回 OID 是否离开子树、EndOfMibView 或数量上限。 |
| 通知为空 | 核对监听地址/端口、发送端目标、community/USM 用户、通知版本与防火墙。 |
| Inform 重复 | 发送端未确认收到 ACK 时可以重发;接收端重复确认但不重复投递变量。 |