インターネット回線品質をグラフで見える化!Checkmk×Speedtest CLI活用術

本記事では、Checkmkで「Speedtest」を自動的に実行させ、その結果をグラフ表示し保存する方法をご紹介します。

※本記事に掲載されている商品またはサービス名称は、各社の商標または登録商標です。

はじめに

Checkmkの監視対象は、サーバーやネットワーク機器だけではありません。

「Speedtest 」と組み合わせることで、インターネット回線のダウンロード速度・アップロード速度・Pingを定期的に取得し、Checkmkでグラフ化・監視できます。

それではWindows・Linuxでの設定方法と、運用時のポイントをご紹介します。

Speedtest CLIとは

Speedtest CLIは、Ookla社が提供しているコマンドライン版のSpeedtestです。GUI版とは異なり、

  • ダウンロード速度
  • アップロード速度
  • Ping

の情報をコマンドラインから取得できます。

PowerShellやシェルスクリプトとの相性も良く、監視ツールとの連携にも最適です。

Speedtestを監視するメリット

数値を継続的に数値・グラフで記録できる

Checkmkへ取込むことで、ダウンロード速度・アップロード速度をパフォーマンスデータとして保存し、グラフや履歴から品質の変化を確認できます。

現在の回線品質だけでなく、過去との比較や長期的な傾向分析も一目で確認できます。

複数拠点の情報を定量管理・比較できる

複数の拠点へ導入することで、それぞれの回線品質を同じ基準で比較・見える化できる点も大きなメリットです。拠点ごとに回線品質を継続的に記録しておくことで、速度低下やPingの変化にも気付きやすくなり、インターネット回線の状態を定量的に管理できるようになります。

Checkmkの監視画面例

監視間隔ごとにテストを実行させ、結果を表示・保存します。情報は各クライアントにインストール済のエージェントが収集し、Checkmkサーバーへと集約します。

履歴グラフの例

Download速度のグラフ
Ping、Upload速度のグラフ

グラフからも、何時頃に速度が通常の半分になっていた、など通信速度の簡単な原因調査が可能です。このグラフデータは最大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分毎の実行に設定するとタイムアウトが頻発します。余裕をもった間隔での実行がおすすめです。

名前登録、最上位の特権で実行するをON

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

今から毎日30分間隔ごとに無期限継続実行するよう設定

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

powershell.exeを設定、引数にはStep2の実行スクリプト格納フォルダを登録

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

ここでは、タスクを停止するまでの時間などを設定

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

無事タスクが登録されたことを確認

初回で試しに実行したい場合は、タスクを右クリックし実行することが可能です。

実行すると、C:\ProgramData\checkmk\agent\local\に「speedtest.out」というファイルができます。中に実行結果が出力されていればPowerShellが正常に動作しています。

Step6 : Checkmkサーバー上でサービスディスカバリを実行

Checkmkサーバーに登録した該当のWindows端末のサービスディスカバリを実行し、先ほど作成したスクリプトの実行結果をサーバー側で確認できるようにサービスに並べます。

「Speedtest_download」というサービスが作成されていれば連携完了です。

まとめ

Speedtest CLIとCheckmkを組み合わせることで、回線品質を継続的に監視し、トラブル発生時の原因切り分けに役立てることができます。

また、Windowsではタスクスケジューラ機能で監視対象への負荷を最小限に抑えながら安定した運用が可能ですので、是非本記事を参考に設定してみてください。

こんな記事も読まれています

最新記事

おすすめ記事

  1. 【第1回】EDRをすり抜ける攻撃に備える。暗号化を防ぐ「最後の砦」REP Xの真価とは

  2. 【CheckmkKB】ユーザーテストを自動実行!アプリの体感をそのまま見える化

  3. WinSyslog 使い方ガイド#4 処理の必要がないログを絞り込んで「破棄」する

製品カテゴリー

その他の情報

TOP