默认情况下,SNMP 监视在 Messaging Server 中是禁用的。试图最小化默认 Messaging Server 配置表示的服务数时选择默认设置。不要将此默认设置理解为使用 SNMP 监视会引起性能损耗。实际上,Messaging Server 的 SNMP 支持消耗非常少的资源,对 Messaging Server 的影响很小。当然,必须要注意的一点是,使用 Messaging Server 的 SNMP 支持之前需要一次性配置步骤。此外,平台 Net-SNMP 主代理的默认配置(snmpd)通常需要更改,以便运行子代理,如 Messaging Server。 该更改是下一节讨论的主题。
Messaging Server 基于 Net-SNMP 的 SNMP 子代理使用 AgentX 协议与平台 SNMP 主代理进行通信 (RFC 2741)。Net-SNMP 主代理 snmpd 必须配置为允许使用 AgentX 协议。要完成此操作,请确保平台的 snmpd.conf 文件包含下行
master agentx |
如果该行不存在,则添加该行并重新启动 snmpd 守护程序。请注意,将 SIGHUP 信号发送给守护程序是不够的。重新启动了 snmpd 守护程序之后,请查找 UNIX 域套接字,该套接字是 snmpd 为 AgentX 通信创建的。在 Solaris 和 Linux 系统中,该套接字默认情况下显示为特殊文件 /var/agentx/master;但是,其位置和名称可能会通过 snmpd.con 文件进行更改。
Solaris 10 操作系统 snmpd 配置如下所示:
%cp /etc/sma/snmp/snmpd.conf /etc/sma/snmp/snmpd.conf.save % cat >> /etc/sma/snmp/snmpd.conf # Messaging Server's subagent requires the AgentX protocol master agentx ^D % cat >> /etc/sma/snmp/snmpd.conf % ls -al /var/agentx/ srwxrwxrwx 1 root root 0 Aug 9 13:58 /var/agentx/master |
此外,在 Red Hat Enterprise Linux AS 3 系统中,默认 snmpd.conf 文件限制“公用”SNMP 社区可能会查看的信息。因此有必要删除该限制,或者将其扩展为包含 Messaging Server 子代理实现的 MIB。考虑到初始测试,建议采用后者。实现这一点的方式是,包含名为 "systemview" 的视图中的 OID 子树 mib-2.27 和 mib-2.28(如下所示)。对于实际部署,每个站点必须考虑其总体安全策略。请注意,SNMP 子代理提供的信息是“只读”的。
% cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.save % cat >>/etc/snmp/snmpd.conf # Messaging Server's subagent requires the AgentX protocol master agentx # Messaging Server's subagent exports mib-2.27 and .28 # Add the mib-2.27 and .28 OID subtrees to the systemview view systemview included .1.3.6.1.2.1.27 view systemview included .1.3.6.1.2.1.28 ^D % /sbin/service snmpd restart % ls -al /var/agentx/master srwxr-xr-x 1 root root 0 Aug 8 21:20 /var/agentx/master |
如果您将使用 SNMP v3 上下文名称来区分同时运行在同一主机上的不同 Messaging Server 实例的 MIB,则至少还需要配置一个 SNMP v3 以及用于 SNMP v3 查询的用户名和密码。
至于 Messaging Server 的 SNMP 子代理的基本操作,您只需启用它并发出一个一次性手动启动命令。之后,无论何时启动或停止 Messaging Server,子代理将同样被启动或停止。在 Solaris 和 Linux 上实现此配置所需的命令如下:
% configutil -o local.snmp.enable -v 1 % start-msg snmp |
运行后,可以使用 snmpwalk 命令通过命令行测试子代理。请参见示例下面适用于 Solaris 和 Linux 的屏幕截图。请注意,文件 rfc2248.txt 和 rfc2249.txt 是网络服务和 MTA MIB 的副本。在 Solaris 系统中,可以在 NETWORK-SERVICES-MIB.txt 和 MTA-MIB.txt 下的 /etc/sma/snmp/mibs/ 目录中找到这些文件。没有必要将这些文件提供给 snmpwalk 工具,但是,这样做允许 snmpwalk 输出每个 MIB 变量的名称,而不是它们的数字对象标识符 (OID)。
在 Solaris 上的基本测试:
% D=/opt/SUNWmsgsr/examples/mibs /usr/sfw/bin/snmpwalk -v 1 -c public \ -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.27 NETWORK-SERVICES-MIB::applName.1 = STRING: /opt/SUNWmsgsr MTA on mail.siroe.com ... % D=/opt/SUNWmsgsr/examples/mibs /usr/sfw/bin/snmpwalk -v 1 -c public \ -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.28 MTA-MIB::mtaReceivedMessages.1 = Counter32: 1452 MTA-MIB::mtaStoredMessages.1 = Gauge32: 21 ... |
在 Linux 上的基本测试:
% export D=/opt/sun/messaging/examples/mibs % /usr/bin/snmpwalk -v 1 -c public \ -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.27 NETWORK-SERVICES-MIB::applName.1 = STRING: /opt/sun/messaging MTA on mail.siroe.com ... % /usr/bin/snmpwalk -v 1 -c public \ -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.28 MTA-MIB::mtaReceivedMessages.1 = Counter32: 21278 MTA-MIB::mtaStoredMessages.1 = Gauge32: 7 ... |
在将 Messaging Server SNMP 子代理配置为独立的 SNMP 代理运行之前,您必须首先决定该代理侦听 SNMP 请求的以太网接口和 UDP 端口。在默认情况下,该代理将使用 UDP 端口 161 来侦听所有可用的以太网接口。在大多数情况下,您需要更改此端口号,以便不影响平台的 SNMP 主代理 snmpd。在某些情况下,例如 HA 故障转移,您还需要将所有可用接口中的以太网接口 (INADDR_ANY) 更改为由其 IP 地址标识的特定接口。以太网接口和 UDP 端口这两个概念由 local.snmp.listenaddr 和 local.snmp.port 选项控制。
对以太网接口和 UDP 端口作出选择之后,应该将 local.snmp.standalone 选项的值设置为 1 并重新启动子代理。重新启动后,它将作为一个与 snmpd 和任何子代理无关的 SNMP 代理运行。
例如,要作为独立代理(侦听 IP 地址为 10.53.1.37 的以太网接口的 UDP 端口 9161)运行,请发出如下所示的命令。
配置为作为独立代理运行:
% configutil -o local.snmp.port -v 9161 % configutil -o local.snmp.listenaddr -v 10.53.1.37 % configutil -o local.snmp.standalone -v 1 % stop-msg snmp % start-msg snmp % snmpwalk -v 1 -c public 10.53.1.37:9161 . SNMPv2-SMI::mib-2.27.1.1.2.1 = STRING: "/opt/SUNWmsgsr MTA on mail.siroe.com" ... |
这里讨论了两种用于监视同一主机上运行的多个 Messaging Server 实例的技术。第一种技术,以独立模式运行子代理,这非常适于高可用性的故障转移 (HA) 配置,其中 Messaging Server 的单个实例可能会在主机之间动态地移动。第二种技术,使用 SNMP v3 上下文名称,其优点体现在 Messaging Server 的多个实例被限制在单个系统上的情况下,该技术需要限制由 SNMP 监视软件轮询的 IP 地址数(例如,当监视软件的许可具有基于 IP 地址的成本组件时)。后一种技术也可用于 HA 故障转移设置,但是需要轮询和独立模式技术一样多的 IP 地址。
在需要 Messaging Server 的 SNMP 监视的高可用性故障转移中,建议将 Messaging Server 的 SNMP 子代理作为A.3.3 作为独立的 SNMP 代理运行中所描述的独立子代理运行。子代理运行在独立模式下时,Messaging Server 的每个 HA 实例都应该将其 local.snmp.listenaddr 选项设置为该实例的故障转移 IP 地址的值。要简化管理,每个实例应该使用相同的 UDP 端口,但该端口要与 snmpd 守护程序(运行在每个物理群集主机上)所使用的端口区别开。通常,这些守护程序将使用 UDP 端口 161,因此要使用 local.snmp.port 选项明确指定不同的端口号。
按给出的建议配置好 Messaging Server 的 SNMP 支持后,监视站可以通过其故障转移 IP 地址或主机名来监视每个 Messaging Server 实例,而不管实例运行在哪个物理群集主机上。而且,您可以确保 Messaging Server 的独立 SNMP 代理不会相互冲突,因为每个代理只侦听它自己的虚拟以太网接口,该接口由实例的唯一故障转移 IP 地址标识。(这些虚拟以太网接口由 HA 故障转移框架自动创建。)由于对 UDP 端口进行了仔细选择,因此代理不会与在群集中的系统上运行的 snmpd 守护程序冲突。
虽然使用A.3.3 作为独立的 SNMP 代理运行中所描述的以独立模式使用 Messaging Server 的 SNMP 支持没有什么不利,但一些站点还是希望使用更传统的子代理模式,同时仍具有监视同时运行在同一系统上的多个 Messaging Server 实例的功能。例如,许可模型限制轮询 IP 地址数的 SNMP 监视系统。要实现此目标,请继续运行 Messaging Server 的 SNMP 子代理,并将 local.snmp.standalone 设置为 0。此外,为 local.snmp.enablecontextname 选项指定一个非零值,从而将每个 Messaging Server 实例配置为使用不同的 SNMP v3 上下文名称。如果需要的上下文名称不同于 service.defaultdomain 的值,则使用 local.snmp.contextname 选项设置所需的名称。重新启动每个 Messaging Server 的 SNMP 子代理实例之后,就可以通过包含正确上下文名称的 SNMP v3 查询来监视这些实例。运行在同一系统上的两个 Messaging Server 实例的 MIB 通过实例的 SNMP v3 上下文名称来区分,因此不会出现 MIB 对象标识符 (OID) 冲突。
以下选项只适用于 Messaging Server 的基于 Net-SNMP 的 SNMP 子代理。该子代理在运行 Solaris 10 以及更高版本的 Solaris 平台上使用,也可以在 Linux 平台上使用。以下介绍的选项不适用于为运行 Solaris 9 及更低操作系统的 Solaris 平台而提供的传统 SNMP 子代理。
以下介绍的选项是 configutil 选项。因此,可通过以下形式的命令来查看这些选项的值:
% configutil -o option-name |
其中 option-name 是要显示选项值的选项的名称。要设置或更改选项的值,请使用以下形式的命令
% configutil -o option-name -v option-value |
其中 option-value 是要设置的值。需要重新启动才能使这些选项的更改生效:
% stop-msg snmp % start-msg snmp |
接下来给出每个选项的说明及其默认值。
表 A–1 SNMP 子代理选项
选项(默认值) |
说明 |
Messaging Server SNMP 子代理只在该选项值为 1 或 true 时才运行,在这种情况下,Messaging Server 将自动停止或启动子代理,并将其作为正常启动和关闭过程的一部分。默认情况下,该选项设置为 0,这样会禁用子代理的操作。在启用子代理之前,请确保平台的主代理已按照A.3.3 作为独立的 SNMP 代理运行中所描述的方法正确配置。 |
|
Messaging Server 的 SNMP 支持通常作为 SNMP 子代理运行,并通过平台的 SNMP 主代理 snmpd 接收 SNMP 请求。该操作模式是默认设置,通过将该选项的值指定为 0 或 false 来选择此默认设置。但是,如A.3.3 作为独立的 SNMP 代理运行中所述,子代理可能会以“独立”模式运行,从而以独立于 snmpd 的 SNMP 代理运行。当以独立模式运行时,子代理(现在是 SNMP 代理)直接侦听以太网接口和 UDP 端口上的 SNMP 请求,以太网接口和 UDP 端口分别由 local.snmp.listenaddr 和 local.snmp.port 选项指定。要在此独立模式下运行,请将该选项的值指定为 1 或 TRUE。 以独立模式运行并不影响运行在同一系统上的其他 SNMP 主代理或子代理。 |
|
以独立模式运行时侦听 SNMP 请求的主机名或以太网接口的 IP 地址。默认情况下,侦听所有可用的接口。这对应于指定值 INADDR_ANY。可以通过指定与接口关联的 IP 地址或主机名来选择特定接口。此接口可以是物理接口,也可以是虚拟接口。 local.snmp.standalone 设置为 0 或 FALSE 时忽略该选项。 |
|
缓存监视数据的生存时间 (TTL)(以秒为单位)。该选项控制在使用从 Messaging Server 获得的新信息刷新监视数据之前,子代理报告相同监视数据的时间。除邮件循环信息外,默认情况下,缓存数据的时间不超过 30 秒。循环信息(通过扫描 .HELD 文件确定)每 10 分钟才更新一次。这是因为扫描所有盘上邮件队列会消耗资源。 请注意,子代理并不持续更新其监视数据:只有在收到 SNMP 请求,并且高速缓存的数据过期时(即,超过其生存时间)才进行更新。如果将生存时间 (TTL) 设置为 30 秒,并且每 5 分钟发出一次 SNMP 请求,则每个 SNMP 请求将导致子代理从 Messaging Server 中获得刷新的数据。即,每 5 分钟就可从 Messaging Server 中获得一次数据。另一方面,如果每 10 秒发出一次 SNMP 请求,则子代理将使用已缓存了 29 秒的数据来响应其中一些请求;Messaging Server 则每 30 秒被轮询一次。 |
|
子代理通过实际打开到每个服务的 TCP 连接,以及进行协议转换来确定每个所监视服务的操作状态。该超时值(以秒为单位)控制子代理等待响应协议转换中每个步骤的时间。默认情况下,使用的超时值为 5 秒。 |
|
使用该选项控制子代理是否为 .HELD 邮件文件和最早的邮件文件执行盘上邮件队列扫描。该信息对应于 mtaGroupLoopsDetected、mtaGroupOldestMessageStored 和 mtaGroupOldestMessageId MIB 变量。当该选项的值为 1 或 true 时,将根据需要维护和更新此信息的缓存。具有大量排队邮件并且不需要这些特定 MIB 变量的站点应该考虑将该选项的值设置为 0 或 false。 |
|
子代理可以在 SNMP v3 上下文名称 下注册其 MIB。完成此操作后,可以仅通过 SNMP v3 客户端请求 MIB,该客户端在其 SNMP 请求中指定上下文名称。使用上下文名称允许多个独立的子代理在同一 OID 树下(即,同一 SNMP 主代理下)注册网络服务和 MTA MIB。有关详细信息,请参见A.3.4 监视 Messaging Server 的多个实例。 要启用 SNMP v3 上下文名称,请将该选项的值指定为 1 或 true。当完成此操作后,子代理将默认使用其上下文名称的 service.defaultdomain 选项的值。要对上下文名称使用别的值,请使用 local.snmp.contextname 选项。 |
|
使用 local.snmp.enablecontextname 启用 SNMP v3 上下文名称时,该选项可用来明确设置子代理用于其 MIB 的上下文名称。为该选项提供的值是字符串值,必须适合用作 SNMP v3 上下文名称。当 local.snmp.enablecontextname 的值为 0 或 false 时忽略该选项。 |