本記事では、Checkmkで「Speedtest」を自動的に実行させ、その結果をグラフ表示し保存する方法をご紹介します。
※本記事に掲載されている商品またはサービス名称は、各社の商標または登録商標です。
はじめに
Checkmkの監視対象は、サーバーやネットワーク機器だけではありません。
「Speedtest 」と組み合わせることで、インターネット回線のダウンロード速度・アップロード速度・Pingを定期的に取得し、Checkmkでグラフ化・監視できます。
それではLinux・Windowsそれぞれでの設定方法と、運用時のポイントをご紹介します。
Speedtest CLIとは
Speedtest CLIは、Ookla社が提供しているコマンドライン版のSpeedtestです。GUI版とは異なり、
- ダウンロード速度
- アップロード速度
- Ping
の情報をコマンドラインから取得できます。
PowerShellやシェルスクリプトとの相性も良く、監視ツールとの連携にも最適です。
Speedtestを監視するメリット
数値を継続的に数値・グラフで記録できる
Checkmkへ取込むことで、ダウンロード速度・アップロード速度をパフォーマンスデータとして保存し、グラフや履歴から速度の変化を確認できます。
現在の通信速度だけでなく、過去との比較や長期的な傾向分析も一目で確認できます。
複数拠点の情報を定量管理・比較できる
複数の拠点へ導入することで、それぞれの通信速度を同じ基準で比較・見える化できる点も大きなメリットです。拠点ごとに通信速度を継続的に記録しておくことで、速度低下やPingの変化にも気付きやすくなり、インターネット回線の状態を定量的に管理できるようになります。
Checkmkの監視画面例
監視間隔ごとにテストを実行させ、結果を表示・保存します。情報はインストール済のエージェントが収集し、Checkmkサーバーへと集約します。
履歴グラフの例


グラフからも、何時頃に速度が通常の半分になっていた、など通信速度の簡単な原因調査が可能です。このグラフデータは最大4年間分表示にも対応しており、JSONやCSV形式で書き出しにも対応しております。
設定手順
ここからは、Linux(Checkmkサーバー)・Windowsへの「Speedtest」の設定方法をお伝えします。どちらの場合も、「Checkmkエージェントインストール」と「Speedtest CLIのインストール」手順は共通です。
Checkmkエージェントインストール
以降、Checkmkエージェントをインストールしてある前提で解説しますので、インストールされていない場合はユーザーガイドを参考にこのタイミングで実施してください。エージェントは自動更新機能まで設定されていると便利です。
Speedtest CLIのダウンロード
Ookla社が提供するSpeedtest CLIをダウンロードします。
Linux、Windowsそれぞれに対応しており、各種OS向けのパッケージが用意されておりますので、そのインストーラまたはパッケージを公式サイトの手順に沿いダウンロードしてください。
設定手順-Linux(Checkmkサーバー上)で実行する場合
Linux、つまりCheckmkサーバー上でSpeedtestを実行し、インターネット速度を監視する方法です。
Step1:Speedtestをインストールする
こちらのページの指示通り、該当のディストリビューションの手順に従いインストールします。
※注意:Checkmk仮想アプライアンスをご利用の場合、パッケージインストールができないため本機能はご利用いただけません。

Speedtestのインストールコマンドまでが完了すればOKです。念のため「speedtest」と実行して以下のように実行結果がでれば正常にインストールされています。

Step2 : Speedtest 実行用スクリプトを作成・配置する
30秒ごとに実行されるよう、ディレクトリにスクリプトを作成します。
sudo mkdir -p /usr/lib/check_mk_agent/local/1800
※「1800」というディレクトリを作成しスクリプトを格納すると、「1800秒」=30分ごとに実行される
スクリプト例
#!/bin/bash
# ---------------------------------------
# speedtest_check
# Checkmk Local Check用
# Ookla Speedtest CLI JSON解析
# Mbps換算
# ---------------------------------------
# Speedtest実行
JSON=$(speedtest --accept-license --accept-gdpr -f json 2>/dev/null)
if [ -z "$JSON" ]; then
echo "2 speedtest_download download_speed=0|upload_speed=0|ping=0 Speedtest Error"
exit 0
fi
# JSON解析
DOWNLOAD=$(echo "$JSON" | jq '.download.bandwidth')
UPLOAD=$(echo "$JSON" | jq '.upload.bandwidth')
PING=$(echo "$JSON" | jq '.ping.latency')
# bps → Mbps
DOWNLOAD_MB=$(awk "BEGIN {printf \"%.2f\", $DOWNLOAD * 8 / 1000000}")
UPLOAD_MB=$(awk "BEGIN {printf \"%.2f\", $UPLOAD * 8 / 1000000}")
PING_MS=$(awk "BEGIN {printf \"%.2f\", $PING}")
# Checkmk Local Check形式
echo "0 speedtest_download download_speed=${DOWNLOAD_MB}|upload_speed=${UPLOAD_MB}|ping=${PING_MS} Speedtest Download=${DOWNLOAD_MB}Mbps Upload=${UPLOAD_MB}Mbps Ping=${PING_MS}ms"
以下コマンドで実行権限を付与してください。
sudo chmod +x /usr/lib/check_mk_agent/local/1800/speedtest_check

