Help us understand the problem. What is going on with this article?

任意のログを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(ログローテート)の動作確認

Esfahan
WEB系出身。現在はビッグデータの基盤構築、ETLなどがメイン。 / YouTubeで料理チャンネルやってます → https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした