モニタリング用のSpeedtest-CLI出力

モニタリング用のSpeedtest-CLI出力

だから私はLinuxに初めて触れ、何をすべきかわかりません。

だから私は私たちの監視ツールに有用な結果を提供したいと思いますspeedtest-cli。さまざまな場所でダウンロードとアップロードの速度を監視する必要があります。

awkを使用して出力を中断し、必要な数字を提供する次のスクリプトを作成しました(この場合は数字自体のみがあり、数字の前後にテキストはありません)。

SP=$(speedtest-cli 2>&1)
if [ $? -eq 0 ]
then
Down=$(echo $SP | gawk '{split($0,a,":"); print a[3]}' | \
                  gawk '{split($0,a," "); print a[1]}')
fi 
echo "$Down"

このスクリプトは私が望む方法で動作します。しかし、私は本当に数字だけを返す解決策がほしいと思います。では、「ダウンロード:90.00 Mbit/s」行を検索して90.00を求めて出力することは可能ですか?



編集する:

私が書いたシナリオに興味がある人のために。出力<WAN_IP>,<Download>,<Upload>、何も接続されていない場合は出力0.0.0.0,0,0

#!/bin/sh

SP=$(speedtest-cli 2>&1)

if [ $? -eq 0 ]
then

        From=$(echo "$SP" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")

        Down=$(echo "$SP" | gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')

        Up=$(echo "$SP" | gawk '{if (match ($0,/Upload: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')

else
        From="0.0.0.0"

        Down="0"

        Up="0"

fi

echo "$From,$Down,$Up"

答え1

明示的に使用しているので、関数を使用して "number"パターンを見つけ、次のように文字列で見つかったそのパターンの実際の値を抽出できますgawkmatch()Download:Mbit/s

gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}'

これは

  • パターンが最初に見つかったことを確認し、
  • ( ... )RegExpのすべての埋め込みサブグループを配列要素に配置します。a

その後、単にアイテム1を使用できます(RegExpにはそのサブグループが1つしかないため)。

答え2

speedtest-cli--simple出力を簡単にするスイッチがあります(speedtest-cli --help詳細についてはこちらをご覧ください)。

# speedtest-cli --simple --no-upload
Ping: 18.833 ms
Download: 33.88 Mbit/s
Upload: 0.00 Mbit/s

したがって、ダウンロードのみの速度を数値形式で取得できます。

# speedtest-cli --simple --no-upload|grep "^Download:"|cut -d" " -f2
34.92

これにより、--no-uploadアップロード速度をテストせずgrepにダウンロードラインのみを抽出し、cutMbit / s単位の数字である2番目のフィールドを抽出して時間を節約できます。

関連情報