使用 Graphviz 生成自动化系统图

如果您曾创建过系统环境的架构图,那么您可能很清楚,手动创建的这些图通常在创建之日后就会过期。本文将介绍 Graphviz 应用程序的基础知识,以及如何编写可以自动创建图的脚本,让您始终拥有最新的和正确的系统图。本文提供了一些示例脚本,以图的形式说明了基于 IBM® POWER® 处理器的服务器的 N-Port ID Virtualization (NPIV) 和虚拟 Small Computer System Interface (VSCSI) 配置。

Brian K. Smith, 系统管理员, Intermountain Healthcare

http://www.ibm.com/developerworks/aix/library/au-aix-graphviz/brian.jpg在撰写本文之际,Brian Smith 还是位于犹他州盐湖城的 Intermountain Healthcare 公司的一名 UNIX 系统管理员。您可以访问他的 developerWorks 博客



2012 年 11 月 19 日

简介

一幅图抵得上千言万语,这在描述复杂的计算机系统时尤为正确。当系统环境变得更加复杂时,用图将它们表示出来并记入文档就显得更加重要。例如,虚拟化技术有很多优点,但它们通常会让环境变得更加复杂和更难理解。Graphviz 是一个可以创建图表的灵活应用程序,可以轻松实现脚本化。本文将介绍 Graphviz DOT 语言的基础知识,并提供了一些示例脚本,以图的形式说明基于 IBM POWER 处理器的服务器的 Virtual I/O Server (VIOS) NPIV 和 VIOS VSCSI 架构。本文有助于您了解 Graphviz 应用程序的基础知识,以及如何编写自动创建图表的脚本。


获取 Graphviz

Graphviz 是一个开源工具,可以运行在类似于 UNIX® 的大多数平台和 Microsoft® Windows® 之上。适用于大多数平台的二进制文件可以在 Graphviz 主页 上找到。AIX 二进制文件可以在 perzl.org 上找到。

Graphviz 应用程序中有多种工具可以生成各种类型的图表(dot、neato、circo、twopi 等)。本文将重点介绍用于生成层级图的 dot 工具。


DOT 语言基础

安装 Graphviz 之后,就可以开始使用工具创建图表,第一步是创建一个 DOT 文件。该 DOT 文件是一个文本文件,描述了图表的组成元素以及它们之间的关系,以便该工具可以生成这些组成元素和它们之间的关系的图形化表示。

清单 1 了一个最基本的 DOT 文件。

清单 1. 基本的 DOT 文件 (example1.dot)
graph example1 {
Server1 -- Server2
Server2 -- Server3
Server3 -- Server1
}

清单 1 中共有三个节点(Server1、Server2 和 Server3)。-- 定义了节点之间的联系。这个使用 DOT 语言的例子说明,Server2、 Server2 连接到 Server3,而 Server3 连接到 Server1。

创建 DOT 文件后,可以运行 dot 命令来生成图表,如清单 2 中所示。Tpng 将输出格式指定为 PNG,而 –o example1.png 指定必须将输出保存到一个名叫 example1.png 的文件中。

清单 2. 从 DOT 文件生成图像

$ dot example1.dot –Tpng –o example1.png

清单 1 中 DOT 文件生成的图像如图 1 中所示。

图 1. 从 example1.dot 生成的图表
图 1. 从 example1.dot 生成的图表

第一个示例 (example1.dot) 描述了一个无向图,即用不带箭头的直线表示节点之间的联系的图。

有向图不仅能表示节点之间的联系,而且能用箭头表示节点之间流动的方向。要创建有向图,可以在 DOT 文件的第一行上指定 digraph 而非 graph,并在节点之间使用 ->,而不是 --

清单 3 与图 2 分别显示了有向图的 DOT 文件和图。

