apacheのログ解析にawstatsというソフトを使用しています。一方apacheのログは日付毎に別のファイルに保存されるように設定しています(ファイル名には accesslog20031227.log のように日付の入ったファイル名をつけています) この状況で、たとえばここ3日間ぶんのログの集計を一気にやりたい場合、%MM-48渭48 で集計したあと、 %MM-24渭24 を実行するというように1日分づつやるのが面倒なので自動で見に行くログファイル名を遡ってくれるように設定したいのですが、この方法の可否または実際の方法が書いてあるページはあるでしょうか。 cronを使って毎日定時に処理すれば良いのは分かっていますが、今回はそういった代替案ではなく上記問題の直接的な解法を求めています。(ちなみに質問文中化けていますけど % D D と打ったものです>渭)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:chikampv No.1

回答回数49ベストアンサー獲得回数0

ポイント40pt

http://www.hatena.ne.jp/1072543716#

apacheのログ解析にawstatsというソフトを使用しています。一方apacheのログは日付毎に別のファイルに保存されるように設定しています(ファイル名には accesslog20031227... - 人力検索はてな

URLはダミーです。

簡単なスクリプトを書くというのはいかがでしょうか?

本当は日付の計算をするロジックを埋めたいのですが、

閏年対応など面倒なので簡略化したものを書いておきます。

OSやシェルが書いてありませんので、bashで書いておきます。

なお、awstatsの使い方は、存じ上げませんので、適宜埋め込んでください。

cd LOGDIR

cat $(ls -tr accesslog*.log | tail -4 | head -3 ) > 3days.log

とすると過去3日分(1日前、2日前、3日前)のログのサマリーが3days.logに記録されます。

また、

cd LOGDIR

rm -f 3days.log

for FILE in $(ls -tr accesslog*.log | tail -4 | head -3 )

do

cat $FILE >> 3days.log

done

としても同様です。

なお、タイムスタンプでソートすることになりますので、

もしかすると予期しないことが起きるかもしれません。

その場合は、lsでマッチさせるファイル名をもう少し細かく限定するか、

日付計算のロジックを書く必要があります。

これでいかがでしょうか?

id:landis

やはりスクリプトで1ファイルにあつめておいてそれを読ませるのが一番手っ取り早いですかね。ログを日ごとに分割しているのは決して珍しいことではないと思っていたので、どこか awstats の話をしているサイトに書いてないかと自分でも探していたのですが、結局こちらでも見つかりませんでした。

ちょっとその方法で検討してみます。どうもありがとうございました。

2003/12/29 17:04:20
  • id:chikampv
    スクリプトが書けるから

    この手の話は、スクリプトが書ける人が使用するソフトってこともあり、
    あまり表に出ないのではないかと思います。
    やり方さえ思いつけば難しいことではないですしね。

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

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

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

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