ログローテートの設定ミスでした。。。

いつの頃からか apache httpd のログファイルが access_log-yyyymmdd という形式のファイル名で書き込まれるようになりました。

デフォルトでは1週間ごとにログファイルが切り替わるようになっていますので、下記のようなファイルが作成されていきます。

access_log-20190602
access_log-20190609

ファイル名に年月日が含まれるようになったので、調べたい日付のログが含まれるファイルをすぐに特定することができるようになり、便利といえば便利です。

ところが、あるサーバで、スクリプトを動かしてログの内容を読み取るので access_log という名前で書き込まれるようにしたい、という要望がありましたので、設定を調べました。

まずは /etc/httpd/conf/httpd.conf ファイルを調べましたが、下記のようになっており、年月日が含まれるような設定ではなさそうでした。

CustomLog logs/access_log combined

実は、access_log-yyyymmdd となる設定は logrotate によるものです。/etc/logrotate.conf ファイルを開いてみると、下記のような行があります。

# use date as a suffix of the rotated file
dateext

dateext は、ログファイルをローテートするときファイル名の後ろに「-yyyymmdd」をつけるというものです。(この設定が access_log のファイル名に影響しているかもしれないと思ったのですが、早とちりでした。)

とはいえ、元締めとなる /etc/logrotate.conf を直接編集してしまうと、他のログにも影響がでてしまうので、/etc/logrotate.d/httpd を修正し、nodateext を追加しました。

/var/log/httpd/*log {
     nodateext
     missingok
     notifempty
     sharedscripts
     delaycompress
     postrotate
         /sbin/service httpd reload > /dev/null 2>/dev/null || true
     endscript
 }

これで、日付でなく番号でファイル名がローテートされるようになります。

(追記)

httpd が access_log-yyyymmdd のファイルにログを書き込んでいたように見えたのは、実は logrotate の設定の中で apache を再起動する部分に間違いがあり、ファイル名がリネームされたのに再起動がうまくかからなかったため、同じファイルに継続して書き込んでいたことがわかりました。それで、apache を再起動したら access_log に書き込まれるようになったのだと思われます。

カテゴリー: サーバ関連

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください