LoginSignup
336
354

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-01-24

概要

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

336
354
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
336
354