GrafanaのNetwork Weathermapでネットワーク全体のトラフィック状況を把握する

ネットワーク全体のトラフィック量を視覚的に確認できるようGrafanaのNetwork Weathermapのプラグインを利用したメモ

# やりたかったこと
- 各ネットワーク機器間のトラフィック量を視覚的に表現したい

# 今回の確認環境
- 各バージョン
    - トラフィック取得サーバ：Ubuntu 24.04.1 LTS
        - Prometheus, version 2.45.3
        - SNMP Exporter, version 0.25.0
        - grafana-server, Version 11.5.1
    - SNMPの監視対象：VyOS 1.5-rolling-202411070006

- 今回利用したGrafanaのNetwork Weathermapのプラグイン

https://grafana.com/grafana/plugins/knightss27-weathermap-panel/

- ネットワークシュミレータ上の構成
    - VyOSを3台設置
    - VPC-1からUbuntuサーバにサイズの大きいPINGトラフィックを流し続ける
        - `VPC-1> ping 10.0.0.1 -t -l 10000`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/43d012a4-b0e4-6b56-0e21-da2354176ce4.png)

- 今回作成したGrafanaのNetwork Weathermap

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/3cce40a4-8502-1346-a6cc-1408843af04c.png)


# 事前準備
## ネットワーク機器(VyOS)側の設定
VyOSのコンフィグは以下を参照
<details><summary>VyOS-Core-1 コンフィグ</summary>
<div>

```:VyOS-Core-1
set interfaces ethernet eth0 address '10.99.1.1/24'
set interfaces ethernet eth1 address '10.99.2.1/24'
set interfaces ethernet eth3 address '10.0.0.2/24'
set protocols static route 10.0.1.0/24 next-hop 10.99.1.2
set protocols static route 10.0.2.0/24 next-hop 10.99.2.2
set service snmp community public
set system host-name 'VyOS-Core-1'
set system login user vyos authentication encrypted-password '$6$rounds=656000$UG65L/PsThwhFAxh$ykpkjtpWkV/rsZ.PwWTHi5a7DfUDU3ukvZDjy70yNIyGCpzn94bGAcGUjdi/T5YZKiDpKjAB8UWsApemrUSKW0'
set system login user vyos authentication plaintext-password ''

```
</div></details>


<details><summary>VyOS-Edge-1 コンフィグ</summary>
<div>

```:VyOS-Edge-1
set interfaces ethernet eth0 address '10.99.1.2/24'
set interfaces ethernet eth1 address '10.0.1.2/24'
set protocols static route 0.0.0.0/0 next-hop 10.99.1.1
set service snmp community public
set system host-name 'VyOS-Edge-1'
set system login user vyos authentication encrypted-password '$6$rounds=656000$UG65L/PsThwhFAxh$ykpkjtpWkV/rsZ.PwWTHi5a7DfUDU3ukvZDjy70yNIyGCpzn94bGAcGUjdi/T5YZKiDpKjAB8UWsApemrUSKW0'
set system login user vyos authentication plaintext-password ''
```
</div></details>


<details><summary>VyOS-Edge-2 コンフィグ</summary>
<div>

```:VyOS-Edge-2
set interfaces ethernet eth0 address '10.99.2.2/24'
set interfaces ethernet eth1 address '10.0.2.2/24'
set protocols static route 0.0.0.0/0 next-hop 10.99.2.1
set service snmp community public
set system host-name 'VyOS-Edge-2'
set system login user vyos authentication encrypted-password '$6$rounds=656000$UG65L/PsThwhFAxh$ykpkjtpWkV/rsZ.PwWTHi5a7DfUDU3ukvZDjy70yNIyGCpzn94bGAcGUjdi/T5YZKiDpKjAB8UWsApemrUSKW0'
set system login user vyos authentication plaintext-password ''
```
</div></details>



## サーバ側準備
サーバのPrometheus・SNMP Exporter・GrafanaのインストールやSNMPなどの設定方法は以下のサイトを確認してください

https://qiita.com/k-maki/items/27f64fac97c36b0b7d33

