January 31, 2004
人気記事ランキング作成
#BLOGさんの上記の記事を参考にして最近の一ヶ月記事別ランキングを作成してみました。
これはApacheのログを見て各エントリへのアクセスを調べるプラグイン(MT-MostVisited)を利用しています。このサイトでは1か月分のログを残しておりますので過去一ヶ月分のランキングとしてあります。
#BLOGさんでは独自にカスタマイズして利用されていますが、私は本家のMT-MostVisitedプラグインを利用してみました。
これによって、エントリーごとのアクセス状態がわかります。
Zerodimesnionでは各エントリーにカウンターを設置してありますがどの記事がどれだけのアクセスがどうかが把握できておらず、検索エンジンなどから個別のエントリに直接アクセスしてきてトップページには来てもらえない場合も多々あるので今回のランキングの設置によって把握できるようになりました。
なんと、「平原綾香/JUPITER 」が2004/01/19に書いたにもかかわらずダントツでした。
以下にメモとして私が行った簡単な手順を書いておきます。
(詳細や#BLOGさんのカスタマイズしたバージョンを利用する場合、うまくいかないなどは上記の#BLOGさんのページを参考にしてください。)
(1). 「Akira Hangai氏のApache::ParseLog」ー[Source]より「ParseLog.pm」をダウンロード
(2). ダウンロードしたParseLog.pmを、「Movable Typeディレクトリ/extlib/Apache」の中に入れる。
(3).「Jeff Borlik氏のMT-MostVisited Plugin」の「The plugin is available (as a ZIP archive) here.」から、「mt-mostvisited.zip」をダウンロード
(4). 新しいインデックステンプレートを作成
テンプレートの名前:「Popular Ranking」
出力ファイル名:「parts/ranking.html」
として以下を記述
<div class="sidetitle">
人気記事ランキングTop 10
</div><div class="side">
<i>(Updated: <$MTDate format="%m/%d %X"$>)</i><br />
<MTMostVisited blogurl="/mt/archives"
logfile="/usr/local/apache/logs/access_log*"
count="20">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
of <MTEntryDate format="%B %e, %Y">
(<$MTMostVisitedCount$> Hits)
</li>
</MTMostVisited>
</div>
(5). 「Main Index」の中の表示したい位置に次のコードを挿入
<$MTInclude file="parts/ranking.html"$>Posted by Ken at January 31, 2004 11:22 PM | TrackBack
僕も以前から使っているのですが先日来より、Segmentation Faultが出続けています。
(;.;)
最新版に変えてみたのですが、同じなんですよねえ。
りんもんさん、いつも拝見させて頂いています。
私も3月9日ごろよりビルドエラーとなっており現在は
ビルドしないようにしてあります。
原因は私もまだわかっていません。
時間があれば見てみようとはずっと思っていたのですが。。
これあると便利なのに使えないから不便ですね。。
え?見てくれていたんですね!ありがとうございます。うれしいです。
で、LOGを毎日分割するようにして1件のログから初めて見たのですが、途中の日にちでだめになり、で、今は一日分で処理させているんです。
朝一というかLOGが切り替わってしばらくは大丈夫ですが午前中には出来なくなります。LOGの大きさではなくて何かLOGの中の状況によってエラーになっているようですね。
今日ログをいじりつつ確認してみました。
まず、ログのサイズではなくりんもんさんのおっしゃるとおりログの中のなんらかの状況だと思います。
ログを眺めているとバッファオーバーフロー狙いのアクセスがあり、SEARCHメソッド?(HTTPにはないが。。不正アクセス)でパスに不明な文字列をひたすらつっこまれていてHTTPのエラーコード414となっているものが結構多く含まれていました。
Webサーバのバッファオーバーフローを狙っているのでしょうが、そういった不正なものがいくつか含まれているので、ランキングを生成するときにログをなめてURLを取得するときの配列がオーバーフローしているのかなとも思います。
これが原因かわかりませんが、もう少し見てみます。
Posted by: ken at April 7, 2004 11:17 PMログに
210.111.37.117 - - [07/Apr/2004:16:39:14 +0900] "SEARCH /\x90\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x0\x02\xb1\x02\xb1・・・・・・x90\x90\x90" 414 271 "-" "-"
のようなログ(・・・)のところはひたすら同じような文字)が1週間分のログあたり10から70コもあり、エラーNOの414は"Request-URI Too Large"でした。
これらの行だけ削除するとうまくいきました。
やはり、ログをなめる$mt_home/extlib/Apache/ParseLog.pm の中でURL(パス)部分を取得するときにオーバーフローしてるのでしょうかね。。
おそらくりんもんさんもこういうログがありませんか?
それにしてもなんとかして防ぎたいですね。。
情報をありがとうございます。
なるほど、やはりLOGの中におかしな情報?が入っていると分析できずに落ちるわけですね。
本日からまたまた変更で、DAILYとMONTHLYのTOP10を置いてみて、それでLOGの中身を見ながら様子を見ることにします。
その後、以下のようなスクリプトをRANKINGを更新するCRONの頭に入れてひとまず、逃げることにしました。
RANKINGを自動生成しているスクリプトに
RANKING生成前に以下のスクリプトを書いて怪しいLOGを削除することにしましたよ。