## Storage Automated Diagnostic Environment 2.x (StorADE)
管理概述

摘要：

本文档介绍 StorADE 的总体环境，包括守护程序和计时程序的使用、用于监视设备的探测技术 、通知提供程序和事件发生结构。本文档适合于系统管理员，并要求使用者了解 Unix (Solaris) 的相关知识。本文档可与“用户指南”一起使用，后者详细介绍了图形用户界面的功能。涉及 Sun 存储器产品时，本文档使用缩写代替。附录 A 中的缩写列表提供了更加正确的产品列表。

什么是 StorADE：

StorADE 是一种用于监视和诊断 Sun 存储器产品、Sun 支持的交换机和 Sun Virtualization 产品的分布式应用程序。 StorADE 的主要功能包括设备监视、事件生成、拓扑的发现和表示、诊断、修订检查、设备/FRU 报告和配置（系统版本）。 StorADE 依靠带内（在数据路径上）和带外（通过以太网）安装的代理实现其监视功能。 在服务器上安装 StorADE 软件包以后，将在该服务器上添加一个计时程序 条目，并在由相同服务器上的 inetd 管理的服务列表中添加一个 StorADE 特定的 http 服务。计时程序将定期（时间可调）“唤醒” StorADE 代理，使其检测设备和监视日志文件。 StorADE 图形用户界面 (GUI) 中维护的配置文件用于维护代理应监视的设备的列表。这些代理中将有一个作为主代理，所有从属代理都将它们的发现（警告和事件）报告给主代理，以供进一步处理。生成的事件带有“服务顾问”内容如“可能原因”和“推荐操作”，可用于将事件进一步隔离到单个 FRU。

主代理的主要功能是通过 GUI 显示监视数据库（包括配置、使用报告、事件、运行状况和拓扑等），并将所有消息发送给诸如 SRS 等事件用户（在 GUI 中称为“通知提供程序”）。主 GUI 为主代理和从属代理集中所有配置功能。配置从属代理时无需将浏览器指向从属服务器。事件可以作为本地电子邮件发送给站点的管理员，或是作为警告和事件发送回 SRS、NetConnect 和 Sun Network Storage Command Center (NSCC)。NSCC 是一个统计数据库，Sun 工程使用它来发现 Sun 存储器产品的趋势和问题。还可使用 StorADE GUI 配置电子邮件和提供程序，并将结果保存在配置文件中。

下图是一个配置示例，其中一个主代理和一个从代理共同监视 2 个 Sun T3 合作伙伴小组、1 台交换机和 3 台 Sun A5000：

StorADE 有两个版本，“设备版”提供所有 StorADE 功能（几种 Sun 解决方案特定的功能除外），“Sun 解决方案版”在 3900/6900/6320 产品上使用服务处理器。 “设备版”（软件包名 SUNWstade）是名副其实的“San”版本，因为它包含 StorADE 的所有拓扑和 SAN 聚集功能。 “Sun 解决方案版”（软件包名 SUNWstads）预先安装在解决方案产品的服务处理器上，提供与“设备版”不同的功能；它还包括专用的管理功能，如“3900/6900 配置”功能。这两个软件包创建自同一个代码库。

StorADE 安装生命周期：

典型的 StorADE 安装分以下几步：

1. 在一组服务器上安装 StorADE，选择其中之一作为主代理，通常选择已经作为管理站的服务器，或者是可以访问电子邮件并向名称服务器注册过的容易访问的服务器。主代理提供用户界面，即使没有从属代理，它也称为“主代理”。代理的每个实例（无论是主代理还是从属代理）都可以监视设备。可以以带内方式（通常通过安装在相应服务器上的从属代理）监视设备，也可以以带外方式（任何代理均可）监视设备。当日志文件可用时（如 t3/t4 和 3310 minnow 的情况），通常最好的方法是将代理安装在复制日志文件的服务器上，并通过此代理以带外方式监视设备。此配置允许同一代理查看日志信息、检测设备和建立找到的信息间的关联。在运行 pkgadd 之后，运行 /opt/SUNWstade/bin/ras_install 以设置 inetd 服务和计时程序。 ras_install 将询问一些基本问题，如“这是主代理还是从属代理”、“主代理的位置”、“是否打开 SSL 安全”等。

2. 初始化配置。通过将浏览器指向包含正确端口号的主机来访问 StorADE。StorADE 端口号为 7654（非安全）和 7443（安全）。 注意： 通常初始登录的用户名为 ras，口令为 agent，初始登录之后可以对其进行修改。还可以创建拥有不同权限、语言环境和浏览器参数的其他用户。初始配置由以下部分组成：输入站点信息、发现设备、手动向 StorADE 配置中添加存储器设备、添加用于事件接收的本地电子邮件地址、添加用于将事件传输给 SRS、SSRR、NetConnect 等的通知提供程序。为方便起见和自动处理的需要，大部分功能都可通过 cli 命令实现。可以通过 GUI 执行“查看配置”报告，以对该配置做出正确的检查。

3. 发现设备。StorADE 监控其配置文件(/opt/SUNWstade/DATA/rasagent.conf)内所包括的设备。通过“添加设备”、“发现设备”或 CLI 命令“ras_admin”将设备添加到这个文件中。“添加设备”是最直接的办法，通常需要输入要增加的设备的 IP。在 StorADE 可以将设备添加到其配置中前，它必须能够访问并识别该设备。识别意味着可以找到设备的 WWN 端口以及附设 ID。通过/etc/deviceIP.conf 文件可以自动发现设备。该文件的句法与 /etc/hosts 相近，并由系统管理员进行维护。它包含有 StorADE 所监测的所有设备的列表。请参考附录 D 以获得该文件的实例。在 /etc/deviceIP.conf 文件的基础上，CLI (ras_admin discover_deviceIP) 和 GUI 都可以用来发现设备。

4. 发现拓扑。尽管这只是配置过程中的一个步骤，但要稍微复杂一些。要完成一个完整的 StorADE 拓扑发现，每个代理（主代理和从属代理）都必须发现它们在 San 中的部分（包括带内和带外）的信息，将这些信息合并为一个拓扑，并将该拓扑发送给主代理以供进一步聚集。主代理将收到的所有拓扑与它自己的拓扑合并，从而创建一个 StorADE “主”拓扑。StorADE 创建的拓扑主要是物理拓扑，它包括附件信息、合作伙伴小组信息、带内路径信息和 WWN 等。该拓扑将保存为当前 San“拓扑快照”，并在所有 San 相关操作中使用，直到用户创建新的 San 拓扑快照。可通过“管理”->“拓扑维护”->“拓扑快照”完成此功能。

