Daily Archives: 03/12/2012

/var/logの下がえらいことになっていたでござる。(あるいはFreeBSDでログのローテーション設定をするには(logrotateではなくnewsyslog))。

Pocket

ある日、ふと/var/logの下を見てみたら、1.5GBytesに膨れ上がった某ログファイルがあって腰を抜かした件について。

思えば、サーバソフトウェアなどでは、インストールしたらまずそのものの設定で頭が一杯だ。

一方で、いわゆるシモの世話といいますか、吐き出すログの設定には頭が回ってなかったことに深く反省するのであります。

俺の例でいえば、apache、clamav、dhcpdのログが手つかずでありました(冒頭、1.5GBytesになっていたログはdhcpdのもの)。

portsから入れたサーバのログは、いちど確認したほうがいいだろう。

基本は/var/logの下に出力されるが、/usr/local/var/logが(あれば)見た方がいいし、場合によっては思わぬところに吐き出されてる可能性もある。

newsyslogd

さて、FreeBSDではログのローテートはnewsyslogdが行う。Linuxではlogrotateにあたるもの。

handbookではこのへん

英語(推奨)

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-configfiles.html

日本語

http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/book.html#CONFIGTUNING-CONFIGFILES

newsyslogの設定サンプル

man newsyslog.confを見ればだいたい分かる。以降、英文はここからの引用。

http://www.freebsd.org/cgi/man.cgi?query=newsyslog.conf&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html

以下の順番で並べるだけ。間はスペースで埋めること(separated with whitespace)。

以下、サンプル。

/var/log/local7.logが、1MBytesを超えた時点でローテーション。

生成されたログのパーミッションは600で、bzip2で圧縮され(J)、10個保存される。

apacheのログを毎日午前3時にローテーション、圧縮して7日分残す。

設定を変えたらnewsyslogdを再起動。

設定について

filename

 その名の通り。

[owner:group]

 省略可。アーカイブ後ファイルの所有ユーザとグループ

mode

 ログファイルとアーカイブ後ファイルのパーミッション。

 サーバソフトが作るオリジナルのパーミッションと合わせておくのがよい。

 というのも、newsyslogdがログをローテーションするときに新しいログファイルを作るから。

 owner:groupにはなく、こちらにだけ「ログファイル」という記載があるのはなぜでしょうな。

count

 残す「アーカイブ後の」ログファイル数。

 3なら、アーカイブされたログが3つになる。

size

 このサイズを超えたときにローテーションされる。

 キロバイトで指定。

 アスタリスク(*)の場合には、サイズベースでのローテーションはしない。

when

 ローテーションする時間、時刻契機を指定。

 インターバル、時刻を指定できる。

 書式は二つ。後述する。

 注意すべき点は、newsyslog自体が一時間に一回しか起動しないこと。

 これはつまり以下のような動作となる、と理解した。

 ・仮に、newsyslogdが毎時0分に起動し、かつ

 ・毎時1分にローテーションする設定にした場合、

 →例えば、1時1分ではなく、2時にローテーションが発生する。

newsyslog.conf(5)より抜粋

If a time is specified, the log file will only be trimmed if newsyslog(8) is run within one hour of the specified time. If an interval is specified, the log file will be trimmed if that many hours have passed since the last rotation.

 書式

 @で書くもの、$で書くものの二つ。

 @は、[cc]yy]mm]dd][T[hh[mm[ss?]

 $は、[Dhh], [Ww[Dhhと[Mdd[Dhh

 サンプルを見るのが一番よい。(これもmanから抜粋)

 $D0 毎日午前0時。@T00と同じ意味

 $D23 毎日23時。@T23と同じ意味

 $W0D23 毎週日曜23時

 $W5D16 毎週金曜16時

 $M1D0 毎月1日の午前0時。@01T00と同じ意味

 $M5D6 毎月5日の午前6時。@05T06と同じ意味

flags 一部のみ。基本JCでよい。

 J ログをbzip2で圧縮。Zならgzip。Xならxz。

 C ログが存在しない場合に作る。

 G パターンにマッチしたログファイルを対象にできる。

 

pid_file

 通常、ログをローテーションした後はsyslogdにシグナルが送られる。

 syslogd以外のプロセスにシグナルを送りたい場合には、プロセスの

 pidが書かれたファイルをここで指定する。

以上

No tags for this post.