スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ブログランキング参加中です。クリックで応援してくださいね→にほんブログ村 PC家電ブログ Windowsへ
Windowsの記事が多いのでWindowsカテゴリに参加中です。

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

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

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

ローテートの方法として以下3つの手法を考えてみます。

その1:cronとシェルスクリプトの合わせ技で頑張る
その2:Apacheに最初から付いてる機能を使う
その3:logrotate.dに頼る

この時点で「ああ、それなら分かるよ」という方はもう立派なエンジニアですね。
とまぁ、無駄な話は置いておいて…

具体的な手順・解説は以下のとおり。
その1:cronとシェルスクリプトの合わせ技
=====================================
#!/bin/sh

HIDUKE='date +%y%m%d'

cd /usr/local/apache2/logs
mv access_log access_log.$HIDUKE
../bin/apachectl graceful
sleep 600
gzip access_log access_log.$HIDUKE
=====================================
上記スクリプトを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に最初から付いてる機能を使う
実はrotatelogsという機能があるんですよ。
有効化するためには、
httpd.conf内のCustomLog識別子を以下のように編集する。
=====================================
CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y%m%d 86400 540" combined
=====================================
↑一行で書くこと!!

【解説】
要するに、24時間ごとに別名で保存してるだけです。

/access_log.%Y%m%d
access_log.年月日 という別名にローテート。

86400
ローテートする周期を"秒"で指定。
86400で24時間。

540
は日本時間用のオフセット値。
つけないと、UTCで0時に実行されるため、日本では毎朝9時に実行されることに…。



その3:logrotate.dに頼る
/etc/logrotate.d 内に下記内容のファイルを作成する。
vi /etc/logrotate.d/httpd (httpdという名前で作る場合)
=====================================
/usr/local/apache2/logs/access_log {
 missingok
 notifempty
 daily
 rotate 30
 compress
 sharedscripts
 postrotate
  /usr/local/apache2/bin/apachectl graceful
 endscript
}
=====================================

【解説】
要するに、毎日ローテートして圧縮、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 初心者にもオススメ
関連記事
ブログランキング参加中です。クリックで応援してくださいね→にほんブログ村 PC家電ブログ Windowsへ
Windowsの記事が多いのでWindowsカテゴリに参加中です。

テーマ : Webサービス - ジャンル : コンピュータ

コメント
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。