Apacheのアクセスログをシェルを使って分単位で集計したいと思います。

分単位で行数をカウントすればいいかと思いますが、
どのようなシェルを作成すればいいか教えてください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/04/26 15:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:arcana No.1

回答回数120ベストアンサー獲得回数10

ポイント35pt

#!/bin/sh

CHOUR=0

while [ "$CHOUR" -lt '23' ]

do

CMIN=0

while [ "$CMIN" -lt '59' ]

do

PREH=`printf %02d $CHOUR`

PREM=`printf %02d $CMIN`

echo "grep '$PREH:$PREM' /apache_log"

grep '$PREH:$PREM' /apache_log > ${PREH}${PREM}_log

CMIN=`expr $CMIN + 1`

done

CHOUR=`expr $CHOUR + 1`

done

exit 0

こんな感じで、分単位に分解できます。

grep の検索ワードをもう少しログの日付形式に近づければ、良いかな、と。


ちなみにログ解析は Perl のが楽な気もします。。。

id:itomune

ご回答ありがとうございます。

プログラムはまったく分からないので、

頂いた記述をそのまま実行しましたところ、

以下のエラーが表示され、0000_log, 0001_logなどたくさんのファイルが生成されました。

grep: /apache_log: そのようなファイルやディレクトリはありません

grep '01:03' /apache_log

grep: /apache_log: そのようなファイルやディレクトリはありません

grep '01:04' /apache_log


Perlに関しても知識がないのですが、

CPANでApache::ParseLogというのを使おうかと試しましたが、

知識がないため途中で断念しました。


おすすめの方法があればご教示頂けると助かります。

2007/04/20 18:30:57
id:kidd-number5 No.2

回答回数117ベストアンサー獲得回数15

ポイント35pt

分の書式がどうなっているか不明なので、手元にある形式で説明します。

以下の例)

127.0.0.1 - - [19/Apr/2007:17:51:02 +0900] "HEAD /error/noindex.html HTTP/1.0" 200 - "-" "Wget/1.9+cvs-stable (Red Hat modified)"

日付の部分を取り出すには

cat accesslog | awk {'print $4 $5 '}

[19/Apr/2007:17:36:02+0900]
[19/Apr/2007:17:41:02+0900]
[19/Apr/2007:17:41:02+0900]
[19/Apr/2007:17:46:02+0900]
[19/Apr/2007:17:46:02+0900]
[19/Apr/2007:17:51:02+0900]
[19/Apr/2007:17:51:02+0900]
<|

こんな感じになるので、あとは、もし分だけであれば
さらにこれを
>|
awk{'FS=":";print $3'} | sort

すれば、

36
41
41
46
51
61

になるので最後はuniq -cします。

手元にあるのでやってみました。

 # cat access_log | awk {'print $4$5'} | awk {'FS=":";print $3'} | sort | uniq -c
      1 
    219 06
    220 11
    220 16
    220 21
    220 26
    220 31
    220 36
    220 41
    220 46
    220 51

厳密にはシェルじゃないのですが。

id:itomune

ご回答ありがとうございます。

勉強になります。

2007/04/24 15:04:32
  • id:itomune
    ご回答ありがとうございます。
    Perlで動作確認できました。
    度々申し訳ないのですが、
    以下のような形式で出力することは可能でしょうか。

    2007/4/20,00:08,1714
    2007/4/20,00:09,1700
    2007/4/20,00:10,1300


    なお、ログの形式は下記になります。

    ■ログの形式
    172.18.23.252 - - [09/Mar/2007:23:58:55 +0900] "GET /index.html" 200 291 "-" "-"


    お忙しい所恐れ入りますが、
    何卒宜しくお願い申し上げます。
  • id:itomune
    arcanaさん:
    早速のご対応ありがとうございます。
    頂いたPerlで思い通りの形式でファイル出力できました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません