- PR -

Apacheのログについて

1
投稿者投稿内容
純一郎
常連さん
会議室デビュー日: 2004/04/05
投稿数: 22
投稿日時: 2004-08-15 09:35
いつもお世話になっています。

Apacheをインストールしたマシンを三台利用して、
DNSでラウンドロビンして負荷分散させています。

アクセスログをwebalizerやanalogで解析したいのですが、
それぞれのマシンのログが記録されているので
それらのログをすべて一箇所に集めて統計したいと考えています。
ですが、具体的にどうすればよいのかが分りません。
よい方法をご存知の方、ご教示いただけませんでしょうか。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-08-15 19:55
こんにちわ.

今週は皆さん,夏休みのようでレス付きにくいかもしれませんねぇ
apache はご存知のように,syslogd とは独立して logging しますけど,errorlog だけは syslogd へ送り込むことが出来るみたいです.純一郎様のご希望はおそらくこの errorlog ではなく,accesslog を3台->一箇所に纏めたいという理解でよろしいでしょうか?

調べてみた限りでは,accesslog を直接 syslog へは送り込めないようですが,|(pipe)に続けて command line を "" で囲んで記述してやると,出力を command に渡してやれるみたいです.例えば logger で syslogd に投げてやり,syslogd がさらに特定の loghost に投げてやれば,複数の apache の accesslog を単一の file に書き込めないかな〜と思うです.logger には任意の tag を付けたり,facirity や level を指定したりできるようですし...

「ちゃんとしたやり方」ではなく小細工じみてますが,ご参考までに.
うっちー
常連さん
会議室デビュー日: 2004/08/12
投稿数: 32
投稿日時: 2004-08-15 23:29
こんばんわ。

参考にならないかもしれませんが。

「accesslog を3台->一箇所に纏めたい」という理解から、
kaz さんと違う切り口で、
swatch を使用する方法もあるかと思います。

#シンプルじゃないですね・・・(´ヘ`;)
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2004-08-16 01:14
いろいろ方法はあるでしょうが、単純にログスイッチの後でFTPで一箇所に集めるのが一番単純でよいように思います。
はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-08-16 14:19
こんにちは〜。

こちらの記事の 第7〜10回あたりも参考になりそうでしょうか。

 ・ [連載] 止められないUNIXサーバのセキュリティ対策 (@IT さんより)

ちなみに、ftp で集約さる運用をしているところは知っていますです。
# きちんと転送できたかのチェックとか、面倒そうなカンジでしたが…
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-08-16 15:59
アクセスログの解析結果を CGI 等でリアルタイムで見たい
場合は、syslogd を利用する方法が簡単なのではないで
しょうか。

access_log を DB に出力する DSO もあるようですが、
詳しい事は知りません。

一定時間毎にファイルを転送して解析する場合、
webalizer や analog は知らないですが、
AWStats は一仕事必要です。

AWStats は解析情報作成時に、解析の終了したログ日時を
記録しているので、同じ時間帯の複数ログファイルを処理
できないので、予めマージ & ソートが必要になります。


[ メッセージ編集済み 編集者: はしもと 編集日時 2004-09-07 15:13 ]
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2004-08-16 17:55
Perlを利用してsyslogに書き込む方法もあります。
適当な場所に以下のPerlスクリプトを記述して
適切な権限を与えます。
(ここでは/usr/local/apache/bin/syslog.pl)

=====================================================
#!/usr/bin/perl

use Sys::Syslog qw( :DEFAULT setlogsock );

setlogsock('unix');
openlog('[apache]','cons','pid','user');

while ($log = <STDIN>) {
syslog('notice',$log);
}

closelog;
=====================================================

Apacheのhttpd.confのTransferLog(もしくはCustomLog)ディレクティブで
syslog.plを指定します。
=====================================================
CustomLog |/usr/local/apache/bin/syslog.pl combined
=====================================================

これでApacheを再起動すればアクセスログがsyslogに渡されます。

Perlスクリプトの、openlog関数の第一引数がタグの、
第四引数がsyslogファシリティの指定になります。
syslog関数の第一引数がsyslogプライオリティの指定になります。


あとはsyslogの設定で@loghostを指定すれば1つのログサーバで
まとめて管理することができると思います。
NTP等による時刻同期と、syslogを-rオプション付で起動することを
お忘れなく。


[ メッセージ編集済み 編集者: Uta 編集日時 2004-08-16 17:56 ]

[ メッセージ編集済み 編集者: Uta 編集日時 2004-08-16 17:57 ]

[ メッセージ編集済み 編集者: Uta 編集日時 2004-08-16 17:57 ]
純一郎
常連さん
会議室デビュー日: 2004/04/05
投稿数: 22
投稿日時: 2004-08-20 12:26
みなさんお返事ありがとうございます。

ログのローテーション後にrsyncで転送するという方法も考えたのですが
1日分のログが複数のファイルに出力されるので
アクセス解析の際に面倒かなと考えていました。

Utaさんに教えていただいたperlを使う方法でやってみたいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)