清单 3. 有向的 DOT 文件 (example2.dot)
digraph example2 {
Server1 -> Server2
Server2 -> Server3
Server3 -> Server1
}
图 2. 从 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)
digraph example3 {
Server1 -> Server2
Server2 -> Server3
Server3 -> Server1

Server1 [shape=box, label="Server1\nWeb Server", fillcolor="#ABACBA", style=filled]
Server2 [shape=triangle, label="Server2\nApp Server", fillcolor="#DDBCBC", style=filled]
Server3 [shape=circle, label="Server3\nDatabase Server", fillcolor="#FFAA22",style=filled]
}
图 3. 从 example3.dot 生成的额外属性的图
图 3. 从 example3.dot 生成的额外属性的图

编写脚本来创建 Graphviz 图表

在了解了 Graphviz DOT 语言的基础知识之后,您可以开始创建脚本,从而动态创建一个 DOT 文件。这允许您动态创建始终准确且保持最新的图表。

清单 5 中的第一个示例是一个 bash shell 脚本,它连接到 Hardware Management Console (HMC),收集托管服务器和逻辑分区 (LPAR) 的相关信息,然后使用这些信息来创建 DOT 输出。

清单 5. hmc_to_dot.sh
#!/bin/bash

HMC="$1"

serverlist=`ssh -q -o "BatchMode yes" $HMC lssyscfg -r sys -F "name" | sort`

echo "graph hmc_graph{"

for server in $serverlist; do
    echo " \"$HMC\" -- \"$server\" "
    lparlist=`ssh -q -o "BatchMode yes" $HMC lssyscfg -m $server -r lpar -F "name" | sort`
    for lpar in $lparlist; do
             echo "    \"$server\" -- \"$lpar\" "
    done
done

echo "}"

通过提供一个 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” 输出
graph hmc_graph{
 "hmc01" -- "test520"
    "test520" -- "lpar2"
    "test520" -- "lpar3"
 "hmc01" -- "test570"
    "test570" -- "aixtest01"
    "test570" -- "aixtest02"
    "test570" -- "aixtest03"
 "hmc01" -- "test510"
    "test510" -- "lpar1"
}

您可以轻松从脚本生成图,具体方法是运行以下命令:./hmc_to_dot.shhmc_server_name|dot-Tpng-ohmc_graph.png

这将运行脚本,该脚本会动态创建 DOT 语言,然后将这些输出传递给 dot 命令,以便让它创建一个文件名为 hmc_graph.png 的图表。图 4 显示了创建的图表。

图 4. 从 hmc_to_dot.sh 脚本创建的图表
图 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 创建的图表
图 5. 从 vio_npiv_info.pl 创建的图表

最后一个示例脚本从 HMC 和 Virtual I/O Server 中收集信息,然后生成 HMC 环境中 VSCSI 适配器映射的图表。此脚本运行的时候使用 HMC 名称作为第一个参数,并将托管系统的名称用作第二个参数。

清单 8. vio_vscsi_info.pl – 创建 VSCSI 图表
图 6. 从 vio_vscsi_info.pl 创建的图表
图 6. 从 vio_vscsi_info.pl 创建的图表

点击查看大图

图 6. 从 vio_vscsi_info.pl 创建的图表

图 6. 从 vio_vscsi_info.pl 创建的图表

结束语

由于当今的动态虚拟环境的存在,系统在不断变化,很难保持文档与图表的时效性和准确性。本文介绍了 Graphviz 的基础知识,以及如何通过编写脚本,利用 Graphviz 的强大功能来创建最新、最准确的自动化环境图表。您可以从 cron 运行这些脚本,并将图表放在 Web 服务器上,这样就可以在您需要时随时重新创建图表,并通过 Web 浏览器轻松访问它们。

参考资料

学习

  • Graphviz 网站 上拥有许多极为优秀的文档,您可以下载适用于此处的大多数平台的 Graphviz。
  • perzl.org 网站 上可以找到 Graphviz 的 AIX 二进制文件。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=846329
ArticleTitle=使用 Graphviz 生成自动化系统图
publish-date=11192012