背景
インターネットの速度測定で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による監視で以下の様にグラフ表示も出来ます!
ローカル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
# 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サーバーを記載して設定
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による監視で以下の様にグラフ表示も出来ます!