81
71

More than 1 year has passed since last update.

はじめてのログローテート

Last updated at Posted at 2018-09-12

想定読者

ログローテートを知らない人。
ログローテートの概要を知っているが、どのように設定するかの詳細を知らない人。

システム構成

  • OS:CentOS 6.7
  • 言語:php5.6
  • RDB:Mysql

ログローテートとは何か

Log: (実験・業務などの)記録
Rotate:回転する、循環する、自転する、交替する
→記録を循環させるソフトウエア。

ログローテートの目的

ログを定期的に削除することで、ログの肥大化を防ぐことです。

#ログローテートの種類

  • アプリケーション側でのローテーション設定
  • OS側のローテション
    大まかに上記の2種類あります。
    今回は、後者を解説していきます。

ログの種類

サーバで稼動している各種ソフトウエアは、各種ログを出力しています。

  • Linuxシステムログ(syslog)
  • ミドルウエアログ(access.log, mysqld.log 等)
  • ソフトウエアログ(access.log, error.log 等)

ログ出力の注意点

MW全部のログを1つにまとめるのはやめましょう。
Elasticsearchなどでログ解析しようとしたとき、構文解析やデータ加工のための手間が必要なります。

ログローテションされないとどうなる?

→サーバのディスク領域を使いきり、ログが書き込めないことでサーバが機能停止する恐れがあります。

ログローテートするには

ログローテートソフトウエア「logrotate」 を使おう!
最近のLinuxではデフォルトで導入されている非常にメジャーなソフトウエア。
もし、ない場合はyumやaptなどのツールで導入しましょう。

設定してみよう

/etc/logrotate.d/ 配下に、ソフトウエアや機能単位で設定ファイルを配置する形式がメジャーです。

ファイル名例

/etc/logrotate.d/apache
/etc/logrotate.d/nginx
/etc/logrotate.d/php-web
/etc/logrotate.d/php-api

apacheの記載例

cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

設定できる項目

項目名 内容詳細
missingok 指定のログファイルがなくても処理続行
notifempty ログファイルが空ならスキップ
delaycompress ローテーション1世代目は圧縮しない
daily or weekly or monthly or yearly  指定した周期で実行
rotate [回数] ローテーションする回数を指定
size [ファイルサイズ] ログファイルが指定したファイルサイズ以上になったらローテーションする
postrotate~endscript 記述されたコマンドをログローテーション後に実行
compress ローテーションしたログをgzipで圧縮

注意点

実行権限

logrotateは、root権限で実行することがあります。
そのため、postrotate等でファイル削除コマンドやscriptを実行する場合には必ず検証環境で動作確認してください。
不適切なスクリプトがroot権限で実行された場合、最悪システムファイルが破損し、サーバがダウンします

ログ保管

ローテーションの性質上、古いログファイルは削除されていきます。
長期的に保管して、分析したい要件がある場合は、保管方式や転送方式を検討、設計しましょう

81
71
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
81
71