PowerCMS™

[セミナー情報]【東京開催】PowerCMS X 1.1 リリース説明会を行います。

PowerCMS ブログ

ホーム > PowerCMS ブログ > システムログを整理する Logrotate プラグインをご紹介します。

2019年06月28日

システムログを整理する Logrotate プラグインをご紹介します。

管理画面のシステムログを別の場所に保存して、データベース上からは消す、Logrotate プラグインをご紹介します。

管理画面のシステムログには操作内容などが日々追記されていきます。
内容を一部挙げますと、記事の公開、アップグレードの履歴、タスク実行記録、ログイン記録などがあります。

残しておきたいデータではありますが、増えすぎると表示に時間が掛かるようになります。
削除する機能はありますが、一括で全てのログが消えるため直前のログは残しておく、といったことはできません。

Logrotate プラグイン

システムログを定期的に整理するためのプラグインが Logrotate プラグインです。

インストール

Logrotate プラグインはオプションプラグインのため、別途インストールが必要です。

  1. ダウンロードされたパッケージ内の「options/plugins」フォルダーにある「Logrotate」を $MT_DIR/plugins へ配置
  2. ダウンロードされたパッケージ内の「options/tools」フォルダーにある「mt-logrotate」を $MT_DIR/tools へ配置

システムのプラグイン一覧に「Logrotate」が表示されていればインストールは完了です。

※ $MT_DIR は PowerCMS をインストールされたディレクトリー
※ Logrotate プラグインは PowerCMS の全エディションに同梱しています

プラグイン設定

Logrotate プラグイン設定

プラグインの設定項目は 3つあります。

圧縮チェックした場合はログファイルが ZIP 圧縮されます。チェックしない場合は CSV で保存します。 初期値はチェックなし
日数経過したログを保存スクリプト実行時点から何日前のログを整理する対象とするかを設定します。言い換えると何日分のログは管理画面に残しておきたいか、です。 初期値は 7
世代分のログを保存するログファイルを何世代分残しておくかを設定します(ファイル数は「世代数 + 1」となります)。 初期値は 5

ログの保存先

$MT_DIR/powercms_files/logrotate に保存されます。

powercms_files ディレクトリーは環境変数「PowerCMSFilesDir」で設定できますので、 設定されている場合は、読み替えてください。

PowerCMSFilesDir
https://www.powercms.jp/products/document/config-directives/powercmsfilesdir.html

ログ整理の実行

Logrotate プラグインは置いただけでは何もしません。
ログを整理するためには、「mt-logrotate」コマンドで実行する必要があります。

$ cd $MT_DIR && /usr/bin/perl tools/mt-logrotate

「mt-logrotate」に限らないのですが tools ディレクトリー内のツールを実行するときは、tools ディレクトリーではなく、mt ディレクトリーの中で行ってください。

定期実行前に考えること

設定が完了したら、すぐに実行したいところですが、Logrotate プラグインには 2つ考慮しておくことがあります。

ひとつは、初回実行時は大量のログが整理の対象になりやすいこと。
もうひとつは、実行周期をどうするかです。

まずは、使い方の詳細説明を兼ねて、初回実行を行います。

1年以上経過したログはまとめて整理
プラグイン設定
圧縮任意
日数経過したログを保存365
世代分のログを保存する初期値 5

これで 365 が経過したログは整理される対象になります。プラグイン設定を保存したら、tools/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年保存

タスク登録について

月が替わったらあるいは週が変わったら、手動で tools/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 プラグインの解説は以上です。設定が少ないのですが使い方に癖がありますので、ご利用の際には期間と容量にご注意ください。


カテゴリー
プラグイン

Recent Entries