はじめに
業務にて、rsyslogの一部ログが欠落していることで全て表示するよう設定変更した。
その結果、対象のサーバでログが肥大化しストレージの容量を圧迫していた。
ログローテーションの設定の見直しを行ったので対応内容を記載します。
ログファイルの中で⚪️G以上の容量のファイルを確認
ls -lh /var/log | grep G
容量が大きいファイルのtop5を表示
du -shc -BG /var/log/* | sort -rn | head -n 5
Logrotateの設定
Logrotateは、Linuxシステムで広く使用されているログファイルの管理ツールです。
サーバーやシステムが生成するログファイルは、時間の経過とともに大きくなり、ディスクスペースを圧迫することがあります。
Logrotateは、これらのログファイルを自動的にローテート、圧縮、削除、またはアーカイブすることで、ディスクスペースを効率的に使用できます。
OSやサービスの再起動は不要。
Logrotateの設定は、主に/etc/logrotate.confと/etc/logrotate.d/ディレクトリ内のファイルで行われます。
現在の設定内容(***はログファイル名)
cat /etc/logrotate.d/***
/var/log/***.log
{
missingok ログが存在していなくても処理続行(エラーにしない)
daily 1日周期で実行
copytruncate 既存ログファイル名変更、複製して中身削除
rotate 7 ローテーションする回数
notifempty ファイルが空の場合はスキップする
}
設定変更
現在7世代管理されているため、この部分は変更せずに維持します。
7世代前のまま現行と1世代前以外は圧縮処理させるようにする。
下記の設定を追加。
compress
compressは単に古いログファイルを圧縮するためのオプションです。
compress
delaycompress
delaycompressはローテートの1世代目は圧縮されずにそのままにします。
※設定した環境ではCloudwatchAgentが***.logと***.log.1を参照しており、圧縮処理すると影響が出るので設定しています。
delaycompress
下記でCloudwatchAgentが参照しているか確認することができる。
/sbin/fuser -v /var/log/***.log
変更後の設定内容(***はログファイル名)
cat /etc/logrotate.d/***
/var/log/***.log
{
missingok
daily
copytruncate
rotate 7
compress ※追加
delaycompress ※追加
notifempty
}
※もし既存のファイルが圧縮されていない場合は事前に圧縮処理のみ必要になります。
今回の場合は、.log.2以降を圧縮しておく。
※.log.2以降を圧縮していなかったので、処理が実行されていませんでした。
ローテート結果のイメージ
変更前 | 変更後 |
---|---|
***.log | ***.log.1 |
***.log.1 | ***.log.2.gz |
***.log.2.gz | ***.log.3.gz |
***.log.3.gz | ***.log.4.gz |
***.log.4.gz | ***.log.5.gz |
***.log.5.gz | ***.log.6.gz |
***.log.6.gz | ***.log.7.gz |
動作確認
設定変更を行ったので、事前に動作を確認します。
/var/lib/logrotate.statusを編集する必要があれば修正します。
Logrotateツールによって使用される状態ファイルで、
このファイルには、logrotateが各ログファイルを最後にローテートした日時が記録されています。この情報を使用して、logrotateはログファイルをどのように処理するかを判断します。
特定のログファイルのパスと、そのファイルが最後にローテートされた日時(年-月-日-時:分:秒)が記載されています。
※テストする際の日付と同様だとローテートされないので検証できない。
ファイルの中身確認
cat /var/lib/logrotate.status | grep ***
"/var/log/***" 2024-1-28-6:25:1
動作検証
設定ファイルの内容に基づいて、logrotateの動作をシミュレートします。
このコマンドは実際にはログファイルをローテートしませんが、logrotateがどのように実行されるかを示す出力を提供します。これは、設定をテストしたり、問題を診断する際に役立ちます。
sudo logrotate -dv /etc/logrotate.conf
sudo logrotate -dv /etc/logrotate.d/***
検証で設定内容が問題なければ、定期実行されていると思いますので、翌日に実行内容の確認を実施する。
結果と反省
上記の設定変更を行った結果、私が直面していたログファイルによるディスク容量の逼迫という問題が解決しました。
Logrotateの適切な設定により、ログファイルのサイズが管理され、システムのパフォーマンスと安定性が向上しました。
この経験から学んだことは、システムの監視と継続的なメンテナンスの重要性です。
ログファイルの肥大化は徐々に発生するため、定期的なチェックと適切な管理が必要です。
また、Logrotateのようなツールを利用する際には、その設定を理解し、環境に合わせて適切に調整することが不可欠です。
皆さんの環境でも同様の問題が発生した際に、この記事が参考になれば幸いです。
参考
https://qiita.com/zom/items/c72c7bac63462225971b
https://dacelo.space/linux/entry-1265.html