1

次のようなログファイルを実行して生成する長い自動化スイートがあります。

Time, API, Min, Max, Average, Current, Invocation
2013-07-22 14:52:39, api1, 167.0, 167.0, 167.0, 167.0, 1
2013-07-22 14:52:39, api1, 167.0, 169.0, 168.0, 169.0, 2
...
...

テストが完了したら、sar (または nmon、ただし最初に sar を試す) を介して Unix マシンの統計を自動的に収集したいと考えています。sar コマンドは次のようなものです。

sar -i 900 -f /var/log/sa/sa22 -s 10:00:00 -e 18:00:00

任意の数のマシンに SSH で接続し、XML ファイルから読み取った静的コマンドを実行する Java クラスが既にあります。後で解析するために出力をファイルに保存します。

私のジレンマは、テスト中に sar コマンドの実行を自動化したいということです (これはもちろん変更されます)。たとえば、上記のログ ファイルから開始時刻と終了時刻を取得し、それらの日付で sar を実行したいとします。Unix シェルでは、これらの日付を次のように取得できます。

SECOND_LINE=`sed -n '2p' ${LOG_DIR}/${CURRENT_DATE}_results.txt`
START_DATE=`echo ${SECOND_LINE} | cut -c9-10`
START_TIME=`echo ${SECOND_LINE} | cut -c12-13,15-16`
LAST_LINE=`sed -n '$p' ${LOG_DIR}/${CURRENT_DATE}_results.txt`
END_DATE=`echo ${LAST_LINE} | cut -c9-10`
END_TIME=`echo ${LAST_LINE} | cut -c12-13,15-16`

それらを Java クラスに渡して毎回 sar コマンドを作成するか、Java クラスがコマンドで読み取るテキスト ファイルに対して検索と置換を行うことができます。ただし、自動化スイートが複数日にわたって実行されたり、別の月にまたがったりした場合の処理​​方法がわかりません。

私が望むことを達成するためのより良い方法はありますか、それとも私の考えを続けるべきですか? 私の最終的な目標は、テストの全期間 (数分または数日) の sar データ (CPU 使用率、ディスク IO、メモリ使用量) を取得することです。

4

1 に答える 1

1

いくつかのオプションを処理する基本的なスクリプトが付属しています。それはまったく答えではなく、コメントに投稿するには広すぎるアプローチです。

start_day=22
end_day=$1
sar_path="/var/log/sa"

start_time=14
end_time=17

echo "start_day = $start_day - end_day = $end_day"
echo "start_time = $start_time - end_time = $end_time"

if [ $start_day -eq $end_day ]; then
        echo "sar -i 900 -f $sar_path/sa$start_day -s $start_time:00:00 -e $end_time:00:00"
elif [ "$(($start_day + 1))" -eq $end_day ]; then
        echo "sar -i 900 -f $sar_path/sa$start_day -s $start_time:00:00 -e 23:59"
        echo "sar -i 900 -f $sar_path/sa$end_day -s 00:00:00 -e $end_time:00:00"
elif [ $start_day -gt $end_day ]; then
        last_day=$(ls -1 $sar_path/sa[0-9]* | tail -1)
        last_day=$(basename $last_day | grep -o [0-9]*)
        echo "sar -i 900 -f $sar_path/sa$start_day -s $start_time:00:00 -e 23:59"
        for i in $(seq $(($start_day +1)) $(($last_day)))
        do
                echo "sar -i 900 -f $sar_path/sa$i -s 00:00:00 -e 23:59:00"
        done
        for i in $(seq 1 $(($end_day -1)))
        do
                echo "sar -i 900 -f $sar_path/sa$i -s 00:00:00 -e 23:59:00"
        done
        echo "sar -i 900 -f $sar_path/sa$end_day -s 00:00:00 -e $end_time:00:00"
else
        echo "sar -i 900 -f $sar_path/sa$start_day -s $start_time:00:00 -e 23:59"
        for i in $(seq $(($start_day +1)) $(($end_day -1)))
        do
                echo "sar -i 900 -f $sar_path/sa$i -s 00:00:00 -e 23:59:00"
        done
        echo "sar -i 900 -f $sar_path/sa$end_day -s 00:00:00 -e $end_time:00:00"
fi

で実行し./file <last_day>ます。

last_dayが翌月の場合は考慮されませんのでご注意ください。月の最終日も確認する必要があります(最良の方法、 付きls -l /var/log/sa)など。

とはいえ、Java で日付の解析ができるのであれば、これを Java で処理する方がはるかに優れていると思います。

#same day
$ ./a 22
start_day = 22 - end_day = 22
start_time = 14 - end_time = 17
sar -i 900 -f /var/log/sa/sa22 -s 14:00:00 -e 17:00:00

#one day difference
$ ./a 23
start_day = 22 - end_day = 23
start_time = 14 - end_time = 17
sar -i 900 -f /var/log/sa/sa22 -s 14:00:00 -e 23:59
sar -i 900 -f /var/log/sa/sa23 -s 00:00:00 -e 17:00:00

#>1 day difference
$ ./a 27
start_day = 22 - end_day = 27
start_time = 14 - end_time = 17
sar -i 900 -f /var/log/sa/sa22 -s 14:00:00 -e 23:59
sar -i 900 -f /var/log/sa/sa23 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa24 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa26 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa27 -s 00:00:00 -e 17:00:00

# change of month
$ ./a 5
start_day = 22 - end_day = 5
start_time = 14 - end_time = 17
sar -i 900 -f /var/log/sa/sa22 -s 14:00:00 -e 23:59
sar -i 900 -f /var/log/sa/sa23 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa24 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa1 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa2 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa3 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa4 -s 00:00:00 -e 23:59:00
sar -i 900 -f /var/log/sa/sa5 -s 00:00:00 -e 17:00:00
于 2013-07-24T13:10:41.447 に答える