QNAP上でSpeedtestを行い、結果をPrometheusで収集できるようにする

Speedtest by Ookla – The Global Broadband Speed TestのCLIパッケージを使用して、転送速度の経時変化を見られるようにする

やり方は、前回同様Node exporterTextfile Collector機能を使用するので、スクリプトの設置のみを行う

構成

パス 内容
/share/homes/admin/opt/speedtest Speedtest CLIインストールフォルダ
/share/homes/admin/bin/speedtest.sh Speedtest計測スクリプト
/share/homes/admin/opt/node_exporter/textfile_collector 計測結果フォルダ
/etc/config/crontab QNAPのcrontab

Speedtest CLIのインストール

  1. インストールフォルダを作成

    mkdir /share/homes/admin/opt/speedtest
    
  2. Speedtest CLIのダウンロード Speedtest CLIからCPUに合ったパッケージをダウンロードし、展開してインストール

    cd /share/homes/admin/opt/speedtest
    curl -LO https://install.speedtest.net/app/cli/ookla-speedtest-1.0.0-x86_64-linux.tgz
    tar -xvf ookla-speedtest-1.0.0-x86_64-linux.tgz
    
  3. 実行確認

    /share/homes/admin/opt/speedtest/speedtest
    
    /etc/ssl/certs/ca-certificates.crt - NOT FOUND
    /etc/pki/tls/certs/ca-bundle.crt - NOT FOUND
    /usr/share/ssl/certs/ca-bundle.crt - NOT FOUND
    /usr/local/share/certs/ca-root-nss.crt - NOT FOUND
    /etc/ssl/cert.pem - NOT FOUND
    [2021-09-24 18:12:50.613] [error] Configuration - Problem with the SSL CA cert (path? access rights?) (UnknownException)
    [2021-09-24 18:12:50.613] [error] Configuration - Cannot retrieve configuration document (0)
    [2021-09-24 18:12:50.614] [error] ConfigurationError - Could not retrieve or read configuration (Configuration)
    [2021-09-24 18:12:50.614] [error] ConfigurationError - Could not retrieve or read configuration (Configuration)
    [error] Configuration - Could not retrieve or read configuration (ConfigurationError)
    
  4. ルートCAファイルがないためエラーになっているので、追加します

    cd /share/homes/admin/opt/speedtest
    curl -LO https://curl.se/ca/cacert.pem
    
  5. --ca-certificateオプションでルートCAファイルを指定して実行確認します。ライセンスに同意すると、そのまま計測が開始されます。

    /share/homes/admin/opt/speedtest/speedtest --ca-certificate=/share/homes/admin/opt/speedtest/cacert.pem
    ==============================================================================
    
    You may only use this Speedtest software and information generated
    from it for personal, non-commercial use, through a command line
    interface on a personal computer. Your use of this software is subject
    to the End User License Agreement, Terms of Use and Privacy Policy at
    these URLs:
    
            https://www.speedtest.net/about/eula
            https://www.speedtest.net/about/terms
            https://www.speedtest.net/about/privacy
    
    ==============================================================================
    
    Do you accept the license? [type YES to accept]: YES
    License acceptance recorded. Continuing.
    
    
       Speedtest by Ookla
    
         Server: XXXXXXXXXX (id = XXXX)
            ISP: XXX
        Latency:     0.00 ms   (0.00 ms jitter)
       Download:    00.00 Mbps (data used: 00.0 MB)
         Upload:    00.00 Mbps (data used: 00.0 MB)
    Packet Loss:     0.0%
     Result URL: https://www.speedtest.net/result/c/xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
    
    

計測スクリプト

  1. 計測ターゲットのサーバIDを調べる

    1. Speedtestにアクセスして、計測画面を表示する
    2. Change Serverで任意のサーバを選択する
    3. サーバ名にカーソルを合わせると、リンク先URLが表示される(されない場合はリンク先URLをコピーする)
    4. URLのserver_idパラメータの値を控えておく

    ServerIDサンプル

  2. /share/homes/admin/binにspeedtest.shを作成する

    • CSVで結果を出力させて、PING(msec)、Jitter(msec)、パケットロス割合(%)、ダウンロードスピード(Byte/sec)、アップロードスピード(Byte/sec)を得て、それをtextfile_collectorフォルダに格納する
    • SERVERIDに調べたサーバIDをセットする
    • 実行時にライセンスの同意画面が出るので、--accept-licenseで回避する
    #!/bin/bash
    
    BINDIR=/share/homes/admin/opt/speedtest
    OUTDIR=/share/homes/admin/opt/node_exporter/textfile_collector
    SERVERID=15047
    
    cat <<EOF > $OUTDIR/speedtest.prom.$$
    # HELP node_speedtest_latency Latency (ms) by Speedtest
    # TYPE node_speedtest_latency gauge
    # HELP node_speedtest_jitter Jitter (ms) by Speedtest
    # TYPE node_speedtest_jitter gauge
    # HELP node_speedtest_packetloss Packet loss (%) by Speedtest
    # TYPE node_speedtest_packetloss gauge
    # HELP node_speedtest_download Download speed (Byte/sec) by Speedtest
    # TYPE node_speedtest_download gauge
    # HELP node_speedtest_upload Upload speed (Byte/sec) by Speedtest
    # TYPE node_speedtest_upload gauge
    EOF
    
    $BINDIR/speedtest --ca-certificate=/share/homes/admin/opt/speedtest/cacert.pem \
    --accept-license \
    -s $SERVERID \
    -f csv \
    | awk -F, '{print "node_speedtest_latency " $3; print "node_speedtest_jitter " $4; print "node_speedtest_packetloss " $5; print "node_speedtest_download " $6; print "node_speedtest_upload " $7}' \
    | sed "s/\"//g" \
    >> $OUTDIR/speedtest.prom.$$
    
    mv $OUTDIR/speedtest.prom.$$ $OUTDIR/speedtest.prom
    
  3. 実行権限付与

    chmod +x /share/homes/admin/bin/speedtest.sh
    
  4. 実行確認

    /share/homes/admin/bin/speedtest.sh
    
  5. 出力結果確認

    cat /share/homes/admin/opt/node_exporter/textfile_collector/speedtest.prom
    # HELP node_speedtest_latency Latency (ms) by Speedtest
    # TYPE node_speedtest_latency gauge
    # HELP node_speedtest_jitter Jitter (ms) by Speedtest
    # TYPE node_speedtest_jitter gauge
    # HELP node_speedtest_packetloss Packet loss (%) by Speedtest
    # TYPE node_speedtest_packetloss gauge
    # HELP node_speedtest_download Download speed (Byte/sec) by Speedtest
    # TYPE node_speedtest_download gauge
    # HELP node_speedtest_upload Upload speed (Byte/sec) by Speedtest
    # TYPE node_speedtest_upload gauge
    node_speedtest_latency 11.047
    node_speedtest_jitter 0.179
    node_speedtest_packetloss 0.398406
    node_speedtest_download 6390817
    node_speedtest_upload 4769032
    
  6. ブラウザでNode exporterに取り込まれているか確認

    メトリクスの値

  7. Cronに登録 /etc/config/crontabにそれに追記

    # この例では毎時0分実行
    0 * * * * /share/homes/admin/bin/speedtest.sh
    
  8. crondを再起動して変更を反映

    crontab /etc/config/crontab 
    /etc/init.d/crond.sh restart
    

グラフ化

download,uploadの値はバイト単位なので、bps表記のために8倍にする

グラフ例

参考