あなたのWebサーバのログの保存ポリシー、logrotateのスクリプト or 参考にしているURL等を教えて下さい。


知りたいのは、スバリ利用しているapacheのlogrotateスクリプトです。しかし、他にも知りたいのは

・基本的なログ管理のポリシー
・どの頻度で切り出しているか?
・どのようなディレクトリ
・圧縮しているか?
・できれば、どのように保存・管理しているのか?

などです。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/01/23 11:00:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:ffmpeg No.1

回答回数1202ベストアンサー獲得回数9

ポイント27pt

ふつうそんなものはデフォルトで機能するのでは?

id:p_question

機能します。機能しています。

知りたいのは

・weeklyなどで、access_log.1,access_log.2,ccess_log.3,などと増えていくのは管理しづらい、利用しづらい

・他の方がどのようなlogrotateスクリプトを利用しているのか?

・それを利用している理由を知りたい。

・良いものがあれば、利用したい。

という目的のためです。

2008/01/17 06:17:37
id:pmakino No.2

回答回数358ベストアンサー獲得回数30

ポイント27pt

Web サーバのログは基本的に全て残すつもりなので、また 0:00 できっかり区切りたいので、logrotate は使わず rotatelogs を使っています。

ローテーション頻度は日次で切っています。

出力先はディストリビューションのデフォルト設定の (Debian を使っています) /var/log/apache2/ に。

具体的には下記のような設定ですね。

CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access.%Y%m%d.log 86400 540" combined

ErrorLog "|/usr/sbin/rotatelogs /var/log/apache2/error.%Y%m%d.log 86400 540"

ただし過去ログが全部同じディレクトリに溜まると鬱陶しいので、cron.daily に下記のようなスクリプトを置き、過去ログを bzip2 圧縮し /var/log/apache2/past/ ディレクトリに移動しています。

#!/usr/bin/env perl

use strict;

use warnings;

use POSIX qw(strftime);

# 生ログのある場所と過去ログを移動する場所

my $logdir = '/var/log/apache2';

my $pastdir = '/var/log/apache2/past';

# 圧縮に使用するコマンドと拡張子

my $cmd = 'bzip2';

my $ext = 'bz2';

# 本日

my $today = strftime('%Y%m%d', localtime);

# 本日以外の生ログを圧縮する

system("find $logdir -name '*.log' ! -name '*.$today.log' | nice -19 xargs $cmd");

# 圧縮されたログを過去ログディレクトリに移動する

system("mv $logdir/*.log.$ext $pastdir/");

(Apache のログは bzip2 圧縮が覿面に効きますね。gzip 圧縮した場合よりさらに2/3程度に縮みます。)

id:kuli No.3

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

ポイント26pt

* 自分用のメモより

なんのひねりもなくlogrotateを使っています。

毎日 /var/log/httpd のログを /var/log/httpd/00old にコピーして圧縮する。

  1. access_log, error_log, robot_log の3つのログを取っているので、それぞれのファイルのバックアップを日毎に移動する。
  2. ファイル名に日付けを付けて分かりやすくする。
  3. bzip2で圧縮する。

/etc/logrotate.d/httpd

/var/log/httpd/*log {
    daily
    copytruncate
    nomissingok
    ifempty
    nosharedscripts
    nocompress
    postrotate
      EXT=`date --date '1 days ago' '+%Y%m%d'`
      for f in $1
        do /bin/mv $f.1 $f.$EXT
      done
    endscript
    lastaction
      EXT=`date --date '1 days ago' '+%Y%m%d'`
      /bin/mv /var/log/httpd/*.$EXT /var/log/httpd/00old/
      /usr/bin/bzip2 -9 /var/log/httpd/00old/*.$EXT
      /bin/rm /var/log/httpd/*.1
    endscript
}

もっとスマートなやり方があるかも。

id:ffmpeg No.4

回答回数1202ベストアンサー獲得回数9

ポイント10pt

たぶん、レンタルサーバーでも運営していないかぎり、WEBサーバーのログにそんなにこだわっている人は少ないでしょう。

検索した範囲では、こだわり派はこんな感じ。

http://www.atmarkit.co.jp/flinux/rensai/apache14/apache14a.html

http://www.rescue.ne.jp/CGI-BBS/server/apache/20020227224425.sht...

http://www.rfs.jp/server/apache/01/05.html

  • id:p_question
    rotatelogs だったか忘れましたが、logrotate 以外のもので、パイプを使っているために遅くなったりするものってありませんでしたっけ?

    logrotate でもログが大きくなると、ログファイルが大きくなるため、パフォーマンスが悪くなるというようなことを聞いた記憶があります。
  • id:p_question
    kuli さんの logrotate の設定は、サービスを再起動していないのですが、問題ないものでしょうか?

    よく見る設定では、kill -HUP, apachectl restart するものが多いので、どうなのだろうと。

    良くある例

    /usr/sbin/apachectl graceful
    /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
    /sbin/service httpd reload > /dev/null 2>/dev/null || true
  • id:p_question
    kuli さんのものを試すと、CentOS4.6だと以下のエラーが出て、ちゃんと動かないようです。

    /etc/cron.daily/logrotate:

    /bin/mv: cannot stat `/var/log/httpd/*.20080130': No such file or directory
    bzip2: Can't open input file /var/log/httpd/00old/*.20080130: No such file or directory.
  • id:kuli
    bashを logrotate でラップしているだけのはずなので、問題ないと思いますよ。
    apacheが標準で吐き出している access_log.1 というファイルをリネームするところでちゃんと mv 出来てないんじゃないでしょうか?

    それよか参考リンク先のコマンドリファレンスなどをよく読むともっとスマートなやり方を思いつくかもしれませんよ。

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

トラックバック

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

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

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