« 2005年02月 | メイン | 2005年04月 »
2005年03月19日
MacintoshでApacheログローテーション設定
MacintoshのApacheのログローテーションはOSのログローテーション機能を使ってローテーションされています。 さすがMacintosh !
ただ、httpd.confでログのディレクトリを変更したり、履歴を多く残したいときは独自の変更が必要です。
通常、Apacheのログローテーション設定には、下記の2通りがあります。
1. ApacheのTransferLogディレクティブを使う方法
2. systemログ同様にOSの機能を使う方法
1. ApacheのTransferLogディレクティブを使う場合は、Apacheのコマンドであるrotatelogsをパイプでつないで下記の通り、httpd.confを変更します。
TransferLog "| rotatelogs /var/log/httpd/acess_log 86400"
但し、MacOS X 10.3.8に含まれているApacheには、rotatelogsコマンドが見当たりません。
なぜだろう?
最新版のApacheを独自に入れてもいいのですが、MacOS Xのセキュリティバージョンアップや定期的なバージョンアップで対応ができなくなるので、ApacheのTransferLogディレクティブを使う方法はやめることにしました。
2. systemログ同様にOSの機能を使う方法ですが、Linux, Sun Solarisとは少し異なっているようですね。
基本的には、crontabで定期的にローテーションする方法は変わらないので、まず、crontabを確認しましょう。 ファイルは、/etc/crontabです。
初期設定は、下記の通りです。
# Run daily/weekly/monthly jobs.
15 3 * * * root periodic daily
30 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
minute hour mday month wday who commondで並んでいます。
定期的に、実行しているコマンドは、periodicです。 Macintoshの場合、periodicというコマンドが、一日単位、一週間単位、一ヶ月単位でログをローテーションしています。
periodicコマンドによって実行されるファイルは下記のディレクトリに格納されています。
/etc/periodic/daily/
/etc/periodic/weekly/
/etc/periodic/monthly/
例えば、/etc/periodic/daily/には、100.clean-logsと500.dailyというシェルスクリプトが入っています。100.clean-logsは不要となったログファイルを整理するシェルが記述されており、毎日実行されます。500.dailyは、scratch とjunkファイルの整理をしたり、netstatでログを取ったり、system.logのローテーションをしたり、httpdのログで7日以上たったファイルを消去したりしています。
httpdのログを消去するシェルスクリプトは、
後でわかりますが、実はApacheのログローテーション設定に矛盾がありますので、明記しておきます。
if [ -d /var/log/httpd ]; then
echo ""
echo -n "Cleaning web server log files:"
cd /var/log/httpd && ¥
find . -type f -name '*_log*' -mtime +7 -exec rm -f -- {} ¥; >/dev/null
2>&1;
fi
Apacheログのローテーションは、一週間単位でのローテーションとなっています。
設定ファイルは、/etc/periodic/weekly/500.weeklyです。
Apacheに関する部分は下記の通りで、最大5週間分のログをローテーションすることがわかります。
もっと残したい場合は、この部分を変更すればいいということになります。
私は、VirtualHostを使って、ログディレクトリを変更しているので、ディレクトリの変更とログローテーションを10週分(2ヶ月)することにしています。
cd /var/log/httpd
for i in access_log error_log; do
if [ -f "${i}" ]; then
echo -n " $i"
if [ -x /usr/bin/gzip ]; then gzext=".gz"; else gzext=""; fi
if [ -f "${i}.3${gzext}" ]; then mv -f "${i}.3${gzext}" "${i}.4${gzext}"
; fi
if [ -f "${i}.2${gzext}" ]; then mv -f "${i}.2${gzext}" "${i}.3${gzext}"
; fi
if [ -f "${i}.1${gzext}" ]; then mv -f "${i}.1${gzext}" "${i}.2${gzext}"
; fi
if [ -f "${i}.0${gzext}" ]; then mv -f "${i}.0${gzext}" "${i}.1${gzext}"
; fi
if [ -f "${i}" ]; then mv -f "${i}" "${i}.0" && if [ -x /usr/bin/gzip ];
then gzip -9 "${i}.0"; fi; fi
touch "${i}" && chmod 640 "${i}" && chown root:admin "${i}"
fi
done
if [ -f /var/run/httpd.pid ]; then /usr/sbin/apachectl restart; fi
echo ""
ログのファイル名を変更した場合、Apacheをリスタートしないと書き込みができないので、ログファイルをローテーションした後に、Apacheをリスタートしています。
ここで、MacOS Xの初期設定に矛盾があることに気がついたと思います。
Weeklyの設定では、最大5週間分のログを残すことができるのですが、Dailyの設定で、毎日7日以上経ったファイルを消しているので、access_log , access_log.0.gz , error_log , error_log.0.gz以外のログは見ることができないのです。
今まで、なぜ、ログが一世代前しか残せないか、もやもやした物がありましたが、これですっきりです。
思い切って、Dailyのhttpdのログを消去の部分を#でコメントアウトしましょう!
投稿者 chocolat : 10:11 | コメント (0) | トラックバック
2005年03月15日
アクセス解析ツール AWStats導入及び設定
オープンソースのアクセス解析ツールAWStatsを導入することに決定しました。
非常に細かい分析が可能で、無料でこれ以上のツールはないのではないかと思います。
AWStatsの設定は比較的簡単ですよ。
0. 最新版のAWStatsのダウンロード
ダウンロードURLは、http://awstats.sourceforge.net/のページの下の方に[Downlod]へのリンクがあります。
2005.3.9時点では、安定したバージョンが6.4です。セキュリティの問題もあり、必ず、バージョン6.3以降のバージョンを使うようにしましょう。
このバージョンは、はじめから日本語対応されています。(検索のキーワード/フレーズだけは対処が必要)
セキュリティの記事は、Slashdotにあります。
Slashdot : アクセス解析ツールのバグで、人気Blogが改竄される
1. apacheの設定変更
apacheの設定ファイルであるhttpd.confの変更をします。 MacOSXの場合、/etc/httpd/httpd.confです。
取得できる情報はすべてログとして残す設定に変更します。
通常、apacheのログファイルの設定は、デフォルトでは、
CustomLog "/var/log/httpd/access_log" common
とcommonとなっていると思いますが、これをコメントアウト(#をつける)して
CustomLog "/var/log/httpd/access_log" combined
のコメントアウトを取り、これを生かします。
VirtualHostの設定をしている場合は、そちらのCustomLogの設定を変更します。
combinedは、OS , ブラウザ、検索キーワード、ホスト名、検索エンジン等のログを残す設定です。 但し、この設定により、ログファイルは倍以上のサイズになるので、注意が必要です。
続きはまた明日書きます。
2. ダウンロードしたファイルの確認
ダウンロードしたファイルは下記の通りのディレクトリ構成になっています。
・docs/
・tools/
・wwwroot/
・README.TXT
wwwrootには、
・cgi-bin/
・classes/
・css/
・icon/
・js/
が含まれています。
3. CGIファイルのコピー
まず、wwwroot/cgi-bin/以下を、cgiのディレクトリの配下にコピーします。
・awredir.pl
・awstats.model.conf
・awstats.pl
・lang/
・lib/
・plugins/
MacOS Xであれば、
/Library/WebServer/CGI-Executables/
の下です。私は、整理のために、下記の通りディレクトリを作り、コピーしました。
/Library/WebServer/CGI-Executables/awstats/
4. perlのディレクトリの確認及び変更
コピーしたcgiファイルは、perlが必要で、そのディレクトリが、awstats.plファイルに記述されています。
perlのディレクトリを確認してください。
/usr/bin/perl
であれば変更の必要はありません。
別のディレクトリであれば、
awstats.plの先頭にある#!/usr/bin/perlを正しいディレクトリに書き換えてください。
5. iconファイルのコピー
次に、アイコンファイルのコピーです。
コピーはディレクトリごとで、ダウンロードしたファイルの
・wwwroot/icon
です。
ブラウザーや国旗やOSなどのアイコンが含まれており、分析結果の中で使われる大事なファイルです。
MacOS Xであれば、
/Library/WebServer/Documents/
の下です。私は、整理のために、下記の通りディレクトリを作り、コピーしました。
/Library/WebServer/Documents/awstats/icon/
6. コンフィグレーションファイル名の変更
次に、先ほどコピーしたcgiファイルの中に含まれるコンフィグレーションファイルの変更をします。
awstats.model.confというファイルがありますが、 model部分を自分のサーバ名に変更します。
例えば、私の自宅のサーバ名は、 blog.kitamura.fmですが、その場合、下記の通り、ファイル名を変更します。
awstats.blog.kitamura.fm.conf
model部分は、サーバ名で検索するようになっています。
7. 設定ファイルのパラメータ設定
awstats.blog.kitamura.fm.confのパラメータ設定を行います。
最低限の設定は、LogFile , DirIcons , SiteDomain ,DirDataの3つです。
エディタで、awstats.blog.kitamura.fm.confを開き
LogFileは、ログファイルのフルパスを記述します。
MacOS Xの場合、/var/log/httpd/access_logです。
LogFile="/var/log/httpd/access_log"
DirIconsは、5. iconファイルのコピーで設定したディレクトリです。
絶対パスではなく、公開されたディレクトリからのパスです。よって、下記の通りになります。
DirIcons="/awstats/icon"
最後に、SiteDomainの設定ですが、これは、ドメイン名です。
私の場合、SiteDomain="blog.kitamura.fm"
DirDataは分析結果を書き出すディレクトリです。何も書かなければ、cgi-binファイルと同じディレクトリに書き込まれます。
以上で基本設定は終わりです。
8. 検索キーワード/フレーズの文字化け解消
どのようなキーワード/フレーズで検索されたかログがとれていますがEUCとか混在し、表示はUTF8なので、ほぼ確実に、検索キーワード/フレーズについては、文字化けをします。
これを解消するのが、Jcode.pmです。これは、CPANに正式登録されていて非常に便利なライブラリです。
URLは下記の通りで、まず、これをダウンロードしてください。
ダウンロードした後に、下記の通り、スーパーユーザ権限でコマンドを実行します。
# perl Makefile.PL
# make
# make install
これで、Jcode.pmのインストールは完了です。
次に、cgiとしてコピーしたawstats.plの編集です。まず、
use Jcode ;
を先頭の行に追加します。(#!/usr/bin/perlより後)
次は、sub DecodeEncodedString を検索してください。
初期は次のようになっています。
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/¥+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
return $stringtodecode;
}
これを
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/¥+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
+ Jcode::convert(¥$stringtodecode, "utf8");
return $stringtodecode;
}
とJcodeで変換する部分を追加します。
これで文字化けは解消されます。
9. 統計情報の初期作成
初期処理は時間がかかるので、cgiではなくコマンドで実行します。
./awstats.pl -config=HOSTNAME -update
私の場合、./awstats.pl -config=blog.kitamura.fm -update
しばらくすると、DirDataのディレクトリに分析結果が書き込まれます。
10. アクセス制限設定
セキュリティの設定には、いくつかの方法があり、ここではIPアドレスでの設定制限をご紹介します。
私の場合、家の中の、Macからしかアクセスしないので、ローカルIPアドレスのみ許可することにしました。
設定ファイルは、先ほどと同様、awstats.blog.kitamura.fm.confです。
パラメータは、AllowAccessFromWebToFollowingIPAddressesです。
AllowAccessFromWebToFollowingIPAddresses="127.0.0.1 192.168.1.1-192.168.1.255"
11. crontabの設定
分析ファイルを定期的に更新することが必要になりますが、これは、crontabで行うことにします。
crontab -e
これは、viエディタですが、viエディタの使い方は事前に勉強してくださいね。
例えば、10分ごとに分析ファイルを更新する場合は、
*/10 * * * * /Library/WebServer/CGI-Executables/awstats/awstats.pl -config=blog.kitamura.fm -update > /dev/null 2>&1
を追加してください。
> /dev/null 2>&1を除くと、結果をメールですべて通知してくれます。
10分単位で、メールが来ると大変なので、しばらく正常動作するまで様子を見て、うまく行っていることがわかってから追加してもいいかもしれませんね。
12. 分析結果の確認
分析結果の確認は、ブラウザから行います。
http://HOSTNAME/cgi-bin/awstats.pl
これで、無事見ることができます!

