Zabbixで Speedtest (Okura)

知人のお嬢さんが情報系に進みたいと言ったとき母親が反対したとか。そういえばわたしも中学時代の科学部は怪しそうな雰囲気で敬遠しました。(笑)ちょっと残念です。

早速ですがZabbixネタの追加です。Zabbixで回線速度モニタをします。参考にしたのは Zabbixで自宅のインターネット回線速度を監視する – Speedtest CLI ( https://devlog.arksystems.co.jp/2021/03/23/14553/ ) と Zabbixで通信回線速度(WAN or LAN)を監視する方法 ( https://qiita.com/ohhara_shiojiri/items/c8df98090acd388e92e5 ) などです。検証環境はRockyLinux9とZabbix7.0。

そのままでは計測速度がバラつきが生じます、原因は測定先のサイトを固定できていないせいですので最後にスクリプトを一部修正して測定先サーバを固定します。 測定に使っているのはいつものSpeedtest (Okura)で、Zabbixへの取り込みはZabbix Speedtest template を使います。テンプレの配布サイトはこちら。https://github.com/pschmitt/zabbix-template-speedtest

1.Speedtest CLI スクリプト取得

公式サイト https://www.speedtest.net/ja/apps/cli に記載の手順です。
## If migrating from prior bintray install instructions please first...
# sudo rm /etc/yum.repos.d/bintray-ookla-rhel.repo
# sudo yum remove speedtest
## Other non-official binaries will conflict with Speedtest CLI
# Example how to remove using yum
# rpm -qa | grep speedtest | xargs -I {} sudo yum -y remove {}
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | sudo bash
sudo yum install speedtest

実行してみる

オプションを付けないときはそのまま測定します。
speedtest

オプション確認

使用できるサイトの一覧を出したり測定サイトを固定したりもできます。測定プログラム本体には測定サイトを固定できるオプションがあるのですが、Zabbixからこのプログラムを呼び出すスクリプトの方には測定サイトを固定するオプションがありませんからあとでそちらは修正します。
[root@ ~]# speedtest --help
Speedtest by Ookla is the official command line client for testing the speed and performance of your internet connection.

Version: speedtest 1.2.0.84

Usage: speedtest []
  -h, --help                        Print usage information
  -V, --version                     Print version number
  -L, --servers                     List nearest servers
  -s, --server-id=#                 Specify a server from the server list using its id
  -I, --interface=ARG               Attempt to bind to the specified interface when connecting to servers
  -i, --ip=ARG                      Attempt to bind to the specified IP address when connecting to servers
  -o, --host=ARG                    Specify a server, from the server list, using its host's fully qualified domain name
  -p, --progress=yes|no             Enable or disable progress bar (Note: only available for 'human-readable'
                                    or 'json' and defaults to yes when interactive)
  -P, --precision=#                 Number of decimals to use (0-8, default=2)
  -f, --format=ARG                  Output format (see below for valid formats)
      --progress-update-interval=#  Progress update interval (100-1000 milliseconds)
  -u, --unit[=ARG]                  Output unit for displaying speeds (Note: this is only applicable
                                    for ‘human-readable’ output format and the default unit is Mbps)
・
・
・

2.zabbix-template-speedtest 取得

githubで公開されています。https://github.com/pschmitt/zabbix-template-speedtest 次の3つが必要と書いています。bcがサーバに入っていませんでしたので入れておきます。
bc
jq
speedtest-cli
インストール
git clone https://github.com/pschmitt/zabbix-template-speedtest.git
cd zabbix-template-speedtest
mkdir -p /etc/zabbix/bin
cp zbx-speedtest.sh /etc/zabbix/bin/zbx-speedtest.sh
chmod +x /etc/zabbix/bin/zbx-speedtest.sh
cp systemd/{zabbix-speedtest.service,zabbix-speedtest.timer} /etc/systemd/system
systemctl enable --now zabbix-speedtest.timer
cp zabbix_agentd.d/speedtest.conf /etc/zabbix/zabbix_agentd.d
systemctl restart zabbix-agent

重要なファイルとフォルダ

実行スクリプト(/etc/zabbix/bin/)
zbx-speedtest.sh 
サービス起動スクリプト (/etc/systemd/systemフォルダ)
zabbix-speedtest.timer
zabbix-speedtest.service
測定結果ファイル(*)
/tmp/speedtest.json 
生成される設定ファイルのフォルダ(*)
/var/lib/zabbix/.config

注意と修正

テストで実行する場合も必ず sudo -u zabbix zbx-speedtest.sh として実行します。一連のプログラムはユーザ「zabbix」で動作することが期待されており、上記(*)のフォルダとファイルはユーザ「zabbix」で生成されるためです。

修正1

デフォルトままではサービス起動に失敗してエラーが出ますので修正します。zabbix-speedtest.service の実行ユーザをzabbix-agent になっているのを zabbix に修正します。
cd /etc/systemd/system
vi zabbix-speedtest.service
修正内容
[Service]
・
・
User=zabbix

修正2

作業フォルダを作ります。zbx-speedtest.sh の初回実行時にこの下にファイルが生成されます。
cd /var/lib
mkdir zabbix
chown zabbix:zabbix zabbix
ここまでの修正で動作するようになります。

初回実行

始めて実行すると、/var/lib/zabbix/.config/以下に初期設定ファイルが生成されます。オプションなしか、-rオプション付きで実行すると測定が行われます。zbx-speedtest.sh には測定先のサーバを固定する設定がありません。
cd /etc/zabbix/bin/
sudo -u zabbix ./zbx-speedtest.sh
ヘルプでオプションを確認しますがやはりモニタ用のオプションしかないようです。
[root@ bin]# sudo -u zabbix ./zbx-speedtest.sh --help
Usage: "zbx-speedtest.sh" OPTION

-u: Display last measured upload speed
-d: Display last measured download speed
-j: Display last measured jitter
-p: Display last measured ping latency
-t: Display last measurement timestamp
-s: Display last server used for measurements
-m X: Fail/don't display data if it is older than X seconds

-r|--run: Run speedtest

修正3

ということで実行スクリプトを修正して測定サイトを固定します。
cd /etc/zabbix/bin
cp zbx-speedtest.sh zbx-speedtest.sh-org
vi zbx-speedtest.sh
speedtest を呼び出している164行目 -s でサーバを指定します。6766はJAISTです。
    if speedtest -s 6766 --accept-license --accept-gdpr -f json > "${DATA_FILE}.new"
反映されているか確認のため実行します。
sudo -u zabbix ./zbx-speedtest.sh、
最後の実行で測定されたサイトが 6766になっているか確認します。
sudo -u zabbix ./zbx-speedtest.sh -s
問題ないようですのでこれで完了です。(JAISTもうちの回線では安定しませんでしたので、このあとGSLに直しました)

エラー例

実行ユーザをzabbix-agentからzabbixに変更していないとき
.service: Failed to determine user credentials: No such process

とか

ConnectionRefusedError: [Errno 111] Connection rejected

が出ればサービスを再起動するとか、/tmpの一時ファイルを消すとかしてみます。

測定先サーバの指定が大事

測定がspeedtestコマンドに依存していて自動だと測定先サーバが毎回?替わるので速度がバラバラになります。JAISを指定してみたのですが、TTLなど品質が悪いとspeedtestコマンドはエラー終了して測定結果がプロットされないことが生じます。GSLを使うと安定しましたので当面これで行こうと思います。何年か前までたくさんあったSpeedtest測定サイトのうち品質の低いサイトが整理されてずいぶん減りましたがこういうことのためだったのかなと思います。測定先サーバはユーザの回線により安定するものが違うでしょうからそれぞれ最適なものをどうぞ。

測定を一時中止するとき・・・

systemctl stop zabbix-speedtest.service
systemctl disable zabbix-speedtest.service

コメント

このブログの人気の投稿

OfficeのISOダウンロード直リンク

FortiGateシリーズ 40F/50E/60E/60F/80F/90E/100E/100F/200FのCPU

ネクストのIPv6網内折り返し通信で高速VPN