ログ解析でかかった処理にかかった時間を大きい順に並べる必要があったので,具体的なコマンドをメモします.
使ったデータの例
テストとして以下のようなものを使います.やりたいことは 処理 XXX1 だけ抽出して大きい順に並べるということです.
//日付 時間 処理名 かかった時間[ms]
2023-11-01 08:00:00 XXX1 3000[ms]
2023-11-01 09:00:00 XXX1 10000[ms]
2023-11-01 09:30:00 XXX3 100[ms]
2023-11-01 10:00:00 XXX4 5000[ms]
2023-11-01 11:00:00 XXX5 8000[ms]
2023-11-01 11:01:00 XXX1 20000[ms]
2023-11-01 09:02:00 XXX6 10000[ms]
2023-11-01 12:30:00 XXX7 100[ms]
2023-11-01 14:00:00 XXX4 2000[ms]
2023-11-01 15:00:00 XXX1 40000[ms]
結論
以下のコマンドを実装しました.
grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4 | sort -nr
//出力結果
40000
20000
10000
3000
grep
grepコマンドは指定した文字列を含む行だけ抽出するコマンドです.
このコマンドにより,XXX1, XXX2, …など複数の処理が混在している中からXXX1だけ取り出すことができます.
grep XXX1 log
2023-11-01 08:00:00 XXX1 3000[ms]
2023-11-01 09:00:00 XXX1 10000[ms]
2023-11-01 11:01:00 XXX1 20000[ms]
2023-11-01 15:00:00 XXX1 40000[ms]
sed
正規表現にマッチする文字列を削除するために使いました.
今回はかかった時間の数字だけが欲しかったため,[ms]を削除する処理を実行しています.
grep XXX1 log |sed -e 's/\[ms\]//g'
2023-11-01 08:00:00 XXX1 3000
2023-11-01 09:00:00 XXX1 10000
2023-11-01 11:01:00 XXX1 20000
2023-11-01 15:00:00 XXX1 40000
cut
かかった時間だけを抽出するためのコマンドです.
今回は区切り文字が空白区切りで分けた際の4個目の文字列がかかった時間でした.そのため,-dオプションで空白を,-fコマンドで何番目を取り出すか指定しています.
オプション | 意味 |
-d | 区切り文字を指定 |
-f | 区ぎったうちの何番目を取り出すか |
grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4
3000
10000
20000
40000
sort
取得した値を並び替えるコマンドです.注意として,-nオプションを指定しないと左側の文字が小さい順に並べられてしまいます.
grep XXX1 log |sed -e 's/\[ms\]//g' | cut -d " " -f4 | sort
10000
20000
3000
40000
//-nオプションを指定しないと順番が変になる
まとめ
linuxのコマンドを使ってログ解析する作業があったので備忘録として残しました.
参考になれば幸いです.
リンク