インフラ運用をしていて必ずと言っていいほど発生するのがディスクサイズの増加です。
サーバでは多数のアプリケーションが稼働し、これらは大凡以下のような情報をファイルに出力し続けます。
- ログ情報
- アプリケーション出力データ(レポート等)
- 中間ファイル
今回はこれらの中で特に増加を続けるログ情報(ログファイル)についてのローテートの仕組みと簡単な分析を行います。
ログファイルのローテート
ログファイルは通常アプリケーション実行履歴やユーザの行動履歴等が記録され、通常 1レコードずつ持続的に出力し続けられます。これはアプリケーションが稼働している限り止まることはなく、ローテートの仕組みが採られています。
ローテートは通常 (1) 指定ファイルサイズ(10Mbyte 等)を超えた場合や (2) 指定時刻(毎日 04:00 等)を超えた場合等を契機としてファイルをリネームすることで行われます。リネーム後は空のファイルを元の名前で残しておく為、アプリケーションは持続的に書き込みが可能です(ファイルディスクリプタを保持するロギングライブラリでは不可)。
また、リネーム後のファイルは指定数( 4つ等)を超えた場合、削除されます。リネーム後のファイル名は “xxxx.log.1”、“xxxx.log.2” 等後ろに連番がつけられる場合(logrotate 等)やアプリケーション側で実施している場合はよく日付が付けられていたりします。
Linux の場合では logrotate というコマンドがディストリビューションに付属していものも多く、デフォルトの状態で /var/log/ 配下に多数の “xxx.1”、“xxxx.2” ファイルが並びます。
増加し続けるディスクサイズ
ログファイルのローテート条件は既に記載しましたが(どのタイミングでローテートを行い、いくつファイルを残すか)、この設定値の調整はなかなか難しいものです。
これは通常アプリケーションを利用するユーザやデータ量が日々変化することに依存しています。http ベースのアプリケーションの場合、ユーザアクセス数ごとに http ログは増えてゆきます。
その為、これらの調整は 3ヶ月あるいは半年に一度位の周期で監視してゆく必要があります。これらログファイルのファイルサイズは日々の運用では増加分になかなか気づきにくいものですが、1ヶ月単位で差分を比較してみると増加しているということがあります。
データ量が落ち着くまでは何度か見ていく必要があるでしょう。