5. 启动代理。安装 StorADE 并完成 ras_install 以后，可能并没有运行每台设备的代理。通常在设备发现和通知提供程序初始化之后从 GUI 启动代理。启动代理才真正意味着 StorADE 计时程序在所有代理（主代理和从属代理）上都处于激活状态。可通过“管理”->“常规维护”->“启动代理”完成此功能（参考 site_map, 图 1）。 有关设备和提供程序初始化的详细信息，请参阅“StorADE 用户指南”。

6. 设备警告发生时，StorADE 将通过电子邮件（如果已配置）通知站点管理员，并使用最初配置的远程服务（SRS、SSRR 等）向 Sun 发送通知。发送给管理员的电子邮件通常足以隔离问题，因为这些电子邮件将包含可能的原因和推荐的操作。为更全面地了解问题，站点管理员或 Sun 的工作人员可能希望访问 StorADE GUI（或 CLI），查看电子邮件信息上下文。可通过查看设备本身（“监视”->“设备”），查看拓扑（“监视”->“拓扑”）或查看完整的 StorADE 事件日志（“监视”->“事件日志”）完成此项功能。有关这些功能的示例，请参考图 2、3、4。图 5 显示一个电子邮件样例。 查看这些信息之后，可执行诊断以进一步隔离引起问题的原因。

7. 隔离问题。可通过 CLI 或 GUI 执行诊断程序。StorADE GUI 允许用户使用从属代理远程执行测试。这个特性使用户即使在实际的诊断测试正在从属服务器上进行时，也能够在主服务器的中央 GUI 上启动和控制测试。

8. 问题解决后，用户可以清除 StorADE GUI 中设备的运行状况，如果添加了新的存储器设备，则重新创建一个拓扑并返回步骤 5。

监视策略：

监视由安装在一组服务器上的主代理和从属代理完成。选择这些服务器基于以下原因：

1. 服务器可以访问带内存储器设备（如 Sun StorEdge A5K）。

2. 服务器可访问日志文件（如 /var/adm/messages） 或存储器设备日志文件（如 /var/adm/messages.t3）。

3. 服务器对能以带外方式进行监视的存储器设备（如 Sun T3 和 Sun 交换机）进行带外访问。

4. 使用多个服务器可以分担监视负载。 例如，不是所有 Sun StorEdge T3 阵列都需要由同一代理监视。Sun StorEdge T3 常常分组安装，并将它们的日志文件 (messages.t3) 复制到多台服务器。这种情况下，最好在每台服务器上都安装从属代理，以便通过同一代理访问日志文件和相应的 t3。 有关 StorADE 配置的详细信息，请参阅“安装和配置规划指南”。

监视周期：

代理的执行由每台服务器上的计时守护程序控制。监视周期的主要步骤是：

1. 验证该代理是否独立运行，如果代理的上一次运行还没有结束：则允许它完成。一次仅允许运行监视代理的一个实例 (./opt/SUNWstade/bin/rasagent) 。

2. 装载并执行所有相应的设备模块，生成使用报告和与运行状况相关的事件。通过检测设备获取所有相关信息并将信息保存到存储于 /var/opt/SUNWstade/DATA 的报告中便生成了使用报告。代理的一次运行和下一次运行将对报告进行比较，以生成与运行状况相关的事件。通过中继日志文件中找到的信息也可以创建事件。例如，在 /var/adm/messages.t3 中找到的所有错误和警告都将转换为“日志事件”事件，而不做进一步分析。大部分事件的生成是由于 StorADE 中的某个规则或策略判定存在问题，但如果 T3 指出系统日志文件中存在问题，则立刻生成一个事件。有关用于监视设备的命令的详细信息，请参考附录 C；

3. 将事件发送给主代理，如果这些事件通过从属代理生成的。或者，如果该代理为主代理，则将这些事件发送给感兴趣的各方。 主代理负责生成自身的事件并收集来自从属代理的事件。在分发以前，事件也可以在主代理上聚集。

4. 在 DATA 目录中存储器使用报告。注意： 事件日志可从 GUI 的“监视”->“日志”(/opt/SUNWstade/DATA/Events.log) 访问。然后 StorADE 使用必要的统计信息更新状态数据库。某些事件要求在生成事件前要达到一定的阈值。例如，由于某种阈值要求的存在，使交换机端口的 CRC 计数增加 1 不足以触发一个事件。另一个示例是电子邮件。StorADE 支持电子邮件阈值，用于防止为同一设备的同一组件生成多封电子邮件。通过跟踪指定时间段内发送的事件的数量，可以防止多余的电子邮件警告。注意： 其它提供程序（非电子邮件提供程序）不支持此项功能，因为跟踪发送的所有信息可能很重要。大多数事件不存在此问题，因为它们仅在初始状态发生改变时被发送。例如，如果电池供给丢失（如电源故障），则针对这一状态变化发送一个警告，但在该状态变为正常（如电源恢复）或进入另一个状态（如电源被移除）以前，不会发送更多事件。

5. 将相应的事件发送给感兴趣的各方。无需将所有的事件发送给每个人。例如，本地管理员可以选择他们需要的事件。管理员可以选择他感兴趣的设备类型和事件种类（如 通信丢失），此外管理员还可以选择要接收的警告的级别（如 只接收警告和错误）。 注意：Sun SRS 提供程序只接收可操作事件（请参阅“事件结构”）而 Sun Network Storage Command Center（使用 NetConnect 的 NSCC）则接收所有事件。

事件生命周期：

大多数 StorADE 事件都是基于运行状况的转变而生成的。 例如，当某一设备的状态由“联机”变为“脱机”时，便会发生运行状况的转变。生成事件的真正原因是“脱机”到“联机”状态的转变，而不是实际值“脱机”。如果使用单独的状态来生成事件，将不断生成相同的事件。监视日志文件时不能使用转换，因此日志事件的重复率非常高。可以通过为日志文件中的条目设置阈值将该问题最小化。阈值确保在生成事件前的一定时间内仅产生最小数量的日志文件条目。StorADE 还包含一个“事件最大数量”数据库，用于跟踪在相同的 8 小时内生成的关于同一主题的事件的数量。该数据库用于在没有其他方法时，停止重复事件的生成。 例如，如果一台交换机的端口每几分钟就在“脱机”和“联机”之间切换一次，则事件最大数量数据库将确保此切换每 8 小时报告一次，而不是每 5 分钟就报告一次。

