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

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

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

はじめに

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

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

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

Speedtest CLIとは

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

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

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

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

Speedtestを監視するメリット

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

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

現在の通信速度だけでなく、過去との比較や長期的な傾向分析も一目で確認できます。

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

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

Checkmkの監視画面例

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

履歴グラフの例

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

グラフからも、何時頃に速度が通常の半分になっていた、など通信速度の簡単な原因調査が可能です。このグラフデータは最大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仮想アプライアンスをご利用の場合、パッケージインストールができないため本機能はご利用いただけません。

Ubuntuでの実行例

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

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分毎の実行に設定するとタイムアウトが頻発します。余裕をもった間隔での実行がおすすめです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

まとめ

Speedtest CLIとCheckmkを組み合わせることで、インターネット回線の通信速度を継続的に監視し、トラブル発生時の原因切り分けに役立てることができます。

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

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

最新記事

おすすめ記事

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

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

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

製品カテゴリー

その他の情報

TOP