Splunk - ネットワーク構成図を作ってみた

## はじめに
ネットワーク構成図をSplunkで作成して欲しいという要望があり、**Network Diagram Viz**というAppを使ってみた話です。この[Network Diagram Viz](https://splunkbase.splunk.com/app/4438)は、Splunkbaseから無償でダウンロード可能なAppです。
![スクリーンショット 2024-12-27 14.33.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/39b8a8cd-01e1-6ef7-934c-9f09f44d8858.png)

## さっそく使ってみよう
Appのインストールは他Appとの違いは特に無いので割愛します。特に設定は無いので、入れるだけで大丈夫です。

### [0] 必要なフィールドについて
ネットワークトポロジーを形成する上で必要なフィールドは`from`フィールドと`to`フィールドの2つです。`from`や`to`は`src`フィールドや`dest`フィールドなど送信元と宛先の情報を持つ何らかのフィールドを変換して使えば良いかと思います。`from`フィールドと`to`フィールドへの変換は必須なので、そこだけは注意しましょう。

### [1] まずは適当に作ってみた
このAppに限らずですが、まずは適当に試行してみるのが良いかと思いますので、以下のテーブル構造を持つデータで検証しました。

|from|to|
|:-:|:-:|
|Wi-Fi a1|LAN Switch 1|
|Wi-Fi a2|LAN Switch 1|
|Wi-Fi b1|LAN Switch 2|
|Wi-Fi b2|LAN Switch 2|
|LAN Switch 1|Core Switch|
|LAN Switch 2|Core Switch|
|Core Switch|Firewall|
|Router|Firewall|
|Internet|Router|
|Firewall|DMZ Switch|
|Windows Server|DMZ Switch|
|Linux Server|DMZ Switch|
|Database|DMZ Switch|

結果は次のとおり。間違ってはいないんだけど見づらいですね。
![スクリーンショット 2024-12-27 14.48.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/ac6a48e6-ffb2-76c9-d2b1-ba5a883ad587.png)

### [2] ノードを整形してみた
見やすいネットワークトポロジーとは何でしょうか。私自身は、LAN(社内)からWAN(社外)へのノードが綺麗に並んでる状態だと思うので、そのようにやってみたいと思います。

・Hierarchy -> Hierarchy View を`True`に変更
・Hierarchy -> Sort Method を`Hub Size`に変更

結果は次のとおり。さっきよりは見やすいけど、`Wi-Fi a1`がトップに来て欲しい訳ではないんだよね…
![スクリーンショット 2024-12-27 15.01.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/2fd38650-8b6d-7f9e-dcc8-5835d21e320c.png)

### [3] LANからWANに並び替えてみた
なんで`Wi-Fi a1`がトップに来たのだろう?と思ったのですが、単純にデータの並びでした。

|from|to|
|:-:|:-:|
|Wi-Fi a1|LAN Switch 1|
|・・・|・・・|
|Internet|Router|
|・・・|・・・|

今回のサンプルで最もWAN(社外)にあるのは`Internet`なので、そのようにデータを整形します。

|from|to|
|:-:|:-:|
|**Internet**|**Router**|
|Wi-Fi a1|LAN Switch 1|
|・・・|・・・|

結果は次のとおり。期待するネットワーク構成図になりました。
![スクリーンショット 2024-12-27 15.03.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/efd83de1-7527-33a5-53e4-9444dcaa3bc9.png)

## ノードのアイコンを変更してみた
ネットワーク構成図は先ほどの内容とし、各ノードのアイコンを変更し、もう少し見やすいものにしてみたいと思います。その際に必要なのは`type`フィールドです。`type`フィールドを追加すると以下のような結果になります。
![スクリーンショット 2024-12-27 15.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/6f42b576-c288-fa3f-5a4e-98d390f5a183.png)

このネットワーク構成図は先ほどのテーブル構造を以下のように変更しました。

|from|to|type|
|:-:|:-:|:-:|
|Internet|Router|cloud|
|Router|Firewall|network-wired|
|Firewall|DMZ Switch|Firewall|
|Wi-Fi a1|LAN Switch 1|wifi|
|Wi-Fi a2|LAN Switch 1|wifi|
|Wi-Fi b1|LAN Switch 2|wifi|
|Wi-Fi b2|LAN Switch 2|wifi|
|LAN Switch 1|Core Switch|network-wired|
|LAN Switch 2|Core Switch|network-wired|
|Core Switch|Firewall|network-wired|
|**DMZ Switch**||network-wired|
|Windows Server|DMZ Switch|windows|
|Linux Server|DMZ Switch|linux|
|Database|DMZ Switch|database|

ポイントは`type`フィールドで指定したノードは`from`フィールドのノードのアイコンとなります。今回のサンプルでは **DMZ Switch** が`from`フィールドに登場していなかったので、`to`フィールドを空欄として追加しています。

## ノードの色を変更してみた
ネットワーク障害やトラフィック量が基準値より超過した際に、ネットワーク構成図を見て問題の箇所が特定できると嬉しいので、各ノードの色を変更できるようにしたいと思います。その際に必要なのは`color`フィールドです。`color`フィールドを追加すると以下のような結果になります。
![スクリーンショット 2024-12-27 15.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/dcc30bb8-b792-4870-2a44-5f99f6a68603.png)

このネットワーク構成図は先ほどのテーブル構造を以下のように変更しました。

|from|to|type|color|
|:-:|:-:|:-:|:-:|
|Internet|Router|cloud|green|
|Router|Firewall|network-wired|green|
|**Firewall**|DMZ Switch|Firewall|**green**|
|Wi-Fi a1|LAN Switch 1|wifi|green|
|Wi-Fi a2|LAN Switch 1|wifi|green|
|Wi-Fi b1|LAN Switch 2|wifi|yellow|
|Wi-Fi b2|LAN Switch 2|wifi|red|
|LAN Switch 1|Core Switch|network-wired|green|
|LAN Switch 2|Core Switch|network-wired|green|
|Core Switch|Firewall|network-wired|green|
|DMZ Switch||network-wired|green|
|Windows Server|DMZ Switch|windows|red|
|Linux Server|DMZ Switch|linux|green|
|Database|DMZ Switch|database|green|

先ほどと同様に`color`フィールドで指定したノードの色は`from`フィールドを対象とします。すごく見やすくなったのですが、よくみると`Firewall`は文字が緑色になっているけどアイコンの色は変わっていません。`app/network-diagram-viz/available_icons`を確認してみると、Available Iconsでcolorを変更できるものと、そうじゃないものがあるようです。

例えば、以下のようにアイコンを変更することでノードの色も変更できるようになります。

|from|to|type|color|
|:-:|:-:|:-:|:-:|
|・・・|・・・|・・・|・・・|
|Firewall|DMZ Switch|**shield-alt**|green|
|・・・|・・・|・・・|・・・|

![スクリーンショット 2024-12-27 16.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/92e5973d-0211-77a3-3a3e-ae2753cbd2dd.png)

このあたりは好みによるかと思います。他にもリンク情報を追加するなども可能ですが、情報が多いとビジーに感じるかも知れません。
![スクリーンショット 2024-12-27 16.38.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/987992d1-96ed-e6f6-779e-1d1ab6994249.png)


## 終わりに
如何でしたでしょうか。**Network Diagram Viz**を利用してネットワーク構成図を作成する場合、ネットワークログからネットワーク構成図を生成するより、lookupでトポロジーマップのデータを準備しておき、ステータス(障害、遅延など)を示す様な情報をログから抽出した方が良さそうですかね。しばらく運用してみて、良い方法が見つかれば情報更新します。

## 追記
Network Diagram VizのAppを用いた記事として [グラフ・ネットワークを Splunkで作る!(Qiita)](https://qiita.com/maroon/items/38be94ac6b3fb765274c)   や [Splunkでメールの配送図を作ろう(IIJ Engineer Blog)](https://eng-blog.iij.ad.jp/archives/28601) という記事も見つけました。