読者です 読者をやめる 読者になる 読者になる

masalibの日記

システム開発、運用と猫の写真ブログです

Linuxのsarファイルをグラフ化するツールを導入してみた

経緯

「sar」というServerのパフォーマンスを記録してくれる
プログラムがあります
inuxサーバのCPUやメモリ、DISK IOなど記録してくれて
何かあった時に調べる材料としていれています

細かい事は以下のサイトを参照
http://naoberry.com/tech/sar/

vmstatとほぼ同じなのですが
vmstatと違うのは過去データが見れる事です
過去が見れる事で比較し、調査がし易いのです



困った事

ただ問題は、sarが保存しているデータはバイナリー形式になっており
人間がみてもわからないのです
そこでテキスト化をおこなう事で見れるようになります

sar -f <ログファイル名>

テキストになって見ることは可能なのですが
データがズラズラ並んでいるだけで
わかりずらいです




対応

Linuxのsarファイルをグラフ化するツールを導入しました

ローカルPCにグラフ化のツールをインストール

ksarをダウンロード
http://osdn.jp/projects/sfnet_ksar/releases/
ダウンロードして展開するだけです

バイナリーデータをテキスト化(Ksarが読めるように)

デフォルトでは /var/log/sa/YYYYMM/saDD にあるバイナリ形式のsarファイルから
ksarで読み込めるテキスト形式に変換する
出力先は「/var/sar/」とする
(ログは1ヶ月単位でまとめます)

#!/bin/sh

#昨日の日付を設定する
CURRENTDATEYYYYMM=`date --date '1 day ago' +%Y%m`
CURRENTDATEDD=`date --date '1 day ago' +%d`

HOSTNAME=`hostname`

#echo $CURRENTDATEYYYYMM
#echo $CURRENTDATEDD

env LANG=C sar -f /var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD -s 00:00:00 -e 23:59:00 -A >> /var/sar/$HOSTNAME-$CURRENTDATEYYYYMM.sar.txt

このシェルをcronに設定することで
毎日のログができます



このシェルが動かなかった時の復旧用のシェルも用意しました
(私が悪いのです・・・)

復旧作業できがついたのですが
約30日以上が経過すると「bz2」形式で圧縮されるようです
bunzip2コマンドで解凍できます

#!/bin/sh

#月単位で実行する場合は先月の1日と先月の最後の日を設定
#STARTDATE=`date -d "1 month ago" "+%Y-%m-01"`
#echo $STARTDATE
#ENDDATE=`date -d "1 second ago" "+%Y-%m-01"`
#ENDDATE=`date -d "$ENDDATE -1day" "+%Y-%m-%d"`
#echo $ENDDATE

#トラブルがあって復旧する場合、日付指定する
STARTDATE="2016-12-01"
ENDDATE="2017-01-30"


CURRENTDATE=$STARTDATE
CURRENTDATE2=`date -d "$CURRENTDATE 1day" "+%Y%m%d"`
CURRENTDATE2=`date -d "$CURRENTDATE2 -1day" "+%Y%m%d"`

CURRENTDATE3=`date -d "$CURRENTDATE 1day" "+%Y%m%d"`
CURRENTDATEYYYYMM=`date -d "$CURRENTDATE3 -1day" "+%Y%m"`
CURRENTDATEDD=`date -d "$CURRENTDATE3 -1day" "+%d"`

HOSTNAME=`hostname`
echo $HOSTNAME

while [ 1 ] ; do

        # 処理
        #echo $CURRENTDATE
        #echo $CURRENTDATEYYYYMM
        #echo $CURRENTDATEDD
		#echo /var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD
		
		if [ ! -e /var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD ]; then
			echo "/var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD is  nothing"
			#ない場合は圧縮されている
			cp /var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD.bz2 /tmp/$CURRENTDATE.bz2
			bunzip2 /tmp/$CURRENTDATE.bz2
			env LANG=C sar -f /tmp/$CURRENTDATE -s 00:00:00 -e 23:59:00 -A >> /var/backup/sar/$HOSTNAME-$CURRENTDATEYYYYMM.sar.txt
			rm -f /tmp/$CURRENTDATE
		else
			echo "/var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD is Presence"
			env LANG=C sar -f /var/log/sa/$CURRENTDATEYYYYMM/sa$CURRENTDATEDD -s 00:00:00 -e 23:59:00 -A >> /var/backup/sar/$HOSTNAME-$CURRENTDATEYYYYMM.sar.txt

		fi


        if [ $CURRENTDATE = $ENDDATE ] ; then
                break
        fi

        CURRENTDATE2=`date -d "$CURRENTDATE 1day" "+%Y%m%d"`
        CURRENTDATEYYYYMM=`date -d "$CURRENTDATE 1day" "+%Y%m"`
        CURRENTDATEDD=`date -d "$CURRENTDATE 1day" "+%d"`
        CURRENTDATE=`date -d "$CURRENTDATE 1day" "+%Y-%m-%d"`

done

2017/01/31
圧縮されている場合に解凍して収集するように修正しました


f:id:masalib:20170127190139j:plain

やっぱりグラフにした方が分かりやすいですね
特に上司に説明しやすい

2017/02/01
グラフに一部バグがある事に気がついた
CPUの数値が常に27.5になる・・・
\(^o^)/オワタ

バージョンを下げたら表示された
f:id:masalib:20170201201949j:plain
f:id:masalib:20170201203214p:plain
危ねえーーーー死ぬ所だった