Linux便利コマンド : sort

うめだ
2023-06-09
2023-06-09
目次

はじめに

みなさま、sortコマンドを活用されてますでしょうか?

私は仕事がら、ログファイルを参照することがよくあります。
その際、各種コマンドを駆使して、特定キーワードの検索や出力回数の確認などを行っています。

そこで、今回はsortコマンドを使って、Apacheのアクセスログから、リクエスト処理に時間がかかったアクセスを、処理時間が長かったものから順に表示させる方法を紹介したいと思います。

環境

OS : AlmaLinux 8
catバージョン : 8.30

使い方

ApacheのLogFormatの設定は以下のとおりです。

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

今回は%D:リクエストの処理時間(マイクロ秒単位)の値を抽出し操作します。

サンプルアクセスログの内容はこんな感じです。

 $ cat access.log | head -n5
192.168.110.103 - - [06/Dec/2022:18:18:31 +0900] "GET /nextcloud/ HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" 849
192.168.110.103 - - [06/Dec/2022:18:18:31 +0900] "GET /favicon.ico HTTP/2.0" 404 - "https://192.168.210.129/nextcloud/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" 575
192.168.110.103 - - [06/Dec/2022:18:19:27 +0900] "GET /nextcloud/ HTTP/2.0" 503 2781 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" 301021
192.168.110.103 - - [06/Dec/2022:18:19:28 +0900] "GET /nextcloud/apps/theming/css/default.css?v=ba222ded25d957b900c03bef914333cd HTTP/2.0" 200 3095 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" 4214
$

まずは、リクエスト処理時間(%D)とリクエスト内容(%r)を抽出します。するとこんな感じです。

$ cat access.log | awk '{print $NF,$7}' | head -n 5
849 /nextcloud/
575 /favicon.ico
301021 /nextcloud/
4214 /nextcloud/apps/theming/css/default.css?v=ba222ded25d957b900c03bef914333cd
5214 /nextcloud/core/css/guest.css?v=ba222ded25d957b900c03bef914333cd
$

これを、1カラム目の値に対してsortすることで、処理時間順に表示させることができます。

$ zcat access.log | awk '{print $NF,$7}' | head -n5 | sort -k1
301021 /nextcloud/
4214 /nextcloud/apps/theming/css/default.css?v=ba222ded25d957b900c03bef914333cd
5214 /nextcloud/core/css/guest.css?v=ba222ded25d957b900c03bef914333cd
575 /favicon.ico
849 /nextcloud/
$

-n オプションを追加することで、昇順で表示させることも可能です。

$ cat access.log | awk '{print $NF,$7}' | head -n5 | sort -k1 -n
575 /favicon.ico
849 /nextcloud/
4214 /nextcloud/apps/theming/css/default.css?v=ba222ded25d957b900c03bef914333cd
5214 /nextcloud/core/css/guest.css?v=ba222ded25d957b900c03bef914333cd
301021 /nextcloud/
$

まとめ

いかがでしたか?

今回ご紹介した使い方はあくまで一例です。さまざまな場面で活用できるコマンドです。

是非ともお試しいただければと思います。