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


グラフからも、何時頃に速度が通常の半分になっていた、など通信速度の簡単な原因調査が可能です。このグラフデータは最大4年間分表示にも対応しており、JSONやCSV形式で書き出しにも対応しております。
設定手順
ここからは、「Speedtest」の設定方法をお伝えします。
WindowsではSpeedtest CLIを直接ローカルチェックから実行させると、Agent取得のたびにSpeedtestが実行されてしまい、CPU負荷やネットワーク負荷がとても高くなります。
そこで、今回は「Windowsタスクスケジューラ」と「Checkmkローカルチェック」を組み合わせる方法で実装します。
Speedtest実行端末へのCheckmkエージェントインストール
以降、Checkmkエージェントをインストールしてある前提で解説しますので、インストールされていない場合はユーザーガイドを参考にこのタイミングで実施してください。エージェントは自動更新機能まで設定されていると便利です。
Speedtest CLIのインストール
Ookla社が提供するSpeedtest CLIをダウンロードします。
Linux、Windowsそれぞれに対応しており、各種OS向けのパッケージが用意されておりますので、そのインストーラまたはパッケージをダウンロードします。
Windows端末での設定
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が正常に動作しています。
Step6 : Checkmkサーバー上でサービスディスカバリを実行
Checkmkサーバーに登録した該当のWindows端末のサービスディスカバリを実行し、先ほど作成したスクリプトの実行結果をサーバー側で確認できるようにサービスに並べます。
「Speedtest_download」というサービスが作成されていれば連携完了です。

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


