Apache のログ管理

Apache のログ管理

いい年こいていまさらながらチャットモンチーにはまってしまいました。えっちゃんマジ天使。こんにちは nakamura です。

ある程度 Apache を触っている人なら、何をいまさらなちょいネタですが、今日は大体いつも設定している Apache のログ管理の方法をご紹介しようと思います。

まずはローテートする

Apache には rotatelogs というコマンドがデフォルトでくっついてきます。こいつを使うと logrotate とか使わずに、日時でログのローテーションが可能になります。logrotate と違って Apache の再読み込みも必要ないしいい事ずくめなので、僕が Apache をセットアップする時は基本的に使ってます。

こんな感じでバーチャルホスト毎に日別でログをローテートしてます。

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin admin@example.com
    DocumentRoot /home/projects/c-brains.jp/htdocs
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/access_log.http.%Y%m%d 86400 540" combined
    ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/error_log.http.%Y%m%d 86400 540"

    <Directory "/home/projects/c-brains.jp/htdocs">
        Options None
        AllowOverride None
        Order Deny,Allow
    </Directory>
</VirtualHost>

rotatelogs の細かいオプションについては こちら をどうぞ。

圧縮する

ローテートされて書きこまれなくなったログファイルは滅多に中身を見る事もないので、圧縮しちゃいましょう。こんな感じのスクリプトを日次で走らせています。

#!/bin/bash

# ファイル名に本日の日付を含まず、まだ圧縮されていないファイルを圧縮
find /var/log/httpd/*/ -type f ! -name "*`date +%Y%m%d`*" ! -name "*.gz" -print0 | xargs -0 gzip

削除する

HDD 容量に余裕があるのならそれほど気にする必要はありませんが、さすがにもう要らんやろー!っていうぐらい古いログファイルは削除しちゃってもよいと思います。

#!/bin/bash

# 365日よりも前に作成されたファイルを削除
find /var/log/httpd/*/ -type f ! -mtime +365 -print0 | xargs -0 gzip

以上!!


チャットモンチー好きじゃなくてもいいのでプログラマ募集してます!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