通常使用下列规则生成事件：

1. 第一次监视某个设备时，生成一个发现事件。该事件不可操作，用于设置监视基线，主要适用于 NSCC。该事件详细描述存储器设备的组件。发现之后的每一周，都会生成一个审核事件。它的内容与发现事件的内容相同。

2. 当在主机或存储器日志文件中发现感兴趣的信息时，便可能生成一个日志事件。如果可能，该信息通常绑定在正确的存储器设备上，并发送给所有的用户。可根据阈值将这些事件变为可操作事件，并发送给 SRS、SSRR、NetConnect 等。

3. 当通过检测设备而生成的使用报告的内容与上次（通常是 x 分钟之前的）使用报告相比发现改变时，将会有事件生成。生成的大部分 StorADE 事件有： 状态变化事件、拓扑事件、报警事件等。有关设备事件的完整列表，请参考附录 B。在 StorADE GUI 中，使用“报告”->“服务顾问”->“事件顾问”可获得有关事件的更多信息。

4. 如果可能，StorADE 主代理会将相关事件合并以生成集合事件。注意：缺省情况下并不启用事件聚集，但可用于在单个电子邮件中自动聚集多个事件，该电子邮件中显示集合事件和用于生成集合事件的原始事件。

所有事件都包括以下字段：

- 事件类型，描述事件的种类，即： 发现、日志事件、状态变化事件等。

- 设备类别，对应于一个 Storade 设备类别： a5k、t3,、a3500fc、交换机、brocade 等。

- 事件严重程度： StorADE2 中的严重程度为：0=通知/正常，1=警告，2=错误， 3=错误/紧急。 严重程度在 GUI 中用以下图标显示：

- 可操作标记：如果事件生成后需要一定的操作，则称该事件是可操作的。例如，这些事件需要转到 Sun SRS。 错误事件和错误/紧急事件也是可操作的，有些警告事件是可操作，但大部分警告事件都不可操作。通知事件是不可操作的。

- 事件主题：主题是特定于设备的。例如，在交换机上，事件类型可以是状态变化事件，主题可以为“端口 1”：例如，此事件/主题可用于发出警告：某个交换机端口已由“联机”变为“脱机”。

- 事件代码： 此代码由以句点分隔的三个数字组成。代码用于标识事件，等效于“设备类别.事件类型.事件主题”，但长度更短。有关代码的完整列表，请参考“事件顾问”。事件代码在 GUI 中通常是可见的，并允许对服务顾问数据库进行方便的访问，该数据库中存放了产生事件的原因和推荐的操作。

备用主要主机：

StorADE 支持备用主要主机的概念。备用主要主机是一台从属主机，每次运行计时程序时它都会检验实际主要主机是否处于活动状态，如果实际主要主机没有响应，备用主要主机就会接管实际主要主机的某些职能。包括备用主要主机在内的所有从属主机都持有 StorADE 配置的一个完整的副本。 该配置描述所有代理的位置（IP 地址等）。这些信息允许备用主要主机调用从属主机，并将事件流从实际主要主机暂时重定位到备用主要主机。

因为实际主要主机负责发送事件和电子邮件，备用主要主机的一个主要功能就是向管理员发出警告：主服务器无法继续运行，否则将永远无法发送该事件。 备用主要主机不会成为实际主要主机，但它会记住哪个代理是实际主要主机，并且一旦重新获得与实际主要主机的通信，备用主要主机就不再充当临时主要主机的角色。这样的体系结构可用于处理主代理的暂时丢失： 从站点上删除了主代理，应将另一个服务器作为永久性主代理（再次运行 ras_install）。

产品残留程序：

StorADE 设计包含一个很小的残留程序，StorADE 在不使用时处于不可见状态。残留程序包括一个计时程序和一个根据请求用于 browser/slave/master 通信的 http 服务。

StorADE 包含一个计时程序，该程序每 5 分钟运行一次。每次启动计时程序时，它都会检验 StorADE 配置文件以确定是否应执行代理。 各个代理的实际代理频率可以不同，此设置可以通过 GUI 完成。 例如，如果代理频率改为 30 分钟，则计时程序在 6 次运行中将中止 5 次。此计时程序代理 (/opt/SUNWstade/bin/rasagent) 在主代理和从属代理上运行，是一个能增大到约 15 兆字节内存的 Perl 程序。 StorADE 中不包含 Perl，因此服务器上必须装有 Perl（Perl 5.005 或更高版本），StorADE 才能工作。运行时，计时代理将设备特定的信息存储在 /opt/SUNWstade/DATA 目录中，被监视的设备数量不影响它的进程的大小。完成对某设备的监视以后，设备数据将保存到磁盘并从内存中擦除。

计时代理仅用于检测设备和生成事件，不提供对 StorADE GUI 的访问，该访问由通常安装在端口 7654 和 7443（安全的）上的 http 服务提供。该程序（称为 /opt/SUNWstade/rashttp）在 inetd 中启动，并且只要用户需要 GUI，它就会一直保留在内存中。 Rashttp 具有超时设置（缺省为 30 秒），这段时间之后该程序将退出。此功能是为了尽量减少服务器中运行的进程数量。该 http 服务也是 Perl 程序，其残留程序与计时代理相似。它用于应答来自浏览器或从属主机的 http 请求。主要主机和从属主机都使用 http 共享配置信息、拓扑信息、新事件等。

安全选项：

安装 StorADE 时执行 ras_install 并对安全问题回答“是”，即可打开安全选项。这意味着将使用 SSL（安全套接字层）在主代理与浏览器之间及主代理与从属代理之间传输信息。StorADE 软件包包含一个 2008 年到期的缺省许可证（位于 /opt/SUNWstade/System/certificate.pem），该许可证使用最高级别的加密方式（使用 128 位私钥的 RC4 ) 。使用安全模式时，用于访问主代理的 URL 为 https://hostname:7443。 非安全 URL 为 http://hostname:7654。 可以使用 openssl 公用程序（公共域 OpenSSL 产品的一部分）来创建站点特定的许可证。使用与以下命令相似的命令： /usr/local/ssl/bin/openssl req -days 200 -new -nodes -x509 -out new_certificate.pem -keyout new_certificate.pem2. 有关许可证的详细资料，请参考附录 C。

