如果您曾创建过系统环境的架构图,那么您可能很清楚,手动创建的这些图通常在创建之日后就会过期。本文将介绍 Graphviz 应用程序的基础知识,以及如何编写可以自动创建图的脚本,让您始终拥有最新的和正确的系统图。本文提供了一些示例脚本,以图的形式说明了基于 IBM? POWER? 处理器的服务器的 N-Port ID Virtualization (NPIV) 和虚拟 Small Computer System Interface (VSCSI) 配置。 一幅图抵得上千言万语,这在描述复杂的计算机系统时尤为正确。当系统环境变得更加复杂时,用图将它们表示出来并记入文档就显得更加重要。例如,虚拟化技术 有很多优点,但它们通常会让环境变得更加复杂和更难理解。Graphviz 是一个可以创建图表的灵活应用程序,可以轻松实现脚本化。本文将介绍 Graphviz DOT 语言的基础知识,并提供了一些示例脚本,以图的形式说明基于 IBM POWER 处理器的服务器的 Virtual I/O Server (VIOS) NPIV 和 VIOS VSCSI 架构。本文有助于您了解 Graphviz 应用程序的基础知识,以及如何编写自动创建图表的脚本。 Graphviz 是一个开源工具,可以运行在类似于 UNIX? 的大多数平台和 Microsoft? Windows? 之上。适用于大多数平台的二进制文件可以在 Graphviz 主页 上找到。AIX 二进制文件可以在 上找到。 Graphviz 应用程序中有多种工具可以生成各种类型的图表(dot、neato、circo、twopi 等)。本文将重点介绍用于生成层级图的 dot 工具。 安装 Graphviz 之后,就可以开始使用工具创建图表,第一步是创建一个 DOT 文件。该 DOT 文件是一个文本文件,描述了图表的组成元素以及它们之间的关系,以便该工具可以生成这些组成元素和它们之间的关系的图形化表示。 清单 1 了一个最基本的 DOT 文件。 清单 1. 基本的 DOT 文件 (example1.dot)
清单 1 中共有三个节点(Server1、Server2 和 Server3)。--定义了节点之间的联系。这个使用 DOT 语言的例子说明,Server2、 Server2 连接到 Server3,而 Server3 连接到 Server1。 创建 DOT 文件后,可以运行dot命令来生成图表,如清单 2 中所示。–Tpng将输出格式指定为 PNG,而–o example1.png指定必须将输出保存到一个名叫 example1.png 的文件中。 清单 2. 从 DOT 文件生成图像
清单 1 中 DOT 文件生成的图像如图 1 中所示。 图 1. 从 example1.dot 生成的图表 ![]() 第一个示例 (example1.dot) 描述了一个无向图,即用不带箭头的直线表示节点之间的联系的图。 有向图不仅能表示节点之间的联系,而且能用箭头表示节点之间流动的方向。要创建有向图,可以在 DOT 文件的第一行上指定digraph而非graph,并在节点之间使用->,而不是--。 清单 3 与图 2 分别显示了有向图的 DOT 文件和图。 清单 3. 有向的 DOT 文件 (example2.dot)
图 2. 从 example2.dot 生成的有向图 ![]() 您也可以轻松控制图中每个节点的形状、颜色和标签。具体方法是列出每个节点的名称,然后将选项放在名称后面的括号中。例如,代码行Server1[shape=box,label="Server1\nWebServer",fillcolor="#ABACBA",style=filled]定义了 Server1 节点应该是一个长方形,有一个 Server1\nWeb Server 标签(\n 表示一个新行),颜色设为十六进制 (hex) 颜色 #ABACBA,而且该颜色应该填充了节点。 基于前面的示例,清单 4 与图 3 显示了如何在图上定义这些额外的属性。 清单 4. 具有额外属性的图表 (example3.dot)
图 3. 从 example3.dot 生成的额外属性的图 ![]() 在了解了 Graphviz DOT 语言的基础知识之后,您可以开始创建脚本,从而动态创建一个 DOT 文件。这允许您动态创建始终准确且保持最新的图表。 清单 5 中的第一个示例是一个 bash shell 脚本,它连接到 Hardware Management Console (HMC),收集托管服务器和逻辑分区 (LPAR) 的相关信息,然后使用这些信息来创建 DOT 输出。 清单 5. hmc_to_dot.sh
通过提供一个 HMC 服务器名称作为参数传递给脚本,便可运行此脚本。该脚本将传递的第一个参数设置为 $HMC 变量。设置 $serverlist 变量的方法是连接到 HMC 并获得该 HMC 控制的所有托管服务器的清单。在这些托管服务器上进行循环,而脚本将为每台托管服务器打印一行 "HMC" -- "server" ,这表明 Graphviz 在每台 HMC 与其托管服务器之间绘制了一条直线。此外针对每台托管服务器,脚本再次连接到 HMC 并获得该托管系统上的 LPAR 清单,然后通过它们循环打印一行 "server" -- "LPAR"。这表明 Graphviz 在每台托管服务器与其 LPAR 之间都绘制了一条直线。 此脚本要求您在运行脚本的服务器与 HMC 之间设置 Secure Shell (SSH) 密钥身份验证。 清单 6 显示了脚本的输出。 清单 6. “./hmc_to_dot.sh hmc_name” 输出
您可以轻松从脚本生成图,具体方法是运行以下命令:./hmc_to_dot.shhmc_server_name|dot-Tpng-ohmc_graph.png 这将运行脚本,该脚本会动态创建 DOT 语言,然后将这些输出传递给 dot 命令,以便让它创建一个文件名为 hmc_graph.png 的图表。图 4 显示了创建的图表。 图 4. 从 hmc_to_dot.sh 脚本创建的图表 ![]() 下面两个脚本说明了使用脚本动态创建图表的一些可能性。这两个脚本均为 Perl 脚本,它们的输出均能会传递给 dot 命令,以便以生成图表。 这两个脚本要求您在运行脚本的服务器与 HMC 之间设置 SSH 密钥身份验证。这些脚本设计用于具有一台 VIOS 或两台 Virtual I/O Servers 的系统,根据您的环境,可能需要对它们进行修改。 第一个脚本从 HMC 与 Virtual I/O Servers 收集信息,动态地创建 IBM PowerVM? 环境中 NPIV 架构的图表。通过这个 NPIV 架构图表,很容易了解如何将物理的主机总线适配器 (HBA) 映射到虚拟的 HBA 与 LPAR。此脚本运行的时候使用 HMC 名称作为第一个参数,并将托管系统的名称用作第二个参数。 这类脚本可以通过 cron 每日运行,这样您就可以拥有准确且最新的自解释性图表。 清单 7. vio_npiv_info.pl – 创建 NPIV 图表 下载:- vio_npiv_info.pl 图 5. 从 vio_npiv_info.pl 创建的图表 ![]() 最后一个示例脚本从 HMC 和 Virtual I/O Server 中收集信息,然后生成 HMC 环境中 VSCSI 适配器映射的图表。此脚本运行的时候使用 HMC 名称作为第一个参数,并将托管系统的名称用作第二个参数。 清单 8. vio_vscsi_info.pl – 创建 VSCSI 图表 下载:- vio_vscsi_info.pl 图 6. 从 vio_vscsi_info.pl 创建的图表 ![]() 由于当今的动态虚拟环境的存在,系统在不断变化,很难保持文档与图表的时效性和准确性。本文介绍了 Graphviz 的基础知识,以及如何通过编写脚本,利用 Graphviz 的强大功能来创建最新、最准确的自动化环境图表。您可以从 cron 运行这些脚本,并将图表放在 Web 服务器上,这样就可以在您需要时随时重新创建图表,并通过 Web 浏览器轻松访问它们。 文章出处:IBM developerWorks |
|