JSON解析用にjqがインストールされていない場合はjqをインストールしてください。
sudo apt install jq
念のためコンソール上で実行できるかサイトユーザーで確認。
sudo /usr/lib/check_mk_agent/local/1800/speedtest_check
実行結果がコンソール上で以下のとおり結果が確認できれば準備完了。

Step3 : Checkmkサーバー上でサービスディスカバリを実行
Checkmkサーバーに登録したCheckmkサーバー自身に対してサービスディスカバリを実行し、先ほど作成したスクリプトの実行結果をサーバー側で確認できるようにサービスに並べます。

監視対象として追加し、変更のアクティベートを実行。

「speedtest_download」というサービスが作成されていれば連携完了です。
以上が、Checkmkサーバー(Linux)でのSpeedtest実行方法となります。
設定手順-Windowsクライアントで実行する場合
Checkmkサーバーとは別に用意したWindows端末でspeedtestを実行し、エージェントに監視結果を連携させる方法です。
WindowsではSpeedtest CLIを直接ローカルチェックから実行させると、Agent取得のたびにSpeedtestが実行されてしまい、CPU負荷やネットワーク負荷がとても高くなります。そこで、今回は「Windowsタスクスケジューラ」と「Checkmkローカルチェック」を組み合わせる方法で実装します。
Step1 : speedtest.exeを配置する
ダウンロードしたZIPファイルを展開し、speedtest.exeを任意のフォルダへ配置します。
例:C:\Program Files\Ookla\Speedtest\speedtest.exe
Step2 : Speedtest 実行用スクリプトを作成・配置する
以下のように実行スクリプトを作成します。これも、任意のフォルダへ配置します。
例:C:\Scripts\speedtest_runner.ps1
以下スクリプト例です。スクリプトの記載内容や出力内容は任意ですが、最後に、実行した結果を画面に出力するのではなく任意のファイルへ保存する方法で作成します。
# ---------------------------------------
# speedtest_runner.ps1
# Checkmk Local Check 用
# UTF-8 出力、JSON 解析、Mbps換算
# ---------------------------------------
# UTF-8 で出力
$OutputEncoding = [System.Text.Encoding]::UTF8
# Speedtest CLI のパス
$speedtestPath = "C:\Program Files\Ookla\Speedtest\speedtest.exe"
# Speedtest 実行
try {
$json = & $speedtestPath --accept-license --accept-gdpr -f json 2>$null
if (-not $json) {
throw "Speedtest CLI did not return data"
}
$result = $json | ConvertFrom-Json
} catch {
# エラー時は Critical として 0 出力
Write-Output "2 speedtest_download download_speed=0|upload_speed=0|ping=0 Speedtest Error: $_"
exit
}
# ダウンロード・アップロード速度(bps → Mbps)
$download = [math]::Round($result.download.bandwidth * 8 / 1000000, 2)
$upload = [math]::Round($result.upload.bandwidth * 8 / 1000000, 2)
$ping = [math]::Round($result.ping.latency, 2)
# 実行結果をファイルへ保存
$line = "0 speedtest_download download_speed=$download|upload_speed=$upload|ping=$ping Speedtest Download=${download}Mbps Upload=${upload}Mbps Ping=${ping}ms"
$line | Out-File "C:\ProgramData\checkmk\agent\local\speedtest.out" -Encoding ascii
Step3 : Checkmkエージェント用のスクリプトを作成・配置する
これはCheckmkサーバーにサービスとして読み込ませる必要があるため、必ず以下のフォルダへ配置してください。
C:\ProgramData\checkmk\agent\local\speedtest.ps1
中身は先ほど出力したファイルの中身をGetするだけです。
Get-Content "C:\ProgramData\checkmk\agent\local\speedtest.out"
Step4 : Windowsのタスクスケジューラを設定する
Windowsのタスクスケジューラを開き、操作>タスクの作成 から以下の通りタスクを設定していきます。今回は30分毎に実行するタスクに設定していきます。
ブラウザからSpeedtestの実行を実施いただければわかるように、実行には1~2分程度時間がかかりますので、1分毎の実行に設定するとタイムアウトが頻発します。余裕をもった間隔での実行がおすすめです。

トリガータブで新規トリガーを登録します。

操作タブで新規操作を登録します。

設定タブで必要な追加設定を登録します。

登録後、「実行するユーザーアカウント情報を入力してください」とポップアップが出た場合は入力してください。

初回で試しに実行したい場合は、タスクを右クリックし実行することが可能です。
実行すると、C:\ProgramData\checkmk\agent\local\に「speedtest.out」というファイルができます。中に実行結果が出力されていればPowerShellが正常に動作しています。
Step5 : Checkmkサーバー上でサービスディスカバリを実行
Checkmkサーバーに登録した該当のWindows端末のサービスディスカバリを実行し、先ほど作成したスクリプトの実行結果をサーバー側で確認できるようにサービスに並べます。
「speedtest_download」というサービスが作成されていれば連携完了です。

まとめ
Speedtest CLIとCheckmkを組み合わせることで、インターネット回線の通信速度を継続的に監視し、トラブル発生時の原因切り分けに役立てることができます。
また、Windowsではタスクスケジューラ機能で監視対象への負荷を最小限に抑えながら安定した運用が可能ですので、是非本記事を参考に一度設定してみてください。


