MIRACLE
メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

日本発のリナックス企業、ミラクル・リナックスで奮闘する社員のブログです。

ミラクル関連リンク

採用情報

サイト検索

2010年2月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            

« 気楽にtmpfsを使ってます | メイン | Linux でシリアルコンソール »

きっちりログを分けたいの

ネタで悩んでいるお隣さんまでのつなぎです。anaitoです。

MiracleLinuxをはじめとするLinuxでは、ログのローテーションはlogrotateを使うのが普通です。

ウチのデフォルトであれば、/etc/cron.dailyにlogrotateのキックが突っ込まれているので4時02分にローテーションされます。logrotateの設定を変更してweeklyからdailyに変更すると確かに毎日ファイルがローテーションされているのが確認出来ます。

ですが、、、ローテーションしているタイミングは朝方です。つまりある一日のログを確認するには2ファイル確認する必要があります。(たとえweeklyでもローテーションするときにはファイルを跨ぐ日がでてしまいますね)

なんかイヤですね~。しかし、

「2ファイル確認すればええやん。」とあなたは妥協したとしましょう。

するとlog4jなら簡単なのにフフン♪と通行人に言われることうけあいですorz

そんな風に追い込まれれば早く妥協を撤回してなんとかしなければいけませんよね?

そんなわけで、考えていきましょう。

まず考えつくのが/etc/cron.daily(要するに/etc/crontabの設定)でキックするのをやめてrootユーザのcrontabに0時ぴったりにキックするようにすることですね。私の経験上、これで98%ぐらい達成出来ます。あとの2%は前処理やらなんやらで取りこぼしがあるかもしれません。

じゃあ、取りこぼしを加味して2ファイル確認すれば、、、ってなんの解決にもなっていませんネ!?

こんな時は標準のsyslogdではなくて、syslog-ngを使ってみましょう。MiracleLinux 4.0には入っていますし、syslog-ng本家のソースにはspecファイルが含まれるのでrpmにするのも簡単です。MLの場合は、chkconfigでどちらか一方が起動するようにして下さい。

細かくは割愛しますが、syslog-ng.confのなかではMACRO機能が使えます。今回のような場合であればdestination設定に$DAYを使えば日が変わると勝手に日付を変更して出力するようになります。これは外部プログラムによるものではないのでlog4jのDailyRollingFileAppenderと同じような動きになります。

MACROについてはこちらのTable 3.6.を参照してみて下さい。

このMACROを使って極端に合理的な設定をするとdestination, filter, logの設定は3行で済んじゃいます。

destination d_net { file("/var/log/$FACILITY/$YEAR-$MONTH-$DAY.log"); };
filter f_all { level(info..emerg); };
log { source(s_remote); filter(f_all); destination(d_net); };

気をつけないといけないのは無いディレクトリはつくってほしいのでoptionsのcreate_dirs(yes);ですか。

どうです?スッキリしてますよね。

ちなみにremove_if_olderなんて設定もあるのでファイルを削除することも出来ます。最近では設定例などもよく見かけるようになったので試してみては如何でしょうか?

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6745930

このページへのトラックバック一覧 きっちりログを分けたいの:

コメント

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.