为获得更高的安全性，StorADE 支持多个登录。这些登录可以由 “root”登录（登录名“ras”，缺省口令“agent”）添加，还可添加特定的功能 (guest, admin, expert, test)。这就允许用户使用他们自己的登录名/口令登录，并且拥有 GUI 中可用的限定的功能集。

Sun 解决方案：

Sun StorEdge 解决方案产品包括 Sun 3900/6900 (Indy) 和 Sun 6320 (Maserati midrange)，是通过 Sun 交换机、Sun T3/6120、Sun Virtualization 引擎和 Service Processor 创建的逻辑存储器设备。 这些组件预安装在单个产品中，该产品包括服务器处理器上的 StorADE （StorADE 系统版）。 解决方案磁盘架中的 StorADE 和任何其他 StorADE 主代理一样，可以通过将浏览器指向服务处理器的 IP 地址进行访问。 注意： 对外界（包括 StorADE 的外部实例）而言，该解决方案磁盘架将作为单个设备对待。

在以前的版本中，可以将 Sun Solution 磁盘架上的代理配置为从属代理，但是出于伸缩性和方便维护的考虑，StorADE 2.2 版中删除了此项功能。 当安装在磁盘架以外的 StorADE 代理需要监视该磁盘架时，该代理将 Sun Solution 磁盘架作为拥有唯一图标的单个设备进行发现。 下图中，Sun solution 磁盘架的 2 个交换机当前都存在错误（以红色表示）。这些错误在磁盘架图标中用 2 个红色小框表示，每个小框代表一个交换机插槽。要查看磁盘架内部的详细拓扑，用户必须查看 3900 的服务处理器上的 StorADE 版本，或使用主代理上的“链接与启动”工具（位于磁盘架以外）。 有关将 Sun 解决方案作为单个图标的拓扑的示例，请参考图 3。

通知提供程序：

StorADE 支持各种通知提供程序，包括本地电子邮件、SRS、NetConnect、Trap 和 SSRR。这些提供程序必须手动激活，可使用 GUI 或 ras_admin cli 完成。每次完成代理周期时都会将信息发送给提供程序。注意：从属代理将事件发送给“主代理”，“主代理”将事件发送给提供程序。

- 本地电子邮件：本地电子邮件主要用于将事件信息发送给本地管理员。 可在 GUI 中输入多个电子邮件地址，每个地址使用不同的过滤器。当生成电子邮件时，将根据事件严重程度和电子邮件地址进行聚集。 这意味着一封电子邮件可以包含多个事件，但是这些事件都具有相同的严重程度级别。永远不会将一个错误和一个警告合并到同一电子邮件中。除了主要事件信息，电子邮件还将包含服务顾问信息（信息、可能的原因和推荐的操作）。事件还包含一个事件代码，事件代码可用作事件顾问数据库中的查找键值（也可从 StorADE GUI 获得）。

- SRS 提供程序： 该 StorADE 模块将基本监视拓扑和所有可操作事件发送给安装在客户站点的 SRS 控制台。SRS 仅接收可操作事件，不能接收某些提供程序（如本地电子邮件）可以接收的所有事件信息：只发送事件源、事件说明和事件代码。SRS 控制台对 StorADE 主代理必须是可见的，该提供程序才能工作。 与控制台的通信是通过 http 实现的。

- SSRR 提供程序依赖 Unix 进行通信。如果事件可用，则可以使用包含这些事件作为变量的文件来执行 sendToSupport 程序 (/va/remote.support/scripts/sendtosupport)。可操作事件和不可操作事件都将发送到 SSRR，可操作事件单独发送并标记为“beep”（与此相对的其他事件标记为“no-beep”）。

- NetConnect 模块依赖于 SHUTTLE 文件 (/opt/SUNWstade/DATA/SHUTTLE) 与 NetConnect 产品进行通信。有 2 个 SHUTTLE 文件（SHUTTLE.1 和 SHUTTLE.3）用于分离可操作事件和不可操作事件。在可行的情况下，ncsend 程序(package_base/SUNWnc/bin/ncsend)也被执行 。 所有事件都发送到 NetConnect。 NSCC 使用 NetConnect 利用来自客户端的事件总装其数据库。

- SunMC。激活 SunMC 模块使 StorADE 将拓扑和警报信息发送到 SunMC 代理。 可以在 SunM 主控台看到这些警报。一个特殊的 “rasagent” 模块必须安装在 SunMC 代理上以接收这些警报。这些模块包含在 StorADE (/opt/SUNWstade/System/SunMC/SUNWesraa.tar.gz)中。

- SNMP 陷阱。 可为可操作事件发送 SNMP 陷阱，并通过可以接收陷阱的任何管理应用程序接收这些陷阱。

图

图 1： 站点地图：

本页显示所有可用功能。本页以动态方式生成，可根据 StorADE 的版本和登录到应用程序的用户的权限进行更改（例如，没有运行诊断测试权限的用户将看不到有关诊断的帮助信息。）

图 2：监视设备：

当使用 3 个框架时，本页显示 StorADE 的内容。顶部框架用于导航。左边的框架显示被监视的设备的列表以及它们各自的运行状况（“Sev”表示严重程度）。右边的框架可以显示 5 个页面（[ 汇总 | 运行状况 | 日志 | 报告 | 图表 ]）。“图表”页面显示选定设备（此例中为交换机）的图标以及该设备在 San（png 图形文件）中直接相邻的对象。 此图表中还带有此交换机的当前运行状况问题的列表。

图 3： 拓扑图：

本页将显示每个从属主机和主要主机单独生成的拓扑，或合并后的拓扑（称为“主拓扑”）。 可以对拓扑进行过滤和分组以便于访问。可以移动拓扑的图标并将它们保存在新的位置，以生成更具可读性的布局。右击一个图标可显示能对该图标进行操作的功能的菜单（例如， 使用鼠标右键可显示设备报告或运行诊断程序）。右击任意图标以外区域可以更改图的缩放程度。 按住 shift 键不放可以同时突出显示多个图标，适用于移动图标的情况。在本图中，设备和链接都可以进行标记和单击。同设备一样，选定（右击）链接可以查看有关链接状态的详细资料。该拓扑图由一个 Applet 生成，但通过 [打印] 功能可以生成 png（类似 gif 的图象格式）表示方式以方便打印。

