摘要

  • RFC 1451 让一台 SNMPv2 管理站同时扮演代理,为其他管理站执行周期性监测服务。
  • Alarm、Event 与 Notification 三张表分别记录采样条件、事件定义与面向特定目标的 InformRequest 投递关系。
  • 通知行有独立的生存时间;倒计时归零便销毁,告警与事件定义却不必随之消失。

管理站也可以成为被管理的服务

RFC 1451 面对的是规模问题:大型网络或跨管理域环境不可能总由一个控制台完成所有监测。一台站点可以接收另一台站点的服务请求,再以管理者身份去查询目标对象。它对上游像代理,对下游像管理者。

这种双重身份没有把流程压成一张表。Alarm 表决定监测什么、多久看一次、哪些阈值构成边界;Event 表决定越界后引用哪种事件;Notification 表再决定把该事件送往哪个上下文,以及如何重试。配置了一项监测,并不自动意味着存在事件,也不自动意味着有人订阅。

采样值属于刚刚结束的时间窗

告警可以比较绝对值,也可以比较相邻两个采样周期末端的差值。snmpAlarmValue 只在采样周期完成后出现,代表上一段已经闭合的观察;当前周期在结束前不可见。协议因此没有声称连续观测。

被测对象还必须解析为规定的整数类 ASN.1 类型。若统计量无法放进告警对象的 32 位有符号表示,具体如何截断由实现决定。名称、原始量、采样算法与最终显示数值之间,至少隔着时间窗和表示范围两层转换。

委托监测不能绕过访问控制

Alarm 表不得成为读取隐藏 MIB 对象的旁路。采样查询指向明确的上下文,并须使用对该上下文有访问权限的源方与目标方。RFC 1445 提供了当时的 party、context 与访问策略框架。能建立监测请求,不代表因此获得新的读取权限。

如果查询明确返回未授权、对象不存在或语法不合,双重角色管理站会生成一次对象不可用事件并销毁告警行。若只是没有响应,它可以判断通信已经不可能而销毁行,也可以只删除最新值、继续尝试,并在通信恢复后重建数值。相同的“没有读数”表象可以来自不同状态机。

滞回让事件只属于一次转折

数值越过上阈值后,不会不断生成上升事件;它必须先跌到下阈值,才有资格再次形成上升事件。下降方向同理。滞回减少了边界附近的抖动,也让“数值仍高”与“刚发生新的上升事件”成为不同事实。

首次启用后的样本还有单独的启动策略。配置可以选择在第一笔值已位于阈值之外时生成事件。于是事件计数依赖的不只是数值,还依赖激活时点、历史方向和启动选择。

阈值越界仍可能没有事件

上升、下降与不可用条件各自保存一个 Event 表索引。零不是有效索引;找不到对应行的编号也不形成关联。探测器可以处于 active,阈值也确实越过,但下一层没有被接上。

Event 行保存事件类型 OID、本地生成次数,以及最近一次生成时的本地 sysUpTime。这些字段证明生成者如何记账,不能证明远端管理站收到了多少次。

请求的重试并非实际执行的重试

Notification 行以事件和目标上下文为索引。请求方写入希望使用的重传间隔与次数;实现可以把过短间隔提高到本地最小值,也可以把过多次数压到本地最大值。愿望写进表中,不等于资源约束会原样执行。

1993 年的 InformRequest 操作来自 RFC 1448。后来的 RFC 3416 把 InformRequest 称为有确认的通知机制,同时明确说投递没有保证。合法请求到达后,接收实体把内容交给相应应用并产生响应。响应比无确认 trap 多一层证据,却仍不证明事件真实、有人阅读或问题已修复。

订阅关系会在一天后自行消失

snmpEventNotifyLifetime 以秒倒数,默认值为 86,400。归零时,对应 Notification 行的状态被设为 destroy。使用该行的管理站必须周期性刷新,才能维持持续投递。

过期发生在事件与某个目标之间的关系上。规范没有说这会反向删除 Alarm 或 Event 行。于是生成端可以继续采样、越界和记数,某个接收方的通知路径却已经不存在。只检查告警定义,会把“还能发现”误判成“还能告知”。

后来的架构没有取消证据边界

RFC 1451 的官方记录 现将其列为 Historic,不能据此推断今天的部署。RFC 3413 后来分别定义通知发起者、接收者、目标、过滤器与代理转发者。本文只用它标示演进边界,不把 2002 年机制倒写进 1993 年。

RFC 1451 自己也说明没有讨论安全问题。引用访问控制框架不等于证明某个现实系统经过认证、保密或正确授权。

来源