Excel以外でネットワーク構成図を書きたくなったのでPlantUMLとnwdiagを試してみました。技術戦略部より、tipsやノウハウなど技術的な話題を発信いたします。by2019.2.19インフラネットワークExcel以外でネットワーク構成図を書きたくなったのでPlantUMLとnwdiagを試してみました。インフラまわりの担当をしているいせです。インフラエンジニアなら誰しもExcelでネットワーク構成図を作成した経験があるのではないでしょうか?私はラクーンに就職する前に2社で働いた経験があるのですが、いずれの現場でもExcelの構成図を触る機会がありました。そんなExcelのネットワーク構成図ですが、私は以下の点で不便に感じています。構成図を更新したときなどに差分比較しにくい構成図の規模が大きくなるとうまくレイアウトするのが大変そこで、テキストベースでホストやネットワークの関係性(ホストAとBは同じセグメント、セグメントZとYはルータRを介して接続される、など)を記述することで構成図を自動的に作成してくれるツールがないか探してみました。今回は以下の2つのツールを試してみたいと思います。nwdiagPlantUMLnwdiagを使ってみるこちらはテキストからネットワーク構成図を作成するツールです。今回はこれを使用してL3(IPレイヤー)の構成図を作成してみます。インストールnwdiagはPythonで書かれており、pipでインストールすることができます。nwdiagちなみに今回の検証は以下の環境で実施しています。~]#図の書き方テキストで構成図の内容を記述し、それをコマンドで画像へ変換することで構成図を作成することができます。以下はサンプルの構成図になります。}}これをテキストで保存し、次のコマンドで画像へ変換します。svg-Tオプションで変換後の画像の形式をしていすることができます。svg以外にもいくつかの形式に対応していますが、私はブラウザで開くことができて、画像内テキストの検索ができるsvgが好きです。変換後の画像がこちら。ESXiを使用して100台ほどの仮想サーバを立てています。テキストで済むとはいえ、これをすべて人手でnwdiagへ落とし込むのは大変そうです。そこで、ESXiにsshでログインし、設定情報を取得して自動で構成図を作成する簡単なBashスクリプトを作成してみました。doneと書いていたところ、ループ内で連想配列$port_assignへ追加した要素がループの外から参照できなくなってしまいまいた。原因はパイプ以降がサブシェルになってしまい、変数のスコープが分かれてしまったためです。そこでプロセス置換を利用し、パイプを使用しないコードに変更しています。引数にESXiのホスト名かIPアドレスを指定して実行すると、nwdiagを出力します。ESXiのバージョンは6.0を使用しています。・・・ESXiのポートグループごとにサブネットを切っていると仮定しています。複数のESXiから構成されているネットワークの場合は、ポートグループ名が一致していれば引数に複数のESXiを指定することでまとめて一つの構成図として出力することができます。例として2台のESXiにまたがるネットワーク構成図をnwdiag化させていみました。ESXiの設定は以下のようになっています。画像では物理アダプタが設定されていませんが、本来は1台目と2台目の間がLANケーブルで接続されており、それぞれのポートグループでVLANが分かれている想定です。1台目2台目スクリプトで出力したテキストがこちら。}}そして、これをnwdiagで画像に変換した結果が下記になります。本番環境でスクリプトを実行し構成図を作成してみたのですが、実用的とは言い難いものができてしまいまた。100以上のノードを一枚の図に書き込もうとすると、細かすぎて見にくくなってしまうのが問題です。試してみた限りでは20-30台程度が上限のようです。PlantUMLを使ってみるPlantUMLはその名にある通り、UMLをテキストから作成することができるツールです。試してみたのですが、こちらはIPレイヤーではなくアプリケーションレイヤーの構成図とする方が向いていそうです。今回はこの用途で使用してみます。Codeのプラグインとして導入することができます。今回はこれを使用します。Codeのプラグインだと書きながらプレビューできる点が便利です。PlantUMLは以下のソフトを利用しています。それぞを公式サイトからダウンロードし、インストールしてください。CodeにPlantUMLのプラグインを追加します。Code上でワンクリックでインストール可能です。今回の検証環境は以下の通りです。以下はサンプルの構成図になります。dを入力するとPlantUMLのプレビュー画面が表示されます。ファイル内のダイアグラムをエクスポート」を選択し、その後ファイル形式を指定するとテキストファイルの保存先フォルダ内に画像ファイルとして図を出力することができます。Code上でシンタックスハイライトが有効になります。エクスポートした図がこちら。ラクーンの構成図を作ってみた結果アプリケーションレイヤーの構成図はスクリプトで自動化することが難しかったので(アプリによって設定ファイルやフォーマットが異なるため)、手作業で作成してみました。こちらも規模が大きくなると難があるように感じました。冗長化されたサーバを一つにまとめたり、アプリケーションのドメインごとに別の図にかき分けたりと規模を小さくすれば何とか使用できそうです。ちなみに、作成した構成図は社内のGitLabで管理するようにしてみました。まとめ今回はネットワーク構成図をテキストから作成する方法としてnwdiagとPlantUMLをご紹介しました。nwdiagはホストが10-30台程度の環境であれば実用化できそうですが、ラクーンの規模では難しいように感じました。PlantUMLは規模によっては書き方に工夫が必要になりますが、アプリケーションレイヤーの構成図として使用することができそうです。