Zabbixで通信回線速度(WAN or LAN)を監視する方法

# 背景
インターネットの速度測定でfast.com等を利用する事がありますがベストエフォートの一般プロバイダ回線では自身だけで無く他者の利用状況の日時によって通信速度が変動します。一時的なスポット測定ではなく常時測定して通信回線の状況を監視する事にします。
またインターネット側だけでなくVPN経由のローカルLAN回線の速度測定も監視する事にします。
通信回線を監視する事で通信速度の他に回線停止なども検知する事が出来ます。

# 測定環境
通信速度を測定する為には2点間（サーバーとクライアント）にそれぞれ仕組みが必要になります。
クライアント側は出来るだけ端末に近いエッジに設置する事で実際の現場に近い測定が可能になります。
サーバーに関してはインターネット側に公開されたspeedtestサーバーを利用します。
VPN接続のローカルLANではiperf3をサーバーとクライアントでそれぞれ動作させます。

# 動作環境
- Linux (ubuntu)
OS
- Zabbix
統合監視ソフト
- speedtest-cli
インターネット通信速度測定
- iperf3
LAN通信速度測定

# Zabbix
Zabbix ServerやZabbix Agentのセットアップに関しては割愛

# インターネット回線速度監視
speedtest-cliはインターネット上にある多数のspeedtestサーバー何れかに対して速度測定した結果が表示されます。

## speedtest-cli インストール(ubuntu)

```:
$ curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
$ sudo apt-get install speedtest
$ speedtest --version
Speedtest by Ookla 1.2.0.84 (ea6b6773cf) Linux/x86_64-linux-musl 6.5.0-14-generic x86_64
```

## 国内のspeedtest測定サーバーを検索

表示される内容は利用しているISPプロバイダによって違いますが最寄りのspeedtestサーバーの何れかが使用されます。

```:
$ speedtest --servers | grep -i japan
  6087  Allied Telesis Capital Corporation Fussa-shi            Japan
  8407  Allied Telesis Capital Corporation Sagamihara           Japan
 28910  fdcservers.net                 Tokyo                Japan
 21569  i3D.net                        Tokyo                Japan
 50686  GSL Networks                   Tokyo                Japan
 24333  Rakuten Mobile, Inc            Tokyo                Japan
 56935  Contabo                        Tokyo                Japan
 50467  Verizon                        Tokyo                Japan
 62217  CTCSCI TECH LTD                Tokyo                Japan
 ```

## jqをインストール

値抽出スクリプトにjqが使用されているので無い場合はインストール

```:
$ sudo apt install jq
```

## Zabbix speedtest

Zabbix Agentのホストにspeedtestのスクリプトを設定
内容的にはsystemdで定期的にスクリプト「zbx-speedtest.sh」を実行して測定結果を/tmp以下に出力しています。

```:
$ git clone https://github.com/pschmitt/zabbix-template-speedtest.git
$ cd zabbix-template-speedtest
$ sudo mkdir -p /etc/zabbix/bin
$ sudo cp zbx-speedtest-debian.sh /etc/zabbix/bin/zbx-speedtest.sh
$ sudo chmod +x /etc/zabbix/bin/zbx-speedtest.sh
$ sudo cp systemd/{zabbix-speedtest-debian.service,zabbix-speedtest.timer} /etc/systemd/system; sudo mv /etc/systemd/system/zabbix-speedtest{-debian,}.service
$ sudo systemctl enable --now zabbix-speedtest.timer
$ sudo cp zabbix_agentd.d/speedtest.conf /etc/zabbix/zabbix_agentd.d
$ sudo systemctl restart zabbix-agent
```

Zabbix Serverの設定画面でZabbix Agentホストに「zabbix-template-speedtest/zabbix-template/template_speedtest.xml」テンプレートを追加します。
Zabbixによる監視で以下の様にグラフ表示も出来ます！

![zabbix-speedtest-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35898/23721f3f-03b9-befc-6789-54886b3ee346.png)

# ローカルLAN回線速度測定
インターネットでは無いローカルLAN回線の速度も測定して監視する事にします。以外とローカルLANの障害検知に役立ちます。
今時はスイッチングハブの性能も向上していますので単体では意味がありませんが複数拠点間のVPN経由の速度測定と障害検知に利用出来ます。

## iperf3 インストール(ubuntu)
通信速度を測定する為には2点間（サーバーとクライアント）にそれぞれiperf3をインストールします。

```:
$ sudo apt install iperf3

$ iperf3 --version
iperf 3.9 (cJSON 1.7.13)
```

サーバー側にはZabbix Agentは必要ありませんが、iperf3をサーバーモードで動作させます。
参考：(https://gist.github.com/auipga/64be019018ef311deba2211ced316f5e)

```:/etc/systemd/system/iperf3.service
# /etc/systemd/system/iperf3.service
# User service: $HOME/.config/systemd/user/iperf3.service

[Unit]
Description=iperf3 server
After=syslog.target network.target auditd.service

[Service]
ExecStart=/usr/bin/iperf3 -s

[Install]
WantedBy=multi-user.target
```

```:
$ sudo systemctl enable iperf3.service
$ sudo systemctl start iperf3.service
```

## Zabbix speedtest-lan
クライアント側のZabbix Agentのホストにspeedtest-lanの設定ファイルを設置

```:
$ git clone https://git.cdp.li/polcape/zabbix.git
$ cd zabbix/zabbix-speedtest-lan
$ sudo mkdir -p /etc/zabbix/script
$ sudo cp speedtest-lan.sh /etc/zabbix/script
```

設定ファイルにiperf3サーバーを記載して設定

```:/etc/zabbix/script/speedtest-lan.sh
IPERF_NUMBER=1 # 測定数
IPERF_IP[0]="server-web"    # iperf3 Server ipアドレス番号
IPERF_NAME[0]="Server Web"  # iperf3 Server ホスト名
IPERF_TR_DL[0]="10"
IPERF_TR_UL[0]="10"
```

Zabbix Agentのホストにspeedtest-lanのスクリプトの実行設定

```:
$ sudo chmod +x /etc/zabbix/script/speedtest-lan.sh
$ sudo cp speedtest-lan.service speedtest-lan.timer /etc/systemd/system
$ sudo systemctl enable --now speedtest-lan.timer
$ sudo cp speedtest-lan.cron /etc/cron.d
$ sudo mkdir -p /etc/zabbix/zabbix_agentd.d
$ sudo cp speedtest-lan.conf /etc/zabbix/zabbix_agentd.d
$ sudo systemctl restart zabbix-agent
```

Zabbix Serverの設定画面でZabbix Agentホストに「zabbix/zabbix-speedtest-lan/template_speedtest-lan.xml」テンプレートを追加します。
VPN経由の回線速度もzabbixによる監視で以下の様にグラフ表示も出来ます！

![zabbix-speedtest-lan-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35898/165a8295-9d5d-df8e-2ab2-1aaa88e1ba25.png)