人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Apacheのアクセスログをシェルを使って分単位で集計したいと思います。
分単位で行数をカウントすればいいかと思いますが、
どのようなシェルを作成すればいいか教えてください。

●質問者: itomune
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Apache アクセスログ カウント シェル 作成
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● arcana
●35ポイント

#!/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 のが楽な気もします。。。

◎質問者からの返答

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

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

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

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

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

grep '01:03' /apache_log

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

grep '01:04' /apache_log


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

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

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


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


2 ● kidd-number5
●35ポイント

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

以下の例)

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

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

◎質問者からの返答

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

勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