图 3a： Sun Solution 内部：

本拓扑在 Sun 解决方案的 Service Processor 中是可见的，其中显示了 SP 本身、外部交换机、Virtualization 引擎、内部交换机和存储器阵列（本例中为 3 个 T3）。它还显示了磁盘架组件之间的 San 连接。在本图中，Sun 解决方案称为“wst31”，在上一个图中为另一个磁盘架“sp87”。 Sun 解决方案包括各种模型，因此组件的类型和数量可能不同。

图 4： 监视日志：

该“事件日志”页面可用于显示存储在 DATA/Events.log 中的事件日志的子集。显示的事件带有指向“服务顾问”的链接，从该处可以获得有关特定事件的详细信息。

图 6： 本地电子邮件通知：

电子邮件由主代理生成，发送至使用 GUI 在 StorADE 配置中输入的电子邮件地址。每个电子邮件地址可能使用不同的事件过滤器。电子邮件信息可能包括“说明”、“信息”、“可能的原因”和“推荐的操作”，本示例中没有“可能的原因”部分。

附录 A： 缩写列表：

附录 B： 用于监视的命令：

这一部分介绍监视 StorADE 所支持的存储器设备时使用的命令和技术。

- 3310 (Minnow)： 此代理使用 cli 命令 “/opt/SUNWstade/bin/sccli show ”。此命令既可带内运行又可带外运行。StorADE 对于带内运行和带外运行使用同一 API 接口。此命令提取附件信息和 3310 消息日志的内容。

- A3500FC： 此代理使用 rm6 软件包的命令（healthck、lad、rdacutil 等）。这些命令以带内方式运行。

- A5000：luxadm 命令用于监视 A5K。 一定要确保已经安装了最新的 luxadm 修补程序，然后再安装 StorADE 来监视 A5000，这一点很重要。

- Brocade： StorADE 使用 snmp 库 (snmpget、snmpwalk) 以带外方式从 Brocade 交换机提取信息。

- D2： Luxadm 和其他带内 cli 命令（disk_inquiry、rdbuf、identify 和 vpd）都可用于监视 D2。

- Host：Host 代理也使用 luxadm 来读取 lun 和 hba 的状态。它还使用 unix 命令 (df、showrev、pkginfo) 提取主机信息。

- MCData： StorADE 对 McData 交换机也使用 snmp。

- Sun 交换机： 对于 1 gig 交换机，StorADE 使用 sanbox cli 命令。对于更新的 2Gig 交换机，则使用 snmp。

- T3： StorADE 使用 http 查询从 T3 阵列提取特性（也称为令牌）。Sun StorEdge T3 阵列带有 web 服务器，可用于监视阵列的状态。T3 令牌的内容与“fru stat”、“fru list”、“vol stat”等 telnet 命令的输出结果相似。还使用 messages.t3/messages.6120 日志文件的内容：警告 (W: )、错误 (E: ) 和重要通知都由 StorADE 监视。

- 6120 (T4)： 使用与 T3 相同的技术。

- FC 磁带机：Luxadm 也用于监视光纤通道磁带机。

- V880 磁盘： StorADE 使用 luxadm display 以带内方式监视 V880 磁盘。

- 消息文件：一个单独的模块监视 /var/adm/message 文件。此模块保存文件末尾的“seek”值，并读取文件中的新条目。 如果从存储器的角度来看这些新条目很重要，则生成日志事件。Hba 驱动程序向该日志文件写入。

- Sun Virtualization (VE)。使用 VE 特定的命令 (showmap、slicview、svstat、mpdrive) 以带外方式监视 Sun Virtualization 设备（以前为 Vicom）。Sun Solutions 6900 系列中包含 Virtualization 设备。

- Sun StorEdge 39xx/69xx 解决方案磁盘架。 StorADE 通过与磁盘架的服务处理器上的 StorADE 代理进行通信来监视解决方案磁盘架。此通信通过 HTTP 进行。

附录 C：许可证详细资料

附录 D：/etc/deviceIP.conf

该文件仅可用于可以 IP 编号带外访问的设备。通常支持交换机、Sun T3、Sun 6120、Sun 3510 以及 Sun Solution。

#IPNO 名称 类型（任选）

10.10.10.1 t3-b1

10.10.10.2 t3-b2

10.10.10.3 switch-s1

10.10.10.4 switch-s2

10.10.10.5 minnow1 3510

10.10.10.6 indy-1 rack

10.10.10.7 6120-1

10.10.10.8

