概要
アプリケーションのログを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 | prerotateと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(ログローテート)の動作確認