使用 Graphviz 生成自动化系统图


如果您曾创建过系统环境的架构图,那么您可能很清楚,手动创建的这些图通常在创建之日后就会过期。本文将介绍 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

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 图表
下载:- vio_vscsi_info.pl

到帮客之家资源站下载:

------------------------------------------分割线------------------------------------------

免费下载地址在 http://linux.bkjia.com/

用���名与密码都是www.bkjia.com

具体下载目录在 /2016年资料/5月/6日/使用 Graphviz 生成自动化系统图/

下载方法见

------------------------------------------分割线------------------------------------------

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

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

结束语

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

本文永久更新链接地址

相关内容