Edited at

任意のログをlogrotateを使って管理する


概要

アプリケーションのログをsyslogに吐き出し、ローテートする。


関連記事


環境


  • CentOS release 6.7


設定ファイル

設定ファイル構成

/etc/

├── logrotate.conf # メインの設定ファイル
├── logrotate.d # 各サービスごとの設定ファイル
│   ├── dracut
│   ├── iscsiuiolog
│ ├── mcollective
│ ├── mysql
│ ├── syslog
│ ├── yum

/etc/logrotate.confに全ての設定を記載することも可能だが、

/etc/logrotate.d以下もincludeされているので、ここにサービスごとの設定ファイルを作成し、記載する。


設定例

下記の例を設定する

設定内容

対象のログ
/var/log/sample-service/sample.log

ローテート期間
毎日

何世代ログを残すか
10日

postrotate
ローテート後にsyslogを再起動

syslogを再起動しないと、新しいファイルにログが書き込まれない


sample-service用の設定ファイルを作成

$ vi /etc/logrotate.d/sample-service


/etc/logrotate.d/sample-service

/var/log/sample-service/sample.log { # 対象のログファイル

ifempty # ログファイルが空でもローテーションする
dateformat .%Y%m%d # dateフォーマットを任意のものに変更する
missingok # ログファイルがなくてもエラーを出さない
compress # 圧縮する
daily # 毎日ローテートする
rotate 10 # 10世代分古いログを残す
postrotate # ローテート後にsyslogを再起動
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}


各種コマンド一覧

コマンド
説明

compress
ローテーションしたログをgzipで圧縮

copytruncate
ログファイルをコピーし、内容を削除

create
[パーミッション ユーザー名 グループ名] ローテーション後に空のログファイルを新規作成。ファイルのパーミッション、ユーザー名、グループ名を指定可能

daily
ログを毎日ローテーションする

delaycompress
ログの圧縮作業を次回のローテーション時まで遅らせる。compressと共に指定

ifempty
ログファイルが空でもローテーションする

missingok
ログファイルが存在しなくてもエラーを出さずに処理を続行

monthly
ログを毎月ローテーションする

nocompress
ローテーションしたログを圧縮しない

nocreate
新たな空のログファイルを作成しない

nomissingok
ログファイルが存在しない場合にエラーを出す

noolddir
ローテーション対象のログと同じディレクトリにローテーションしたログを格納

notifempty
ログファイルが空ならローテーションしない

olddir [ディレクトリ名]
指定したディレクトリ内にローテーションしたログを格納

postrotate~endscript
postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行

prerotate~endscript
postrotateとendscriptの間に記述されたコマンドをログローテーション前に実行

rotate 回数
ローテーションする回数を指定

size [ファイルサイズ]
ログファイルが指定したファイルサイズ以上になったらローテーションする

sharedscripts
複数指定したログファイルに対し、postrotateまたはprerotateで記述したコマンドを実行

weekly
ログを毎週ローテーションする

引用元:http://masasuzu.hatenablog.jp/entry/20111117/1321512757


ローテート確認

-dをつけてdry-runをして結果を見る。

# logrotate -dv /etc/logrotate.conf

実際に実行するにはこちら

# /usr/sbin/logrotate /etc/logrotate.conf

ローテートする条件を満たしていなくても強制的に実行する場合は-fを付ける

# logrotate -f /etc/logrotate.conf

最後にローテーションされたログファイルの日付を確認する

# cat /var/lib/logrotate.status


logrotate state -- version 2
"/var/log/yum.log" 2017-1-13
"/var/log/dracut.log" 2017-1-13
"/var/lib/mysql/mysqld.log" 2017-1-13
(略)

以上


参考

logrotate でデフォルト以外のフォーマットで日付ファイル名にしたいとき

logrotate.confファイルを読み解くメモ

rsyslogを利用したログファイル作成と、logrotateを利用したログのローテーション

logrotate(ログローテート)の動作確認