15分で理解するApacheのログローテート

公開日: : 最終更新日:2016/01/31 Linuxの技術メモ ,

Apacheのaccess_logはすぐ大きくなりますよね。
ログファイルのサイズが大きくなれば、ログ解析のときにも困るし、運用に支障が出ます。

というわけで、今回はApacheのaccess_logのログローテートテクニックについて、具体例を交えながら解説してみようと思います。
ローテートの方法として以下3つの手法を考えてみます。

  1. cronとシェルスクリプトの合わせ技で頑張る
  2. Apacheのに搭載されている機能を使う
  3. logrotate.dに頼る

具体的な手順・解説は以下のとおり。

スポンサーリンク

その1:cronとシェルスクリプトの合わせ技

以下のようなスクリプトを作成し、cronに仕込んでみます。

解説

やっていることは、ログファイルをmvで別名に変更後、圧縮してるだけです。

それでは、以下、各行毎に見ていきましょう。

mv access_log access_log.$HIDUKE

mvでaccess_log.年月日 という名前にローテートしています。

/apachectl graceful

待機状態のhttpdプロセスだけを再起動を実施するオプションです。

ユーザ接続中のhttpdプロセスは処理が終了してから再起動するという、サービス停止の影響を最低限に押さえることのできる便利なオプションです。

sleep 600

gracefulでいつ処理が終わるか分からないので、なんとなく600秒待ってみます。

gzip access_log access_log.$HIDUKE

容量削減のためにgzipで圧縮します。

その2:Apacheに最初から付いてる機能を使う

実は、Apacheにはrotatelogsという機能があります。

有効化するためには、httpd.conf内のCustomLog識別子を以下のように編集すればOKです。

解説

やっていることは、24時間ごとに別名で保存してるだけです。

それでは、以下、各行毎に見ていきましょう。

/access_log.%Y%m%d

access_log.年月日 という別名にローテートします。

86400

ローテートする周期を”秒”で指定します。86400で24時間ですね。

540

日本時間用のオフセット値です。設定しておかないと、UTCで0時に実行されるため、日本では毎朝9時に実行されることになります。

その3:logrotate.dに頼る

/etc/logrotate.d 用の設定ファイルを作成して、logrotate.d にお任せする方法です。

設定ファイルをhttpdという名前にする場合は以下のように書きます。

解説

やっていることは、毎日ローテートして圧縮、30日以上前のログは消えるという設定です。

それでは、以下、各行毎に見ていきましょう。

missingok

ログファイルが存在しない場合にエラーを出力しません。

notifempty

ログファイルが空の場合ローテーションしません。

daily

毎日

rotate 30

30個までログを残します。

compress

gzipで圧縮します。

sharedscripts

ログファイルを複数指定した場合、それぞれpostrotate、prerotate内のコマンドを実行します。

postrotate

endscriptとの間に書いたコマンドをローテーション後に実行します。

詳細なlogrotateのオプションの解説

ローテーションの実行・回数

  • daily 毎日
  • weekly 毎週
  • monthly 毎月
  • rotate 指定した回数ローテーション(いくつログファイルを残すか)
  • rotate [ローテーション回数]

ログの圧縮

  • compress ログをgzipで圧縮
  • nocompress 圧縮しない

その他

  • ifempty ログファイルが空の場合でもローテーション
  • notifempty ログファイルが空の場合ローテーションしない
  • missingok ログファイルが存在しない場合にエラーを出力しない
  • nomissingok ログファイルが存在しない場合にエラーを出力
  • postrotate endscriptとの間に書いたコマンドをローテーション後に実行
  • prerotate endscriptとの間に書いたコマンドをローテーション前に実行
  • size ログファイルが指定サイズ以上の場合ローテーション
  • size [ファイルサイズ]
  • sharedscripts ログファイルを複数指定した場合、それぞれpostrotate、prerotate内のコマンドを実行
  • create ローテーション後、空のログファイルを作成
  • create [パーミッション] [ユーザ名] [グループ名] で権限の指定可能
  • nocreate 空のログファイルを作成しない
  • olddir 指定したディレクトリにローテーションしたログを保存
  • olddir [ディレクトリ名]
  • noolddir 元と同じディレクトリにローテーションしたログを保存
図解でわかる Linuxサーバ構築・設定のすべて
一戸 英男
日本実業出版社
売り上げランキング: 2437
おすすめ度の平均: 4.5

5 助かる本です
4 助かりました。
5 著者は・・・
4 情報が豊富
5 初心者にもオススメ

AD

この記事が興味深かった場合は、SNSボタンでシェアいただけると嬉しいです。

関連記事

linux_icon

CentOSおよびRHEL 6以降での正しいfstabの書き方

/etc/fstab を書くときに、以下のようにデバイス名で書いてしまいがちですが、これはダメな書き

記事を読む

linux_icon

kdumpでダンプを取得する方法

kdumpの設定方法です。 ※2015/01/11アクセス数が多い記事のため、詳しく書き直しました

記事を読む

linux_icon

Linuxにapacheをインストールする際のオプション設定方法

デフォルト設定で apache をインストールするときは、以下の手順で実行しますよね。 # tar

記事を読む

linux_icon

cronの実行ログ確認方法

cronのログ確認方法です。 # tail -f /var/log/cron 以上

記事を読む

linux_icon

CentOSおよびRHELでパーティションのUUIDを確認するコマンド

ディスクを追加した時など、パーティションのUUIDを確認したいときがあります。 そんなときに使う確

記事を読む

Message

メールアドレスが公開されることはありません。

AD

xperia-z3-c-rear-open02
Xperia Z3 Compact のバッテリーを交換する方法

私は Sony の Xperia Z3 Compact をとても気に入

SP016GBSTU160N22
東芝 Dynabook Satellite R35 のメモリを16GBに増設してみた

私はサブノートPCとして東芝 Dynabook Satellite R

raspberry-pi-case06
結局Raspberry Pi 2 Model Bのケースを購入した

先日Raspberry Pi 2 Model Bのケースを自作してみま

xperia-z3-c-rear-open02
Xperia Z3 Compact の背面パネルを交換・修理する方法

Sony の Xperia Z3 の背面パネルはガラスなので、落とした

Raspberry_Pi_logo
Raspberry Pi 2 Model B とRaspberry Pi 3 Model B の比較

Raspberry Pi 3 Model B が発売されましたね。

→もっと見る

PAGE TOP ↑