今回は3台の機器からSNMPでトラフィック取得するので`prometheus.yml`を以下にしてます
(その他設定ファイルは前回と同じ)
```:/etc/prometheus/prometheus.yml
global:
  scrape_interval:     15s # メトリクスの収集間隔を15秒に設定（デフォルトは1分）
  evaluation_interval: 15s # ルール評価の間隔を15秒に設定（デフォルトは1分）

rule_files:
  - "snmp_rules.yml" # SNMPのIF情報のsysNameを追加するルールを適用

scrape_configs:
  - job_name: "snmp"  # SNMP監視用のジョブ名
    scrape_interval: 30s  # 30秒間隔でメトリクスを収集
    static_configs:
      - targets:
        - 10.0.0.2  # 監視対象のSNMPエージェント(VyOS-Core-1)
        - 10.0.1.2  # 監視対象のSNMPエージェント(VyOS-Edge-1)
        - 10.0.2.2  # 監視対象のSNMPエージェント(VyOS-Edge-2)
    metrics_path: /snmp  # SNMP Exporterが提供するメトリクスのエンドポイント
    params:
      module: [module_ifOctets] # SNMP Exporterの設定で使用するモジュール名
    relabel_configs:
      - source_labels: [__address__]  # ターゲットアドレスを取得
        target_label: __param_target  # SNMP Exporter用のtargetパラメータに設定
      - source_labels: [__param_target]  # 変換後のターゲットアドレスを取得
        target_label: instance  # instanceラベルとして設定
      - target_label: __address__
        replacement: 127.0.0.1:9116  # SNMP Exporterが動作するローカルアドレスを指定
```

# GrafanaのNetwork Weathermapプラグインをインストール

Ubuntuのサーバ上で以下を実施

```:Network Weathermapインストール
grafana-cli plugins install knightss27-weathermap-panel
```

プラグインインストール後、権限がrootのままのため変更の必要あり
```:Network Weathermapインストール後の権限
# ll /var/lib/grafana/plugins/
total 20
drwxr-x--- 5 grafana grafana 4096 Feb 11 02:55 ./
drwxr-xr-x 6 grafana grafana 4096 Feb 11 02:52 ../
drwxr-x--- 3 grafana grafana 4096 Feb  8 02:44 grafana-lokiexplore-app/
drwxr-x--- 5 grafana grafana 4096 Feb  8 08:04 grafana-pyroscope-app/
drwxr-xr-x 4 root    root    4096 Feb 11 02:55 knightss27-weathermap-panel/
```

権限を他に合わせて以下のコマンドでgrafanaに変更しプラグインのインストール完了
```:grafanaに変更
chown -R grafana:grafana /var/lib/grafana/plugins/
```

念のためgrafana-serverのリスタートしておく
```:grafana-serverのリスタート
systemctl restart grafana-server
```

# GrafanaでNetwork Weathermapの選択
送信トラフィックのクエリを作成する
- ②の場所は以下で入力、IFはethのみで、rateで計算、取得できたがバイトのためbit/secondの表示のため8倍する
    - `rate(ifOutOctets_sysName{ifDescr=~"eth.*"}[$__rate_interval])*8`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/7da7cccd-0d22-f1bf-debb-ae0bcb3160ab.png)

Network WeathermapのPanelを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/b421c398-5494-e266-663d-a0588c3d67e2.png)

# Network Weathermapの設定
## 画面上のノードを作る
初期設定でNode AとNode Bが表示されているので、いったん削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/b0ca21fa-1c8e-41cd-0eca-f891c8adf305.png)

「Add Node」でノードを作る、まずは1台設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/19d6fa0b-d5c5-376e-cbc9-8812ad47563b.png)

さらに「Add Node」でもう1台同じようにつくると以下のようになります
作ったノードはマップ上でドラッグして位置を変更できます。また、マウスのホイールで拡大縮小もできます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/0e14091e-1ddf-676c-76d1-3ede82f2ebf1.png)

## ノード間をリンクでつなげる
「Add Link」でノード間をつなげるリンクを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/117767ef-5f7d-65bd-4bf4-b58272102654.png)

リンクの設定を行う、Bandwidthは本来はIF速度だが、今回は後で設定する閾値設定で色を分ける動作をみるためテスト用に100000(100kbps)で設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/89ded781-1a64-93e0-3da9-1deaf8449dbd.png)

## 閾値を設定しトラフィック量に合わせて色を変える
「Add Scale Value」で閾値設定、閾値はbandwidthに対する割合となる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/6aeb7d3f-b60c-938a-f10d-4496d5ae8d85.png)


## 最終的なNetwork Weathermap
「Node」と「Link」を実際の構成に合わせて設定していった最終的なNetwork Weathermapは以下となります
ぱっと見で、VyOS-Edge-1がVyOS-Edge-2より多くトラフィックが流れていることが視覚的に確認できるようになりました。またリンクにマウスを合わせると簡易的なトラフィックグラフも表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043279/3cce40a4-8502-1346-a6cc-1408843af04c.png)

以上