附录 E：事件列表

    ############################
    3310.grid: Sun 3310/3510
    ############################
    3310       AlarmEvent                     Revision
    3310       AlarmEvent                     channel
    3310       AlarmEvent                     enclosure
    3310       AlarmEvent                     fan
    3310       AlarmEvent                     firmware_version
    3310       AlarmEvent                     part
    3310       AlarmEvent                     power
    3310       AlarmEvent                     raid_level
    3310       AlarmEvent                     size
    3310       AlarmEvent                     temperature
    3310       AlarmEvent                     volume
    3310       CommunicationEstablishedEvent  ib
    3310       CommunicationEstablishedEvent  oob
    3310       CommunicationLostEvent         e
    3310       CommunicationLostEvent         ib
    3310       ComponentInsertEvent           disk
    3310       ComponentInsertEvent           power
    3310       ComponentRemoveEvent           disk
    3310       DeviceLostEvent                aggregate
    3310       DiscoveryEvent                 enclosure
    3310       LocationChangeEvent            enclosure
    3310       LogEvent                       cpu
    3310       QuiesceEndEvent                enclosure
    3310       QuiesceStartEvent              enclosure
    3310       StateChangeEvent+              disk
    3310       StateChangeEvent+              volume
    3310       StateChangeEvent-              disk
    3310       StateChangeEvent-              volume
    ############################
    6120.grid: StorEdge 6120
    ############################
    6120       AlarmEvent+                    power.temp
    6120       AlarmEvent-                    disk.pathstat
    6120       AlarmEvent-                    disk.port
    6120       AlarmEvent-                    disk.temperature
    6120       AlarmEvent-                    interface.loopcard.cable
    6120       AlarmEvent-                    power.battery
    6120       AlarmEvent-                    power.fan
    6120       AlarmEvent-                    power.output
    6120       AlarmEvent-                    power.temp
    6120       AlarmEvent                     cacheMode
    6120       AlarmEvent                     cacheModeBehind
    6120       AlarmEvent                     initiators
    6120       AlarmEvent                     log
    6120       AlarmEvent                     lunPermission
    6120       AlarmEvent                     revision
    6120       AlarmEvent                     system_reboot
    6120       AlarmEvent                     sysvolslice
    6120       AlarmEvent                     time_diff
    6120       AlarmEvent                     volCount
    6120       AlarmEvent                     volOwner
    6120       AuditEvent                     enclosure
    6120       CommunicationEstablishedEvent  ib
    6120       CommunicationEstablishedEvent  oob
    6120       CommunicationLostEvent         ib
    6120       CommunicationLostEvent         oob
    6120       ComponentInsertEvent           controller
    6120       ComponentInsertEvent           disk
    6120       ComponentInsertEvent           interface.loopcard
    6120       ComponentInsertEvent           power
    6120       ComponentRemoveEvent           controller
    6120       ComponentRemoveEvent           disk
    6120       ComponentRemoveEvent           interface.loopcard
    6120       ComponentRemoveEvent           power
    6120       DeviceLostEvent                aggregate
    6120       DiagnosticTest-                6120ofdg
    6120       DiagnosticTest-                6120test
    6120       DiagnosticTest-                6120volverify
    6120       DiscoveryEvent                 enclosure
    6120       LocationChangeEvent            enclosure
    6120       LogEvent                       array_error
    6120       LogEvent                       array_warning
    6120       LogEvent                       controller.port
    6120       LogEvent                       disk
    6120       LogEvent                       disk.log
    6120       LogEvent                       disk.senseKey
    6120       LogEvent                       driver.SSD_WARN
    6120       LogEvent                       power
    6120       LogEvent                       power.refreshBattery
    6120       LogEvent                       power.replaceBattery
    6120       LogEvent                       temp_threshold
    6120       QuiesceEndEvent                enclosure
    6120       QuiesceStartEvent              enclosure
    6120       StateChangeEvent+              controller
    6120       StateChangeEvent+              disk
    6120       StateChangeEvent+              interface.loopcard
    6120       StateChangeEvent+              power
    6120       StateChangeEvent+              volume
    6120       StateChangeEvent-              controller
    6120       StateChangeEvent-              disk
    6120       StateChangeEvent-              interface.loopcard
    6120       StateChangeEvent-              power
    6120       StateChangeEvent-              volume
    6120       Statistics                     enclosure
    ############################
    a3500fc.grid: Sun A3500FC
    ############################
    a3500fc    AlarmEvent-                    battery
    a3500fc    AuditEvent                     enclosure
    a3500fc    CommunicationEstablishedEvent  ib
    a3500fc    CommunicationLostEvent         ib
    a3500fc    ComponentInsertEvent           controller
    a3500fc    ComponentInsertEvent           disk
    a3500fc    ComponentRemoveEvent           controller
    a3500fc    ComponentRemoveEvent           disk
    a3500fc    DeviceLostEvent                aggregate
    a3500fc    DiagnosticTest-                a3500fctest
    a3500fc    DiscoveryEvent                 enclosure
    a3500fc    LocationChangeEvent            enclosure
    a3500fc    StateChangeEvent+              disk
    a3500fc    StateChangeEvent-              controller
    a3500fc    StateChangeEvent-              disk
    ############################
    a5k.grid: Sun A5000
    ############################
    a5k        AlarmEvent-                    backplane
    a5k        AlarmEvent-                    backplane.fan
    a5k        AlarmEvent-                    disk
    a5k        AlarmEvent-                    interface.gbic
    a5k        AlarmEvent-                    interface.iboard
    a5k        AuditEvent                     enclosure
    a5k        CommunicationEstablishedEvent  ib
    a5k        CommunicationLostEvent         ib
    a5k        ComponentInsertEvent           disk
    a5k        ComponentRemoveEvent           disk
    a5k        DeviceLostEvent                aggregate
    a5k        DiagnosticTest-                a5ksestest
    a5k        DiagnosticTest-                a5ktest
    a5k        DiscoveryEvent                 enclosure
    a5k        LocationChangeEvent            enclosure
    a5k        StateChangeEvent+              disk
    a5k        StateChangeEvent+              interface.iboard
    a5k        StateChangeEvent+              power
    a5k        StateChangeEvent-              disk
    a5k        StateChangeEvent-              interface.iboard
    a5k        StateChangeEvent-              power
    a5k        logEvent                       driver
    ############################
    agent.grid:
    ############################
    agent      AgentDeinstallEvent            enclosure
    agent      AgentInstallEvent              enclosure
    agent      AlarmEvent                     system_errors
    agent      AlternateMaster+               enclosure
    agent      AlternateMaster-               enclosure
    agent      CommunicationEstablishedEvent  oob
    agent      CommunicationLostEvent         ntc
    agent      CommunicationLostEvent         oob
    agent      HeartbeatEvent                 enclosure
    ############################
    brocade.grid: Brocade switch
    ############################
    brocade    AlarmEvent                     sensor.fan
    brocade    AlarmEvent                     sensor.power
    brocade    AlarmEvent                     sensor.temperature
    brocade    AlarmEvent                     system_reboot
    brocade    AuditEvent                     enclosure
    brocade    CommunicationEstablishedEvent  oob
    brocade    CommunicationLostEvent         oob
    brocade    ConnectivityLostEvent          aggregate
    brocade    DeviceLostEvent                aggregate
    brocade    DiagnosticTest-                switchtest
    brocade    DiscoveryEvent                 enclosure
    brocade    LocationChangeEvent            enclosure
    brocade    LogEvent                       PhysState
    brocade    LogEvent                       port.statistics
    brocade    StateChangeEvent+              port
    brocade    StateChangeEvent-              port
    brocade    Statistics                     enclosure
    ############################
    d2.grid: Sun D2
    ############################
    d2         AlarmEvent-                    fan
    d2         AlarmEvent-                    power
    d2         AlarmEvent                     esm.revision
    d2         AlarmEvent                     midplane.revision
    d2         AlarmEvent                     slot_count
    d2         AlarmEvent                     temperature
    d2         AuditEvent                     enclosure
    d2         CommunicationEstablishedEvent  ib
    d2         CommunicationLostEvent         ib
    d2         ComponentRemoveEvent           esm
    d2         ComponentRemoveEvent           midplane
    d2         DeviceLostEvent                aggregate
    d2         DiagnosticTest-                d2test
    d2         DiscoveryEvent                 enclosure
    d2         LocationChangeEvent            enclosure
    d2         StateChangeEvent+              disk
    d2         StateChangeEvent-              disk
    ############################
    host.grid: Host
    ############################
    host       AlarmEvent+                    hba
    host       AlarmEvent-                    hba
    host       AlarmEvent-                    lun.T300
    host       AlarmEvent-                    lun.VE
    host       AlarmEvent                     disk_capacity
    host       AlarmEvent                     disk_capacity_okay
    host       DiagnosticTest-                ifptest
    host       DiagnosticTest-                qlctest
    host       DiagnosticTest-                socaltest
    host       LogEvent                       array_error
    host       LogEvent                       array_warning
    host       LogEvent                       driver.ELS_RETRY
    host       LogEvent                       driver.Fabric_Warning
    host       LogEvent                       driver.Firmware_Change
    host       LogEvent                       driver.LOOP_OFFLINE
    host       LogEvent                       driver.LOOP_ONLINE
    host       LogEvent                       driver.MPXIO
    host       LogEvent                       driver.MPXIO_offline
    host       LogEvent                       driver.PFA
    host       LogEvent                       driver.QLC_LOOP_OFFLINE
    host       LogEvent                       driver.QLC_LOOP_ONLINE
    host       LogEvent                       driver.SCSI_ASC
    host       LogEvent                       driver.SCSI_TRAN_FAILED
    host       LogEvent                       driver.SCSI_TR_READ
    host       LogEvent                       driver.SCSI_TR_WRITE
    host       LogEvent                       driver.SFOFFTOWARN
    host       LogEvent                       driver.SF_CRC_ALERT
    host       LogEvent                       driver.SF_CRC_WARN
    host       LogEvent                       driver.SF_DMA_WARN
    host       LogEvent                       driver.SF_OFFLALERT
    host       LogEvent                       driver.SF_OFFLINE
    host       LogEvent                       driver.SF_RESET
    host       LogEvent                       driver.SF_RETRY
    host       LogEvent                       driver.SSD_ALERT
    host       LogEvent                       driver.SSD_WARN
    host       LogEvent                       error
    host       LogEvent                       warning
    host       PatchInfo                      enclosure
    host       backup                         enclosure
    host       patchInfo                      enclosure
    ############################
    internal.grid:
    ############################
    internal   AuditEvent                     enclosure
    internal   CommunicationEstablishedEvent  ib
    internal   CommunicationLostEvent         ib
    internal   ComponentInsertEvent           disk
    internal   ComponentRemoveEvent           disk
    internal   DiagnosticTest-                fcdisktest
    internal   DiscoveryEvent                 enclosure
    ############################
    mcdata.grid: McData switch
    ############################
    mcdata     AlarmEvent                     fan
    mcdata     AlarmEvent                     power
    mcdata     AlarmEvent                     system_reboot
    mcdata     AuditEvent                     enclosure
    mcdata     CommunicationEstablishedEvent  oob
    mcdata     CommunicationLostEvent         oob
    mcdata     ConnectivityLostEvent          aggregate
    mcdata     DeviceLostEvent                aggregate
    mcdata     DiscoveryEvent                 enclosure
    mcdata     LocationChangeEvent            enclosure
    mcdata     LogEvent                       PhysState
    mcdata     LogEvent                       port.statistics
    mcdata     StateChangeEvent+              port
    mcdata     StateChangeEvent-              port
    mcdata     Statistics                     enclosure
    ############################
    san.grid:
    ############################
    san        LinkEvent_CRC                  Any|Any
    san        LinkEvent_CRC                  host|storage
    san        LinkEvent_CRC                  host|switch
    san        LinkEvent_CRC                  switch|a3500fc
    san        LinkEvent_CRC                  switch|a5k
    san        LinkEvent_CRC                  switch|storage
    san        LinkEvent_CRC                  switch|switch
    san        LinkEvent_CRC                  switch|t3
    san        LinkEvent_CRC                  ve|switch
    san        LinkEvent_ITW                  Any|Any
    san        LinkEvent_ITW                  host|storage
    san        LinkEvent_ITW                  host|switch
    san        LinkEvent_ITW                  switch|a3500fc
    san        LinkEvent_ITW                  switch|a5k
    san        LinkEvent_ITW                  switch|storage
    san        LinkEvent_ITW                  switch|switch
    san        LinkEvent_ITW                  switch|t3
    san        LinkEvent_ITW                  ve|switch
    san        LinkEvent_SIG                  Any|Any
    san        LinkEvent_SIG                  host|storage
    san        LinkEvent_SIG                  host|switch
    san        LinkEvent_SIG                  switch|a3500fc
    san        LinkEvent_SIG                  switch|a5k
    san        LinkEvent_SIG                  switch|storage
    san        LinkEvent_SIG                  switch|switch
    san        LinkEvent_SIG                  switch|t3
    san        LinkEvent_SIG                  ve|switch
    ############################
    se.grid: Sun 3900/6900
    ############################
    se         AggregatedEvent                POWERSEQ1
    se         AlarmEvent-                    lun
    se         AlarmEvent-                    remove_lun
    se         CommunicationLostEvent         oob
    se         ComponentInsertEvent           lun
    se         ComponentRemoveEvent           lun
    se         ComponentRemoveEvent           slot
    se         DeviceLostEvent                aggregate
    se         StateChangeEvent               links
    se         StateChangeEvent               port
    se         StateChangeEvent               slot
    se         StateChangeEvent               sp
    ############################
    se2.grid: Sun 6320
    ############################
    se2        AggregatedEvent                POWERSEQ1
    se2        AlarmEvent-                    lun
    se2        AlarmEvent-                    power_sequencer
    se2        ComponentInsertEvent           lun
    se2        ComponentRemoveEvent           lun
    se2        DeviceLostEvent                aggregate
    ############################
    switch.grid: Sun Switch
    ############################
    switch     AlarmEvent                     chassis.fan
    switch     AlarmEvent                     chassis.power
    switch     AlarmEvent                     chassis.temperature
    switch     AlarmEvent                     port.statistics
    switch     AlarmEvent                     system_reboot
    switch     AlarmEvent                     zone_change
    switch     AuditEvent                     enclosure
    switch     CommunicationEstablishedEvent  oob
    switch     CommunicationLostEvent         oob
    switch     ConnectivityLostEvent          aggregate
    switch     DeviceLostEvent                aggregate
    switch     DeviceLostEvent                ib
    switch     DiagnosticTest-                switchtest
    switch     DiscoveryEvent                 enclosure
    switch     LocationChangeEvent            enclosure
    switch     LogEvent                       port.statistics
    switch     StateChangeEvent+              port
    switch     StateChangeEvent-              port
    switch     Statistics                     enclosure
    ############################
    switch2.grid: Sun Switch2
    ############################
    switch2    AlarmEvent-                    chassis.board
    switch2    AlarmEvent-                    chassis.fan
    switch2    AlarmEvent                     chassis.power
    switch2    AlarmEvent                     port.statistics
    switch2    AlarmEvent                     system_reboot
    switch2    AuditEvent                     enclosure
    switch2    CommunicationEstablishedEvent  oob
    switch2    CommunicationLostEvent         fsa
    switch2    CommunicationLostEvent         oob
    switch2    ConnectivityLostEvent          aggregate
    switch2    DeviceLostEvent                aggregate
    switch2    DiagnosticTest-                switch2test
    switch2    DiscoveryEvent                 enclosure
    switch2    LocationChangeEvent            enclosure
    switch2    StateChangeEvent+              port
    switch2    StateChangeEvent-              port
    switch2    Statistics                     enclosure
    ############################
    t3.grid: Sun T3
    ############################
    t3         AlarmEvent+                    power.temp
    t3         AlarmEvent-                    disk.pathstat
    t3         AlarmEvent-                    disk.port
    t3         AlarmEvent-                    disk.temperature
    t3         AlarmEvent-                    interface.loopcard.cable
    t3         AlarmEvent-                    power.battery
    t3         AlarmEvent-                    power.fan
    t3         AlarmEvent-                    power.output
    t3         AlarmEvent-                    power.temp
    t3         AlarmEvent                     add_initiators
    t3         AlarmEvent                     backend_loop
    t3         AlarmEvent                     cacheMode
    t3         AlarmEvent                     cacheModeBehind
    t3         AlarmEvent                     device_path
    t3         AlarmEvent                     initiators
    t3         AlarmEvent                     log
    t3         AlarmEvent                     loop.statistics
    t3         AlarmEvent                     lunPermission
    t3         AlarmEvent                     remove_initiators
    t3         AlarmEvent                     revision
    t3         AlarmEvent                     system_reboot
    t3         AlarmEvent                     sysvolslice
    t3         AlarmEvent                     time_diff
    t3         AlarmEvent                     volCount
    t3         AlarmEvent                     volOwner
    t3         AuditEvent                     enclosure
    t3         CommunicationEstablishedEvent  ib
    t3         CommunicationEstablishedEvent  oob
    t3         CommunicationLostEvent         ib
    t3         CommunicationLostEvent         oob
    t3         ComponentInsertEvent           controller
    t3         ComponentInsertEvent           disk
    t3         ComponentInsertEvent           interface.loopcard
    t3         ComponentInsertEvent           power
    t3         ComponentRemoveEvent           controller
    t3         ComponentRemoveEvent           disk
    t3         ComponentRemoveEvent           interface.loopcard
    t3         ComponentRemoveEvent           power
    t3         DeviceLostEvent                aggregate
    t3         DiagnosticTest-                t3ofdg
    t3         DiagnosticTest-                t3test
    t3         DiagnosticTest-                t3volverify
    t3         DiscoveryEvent                 enclosure
    t3         LocationChangeEvent            enclosure
    t3         LogEvent                       array_error
    t3         LogEvent                       array_warning
    t3         LogEvent                       controller.port
    t3         LogEvent                       disk
    t3         LogEvent                       disk.error
    t3         LogEvent                       disk.log
    t3         LogEvent                       disk.senseKey
    t3         LogEvent                       power.battery
    t3         LogEvent                       power.battery.refresh
    t3         LogEvent                       power.battery.replace
    t3         LogEvent                       temp_threshold
    t3         QuiesceEndEvent                enclosure
    t3         QuiesceStartEvent              enclosure
    t3         RemovalEvent                   enclosure
    t3         StateChangeEvent+              controller
    t3         StateChangeEvent+              disk
    t3         StateChangeEvent+              interface.loopcard
    t3         StateChangeEvent+              power
    t3         StateChangeEvent+              volume
    t3         StateChangeEvent-              controller
    t3         StateChangeEvent-              disk
    t3         StateChangeEvent-              interface.loopcard
    t3         StateChangeEvent-              power
    t3         StateChangeEvent-              volume
    t3         Statistics                     enclosure
    ############################
    tape.grid: FC-Tape
    ############################
    tape       AuditEvent                     enclosure
    tape       CommunicationEstablishedEvent  ib
    tape       CommunicationLostEvent         ib
    tape       DeviceLostEvent                aggregate
    tape       DiagnosticTest-                fctapetest
    tape       DiscoveryEvent                 enclosure
    tape       LocationChangeEvent            enclosure
    tape       StateChangeEvent+              port
    tape       StateChangeEvent-              port
    ############################
    v880disk.grid: Sun V880 Disk
    ############################
    v880disk   AlarmEvent-                    backplane
    v880disk   AlarmEvent-                    loop
    v880disk   AlarmEvent-                    temperature
    v880disk   AuditEvent                     enclosure
    v880disk   CommunicationEstablishedEvent  ib
    v880disk   CommunicationLostEvent         ib
    v880disk   ComponentInsertEvent           disk
    v880disk   ComponentRemoveEvent           disk
    v880disk   DeviceLostEvent                aggregate
    v880disk   DiagnosticTest-                daktest
    v880disk   DiscoveryEvent                 enclosure
    v880disk   LocationChangeEvent            enclosure
    ############################
    ve.grid: Vicom VE
    ############################
    ve         AlarmEvent                     log
    ve         AlarmEvent                     volume
    ve         AlarmEvent                     volume_add
    ve         AlarmEvent                     volume_delete
    ve         AuditEvent                     enclosure
    ve         CommunicationEstablishedEvent  oob
    ve         CommunicationLostEvent         oob.command
    ve         CommunicationLostEvent         oob.ping
    ve         CommunicationLostEvent         oob.slicd
    ve         DeviceLostEvent                aggregate
    ve         DiagnosticTest-                ve_diag
    ve         DiagnosticTest-                veluntest
    ve         DiscoveryEvent                 enclosure
    ve         LocationChangeEvent            enclosure