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.shspeedtest を呼び出している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
コメント
コメントを投稿