2019年06月28日
システムログを整理する Logrotate プラグインをご紹介します。
管理画面のシステムログを別の場所に保存し、データベース上からは削除する Logrotate プラグインをご紹介します。
管理画面のシステムログには操作内容などが日々追記されていきます。内容を一部挙げますと、記事の公開、アップグレードの履歴、タスク実行記録、ログイン記録などがあり、残しておきたいデータではありますが、増えすぎると表示に時間が掛かるようになります。
管理画面上でクリアする機能はありますが、この機能では全てのログが消えるため、直前のログは残しておく、といったことはできません。
Logrotate プラグイン
システムログを定期的に整理するためのプラグインが Logrotate プラグインです。
インストール
Logrotate プラグインはオプションプラグインのため、別途インストールが必要です。
- ダウンロードされたパッケージ内の
options/plugins/Logrotate
を$MT_DIR/plugins
以下へ配置 - ダウンロードされたパッケージ内の
options/tools/mt-logrotate
を$MT_DIR/tools
以下へ配置
システムのプラグイン一覧に「Logrotate」が表示されていればインストールは完了です。
※ 「$MT_DIR」は PowerCMS がインストールされているディレクトリーのパスに読み替えてください
※ Logrotate プラグインは PowerCMS の全エディションに同梱されています
プラグイン設定
プラグインの設定項目は 3つあります。
圧縮 | チェックした場合はログファイルが ZIP 圧縮されます。チェックしない場合は CSV で保存します。 初期値はチェックなし |
---|---|
日数経過したログを保存 | スクリプト実行時点から何日前のログを整理する対象とするかを設定します。言い換えると何日分のログは管理画面に残しておきたいか、です。 初期値は 7 |
世代分のログを保存する | ログファイルを何世代分残しておくかを設定します(ファイル数は「世代数 + 1」となります)。 初期値は 5 |
ログの保存先
$MT_DIR/powercms_files/logrotate
に保存されます。
powercms_files ディレクトリーは環境変数「PowerCMSFilesDir」で設定できますので、 設定されている場合は、読み替えてください。
ログ整理の実行
Logrotate プラグインは、管理画面から必要な設定を行うためのものであり、これをインストールしただけでは何もしません。実際にログを整理するためには、「mt-logrotate」コマンドを実行する必要があります。
$ cd $MT_DIR && /usr/bin/perl tools/mt-logrotate
「mt-logrotate」に限らないのですが tools ディレクトリー内のツールを実行するときは、tools ディレクトリーではなく、$MT_DIR の中で行ってください。
定期実行前に考えること
設定が完了したら、すぐに実行したいところですが、Logrotate プラグインには 2つ考慮しておくことがあります。
- ひとつは、初回実行時は大量のログが整理の対象になりやすいこと。
- もうひとつは、実行周期をどうするかです。
まずは、使い方の詳細説明を兼ねて、初回実行を行います。
1年以上経過したログはまとめて整理
圧縮 | 任意 |
---|---|
日数経過したログを保存 | 365 |
世代分のログを保存する | 初期値 5 |
これで 365 が経過したログは整理される対象になります。プラグイン設定を保存したら、mt-logrotate を実行します。
$ cd $MT_DIR && /usr/bin/perl tools/mt-logrotate
実行後に $MT_DIR/powercms_files/logrotate
の中に「systemlog.csv (zip)」ができていれば完了です。
なお、CSV に記録される内容は、データベースに保存しているものは全部入っています。
一年分でも時間が掛かりすぎる場合は、「日数経過したログを保存」設定で経過日数をより過去にして、1回分のデータ量を調整してください。検証環境で1年分取ってみたところ 3分ほど時間がかかり、未圧縮の CSV ファイルは 13.3 メガバイトになりました (小声)。
実行間隔について
経過日数を設定するという性質上、月ごとに整理する場合は注意が必要です。
毎月 28日の 0時に 27日経過したログを整理すれば、おおむねひと月ごとに整理されます。
整理されるログは、実行した日の先月末から過去の分で、実行した月のログはそのまま残ります。
28日になるまでは先月分が残っていても運用上問題がないか、実行前に確認しておくと良いでしょう。
圧縮 | 任意 |
---|---|
日数経過したログを保存 | 27 |
世代分のログを保存する | 12 とすれば1年保存 |
タスク登録について
月が替わったらあるいは週が変わったら、手動で mt-logrotate を実行しても良いのですが、cron やタスクスケジューラに登録して自動化しておくと良いでしょう。
- cron.d で毎月 2日の 0時に実行する例
0 0 2 * * ウェブサーバーユーザー cd $MT_DIR && /usr/bin/perl tools/mt-logrotate
- cron.d で週に 1回 (月曜日) 0時に実行する例
0 0 * * 1 ウェブサーバーユーザー cd $MT_DIR && /usr/bin/perl tools/mt-logrotate
※ ウェブサーバーユーザーは apache や www など、環境に合わせてください
「世代分のログを保存する」について
ここまでで、ログの保存については完了です。最後にログの世代について説明します。
最初に実行したときに $MT_DIR/powercms_files/logrotate
に「systemlog.csv」ができたのを確認しました。続けて実行すると「systemlog.csv」と「systemlog_1.csv」というファイルができます。
- 最新のバックアップは常に「systemlog.csv」です
- 最古のファイルは「_ アンダースコア」の後の数字が一番大きいファイルです
このように、「世代分のログを保存する」で設定した数字になるまでは、ファイル名を変更して保存していきます。
例として、「世代分のログを保存する」が 5 となっている場合は「systemlog_5.csv」が最古のファイルです。「systemlog_5.csv」まである状態で tools/mt-logrotate を実行しても「systemlog_6.csv」はできません。「systemlog_4.csv」だったファイルが「systemlog_5.csv」にリネームされて、「systemlog_5.csv」だったファイルは削除されます。
Logrotate プラグインの解説は以上です。設定が少ないのですが使い方に癖がありますので、ご利用の際には期間と容量にご注意ください。
- カテゴリー
- プラグイン
コメントを投稿する