首頁 > 軟體

使用 Graphviz 生成自動化系統圖

2020-06-16 17:42:37

如果您曾建立過系統環境的架構圖,那麼您可能很清楚,手動建立的這些圖通常在建立之日後就會過期。本文將介紹 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="Server1nWebServer",fillcolor="#ABACBA",style=filled] 定義了 Server1 節點應該是一個長方形,有一個 Server1nWeb Server 標籤(n 表示一個新行),顏色設為十六進位制 (hex) 顏色 #ABACBA,而且該顏色應該填充了節點。

基於前面的範例,清單 4 與圖 3 顯示了如何在圖上定義這些額外的屬性。

清單 4. 具有額外屬性的圖表 (example3.dot)
digraph example3 {
Server1 -> Server2
Server2 -> Server3
Server3 -> Server1

Server1 [shape=box, label="Server1nWeb Server", fillcolor="#ABACBA", style=filled]
Server2 [shape=triangle, label="Server2nApp Server", fillcolor="#DDBCBC", style=filled]
Server3 [shape=circle, label="Server3nDatabase 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 瀏覽器輕鬆存取它們。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-05/131048.htm


IT145.com E-mail:sddin#qq.com