歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用 Graphviz 生成自動化系統圖

使用 Graphviz 生成自動化系統圖

日期:2017/2/28 13:52:32   编辑:Linux教程

如果您曾創建過系統環境的架構圖,那麼您可能很清楚,手動創建的這些圖通常在創建之日後就會過期。本文將介紹 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 生成的圖表

第一個示例 (example1.dot) 描述了一個無向圖,即用不帶箭頭的直線表示節點之間的聯系的圖。

有向圖不僅能表示節點之間的聯系,而且能用箭頭表示節點之間流動的方向。要創建有向圖,可以在 DOT 文件的第一行上指定 digraph 而非 graph,並在節點之間使用 ->,而不是 --

清單 3 與圖 2 分別顯示了有向圖的 DOT 文件和圖。

清單 3. 有向的 DOT 文件 (example2.dot)
digraph example2 {
Server1 -> Server2
Server2 -> Server3
Server3 -> Server1
}
圖 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 生成的額外屬性的圖

編寫腳本來創建 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 腳本創建的圖表

更多復雜的腳本

下面兩個腳本說明了使用腳本動態創建圖表的一些可能性。這兩個腳本均為 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

Linux公社資源站下載:

------------------------------------------分割線------------------------------------------

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2016年資料/5月/6日/使用 Graphviz 生成自動化系統圖/

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

圖 6. 從 vio_vscsi_info.pl 創建的圖表

結束語

由於當今的動態虛擬環境的存在,系統在不斷變化,很難保持文檔與圖表的時效性和准確性。本文介紹了 Graphviz 的基礎知識,以及如何通過編寫腳本,利用 Graphviz 的強大功能來創建最新、最准確的自動化環境圖表。您可以從 cron 運行這些腳本,並將圖表放在 Web 服務器上,這樣就可以在您需要時隨時重新創建圖表,並通過 Web 浏覽器輕松訪問它們。

Copyright © Linux教程網 All Rights Reserved