アクセス・カウンターのログ破壊時の復旧方法

アクセス・カウンターのログが破壊されることがあります。症状としては、サイト上にアクセス・カウンターの数値が表示されず、代わりに画像がないことを示すものが表示されます。

アクセス・カウンターのログが破壊される原因ですが、アクセス・カウンターのプログラムは、アクセスがあった際に一度ログを空の状態にして書き込みを行うため、そのプロセスの途中で中断されるなどの異常事態が発生すると、空の状態のままで終わってしまい、結果として、ログが破壊されるということのようです。私は、この件に関して、あまり詳しくはないので、あくまでもそう言う話があるということでご理解下さい。これに対抗する手段として、ファイルをロックすると言う方法があるようですが、完璧に防止することは難しいようです。

この現象が起きるのは、大抵、特定のサーバー会社なので、そのサーバー会社をやめて、別のサーバー会社に引っ越すのが根本的な解決策になります。

今まで個人的にこのような現象を経験したことがあるのは、デジロックのサーバーとScalaHostingのサーバーだけです。ただ、デジロックのサーバーでは、最近、起きていません。ScalaHostingでは昔からずっと起き続けています。

恐らく、これらのサーバー会社のサーバーでは、サーバーへ一時的に大きな負荷がかかった際に、それに対処できないのでしょう。

最近は、PHPがサーバーにあまり負荷をかけないと言うことで、PHPのアクセス・カウンターを多用していますが、それでもこういう事は起きます。

私が使っているPHPのアクセス・カウンターは、Bliss Counterです。昔は、PHPアクセス・カウンターと言えば、これぐらいしかなかったのですが、最近は他にもいろいろ配布されているようです。もしかしたら、他のアクセス・カウンターではこんな面倒な事態は起きないかもしれません。

Perlのアクセス・カウンターでの話ですが、ログが壊れた場合は、直近のバックアップから自動的に復元して修復する機能を備えたアクセス・カウンターを作ったと言う話もありますので、やろうと思えばいろいろあるかもしれません。

さて、今回は、このBliss Counterのログが壊れた場合の復旧方法をメモしておくのが目的です。似たような仕組みのアクセス・カウンターなら、Perlのアクセス・カウンターでも同様な方法で復旧できると思います。

なお、破壊直前のバックアップがない限り、元通りには戻りません。

ログ破損の確認

ログ破損の確認方法ですが、大抵壊れているのは、dayディレクトリーにある当月のログですので、そのサイズを確認します。通常は1Kbですが、これが0になっていますので、中身が空になっていることがわかります。

アクセス・カウンターログ復旧手順

1)まず、カウンターのログファイルをできるだけ全部ローカルにダウンロードします。面倒な場合、ダウンロードするのは最低でも当月と前月、及び、当年と前年のログファイルです。これは、いざというときのためのバックアップです。大抵、必要になりますので、必ず、バックアップを取っておきましょう。

Blissカウンターのログファイル

bliss.log

day/2019-02.log ※2019年2月のログの場合

month/2019.log ※2019年のログの場合

2)ローカルに編集用のディレクトリーを作り、そこに再度カウンターのログファイルをダウンロードします。これも最低でも当月と前月、及び、当年と前年のログファイルをダウンロードします。

3)dayディレクトリーにある当月のログが空になっている場合、前月のログを当月のファイル名で保存し直します。つまり、生きているファイルを空になったファイルにしてしまいます。もちろん、バックアップがあれば、それを戻すだけですが、それがないので、こうするわけです。

4)このファイルをテキスト・エディターで開いて、中身の日付をその月の日付に変更します。例えば・・・

01/02 (Wed)<>1<>1<>

を下記のように変えます。

02/02 (Sat)<>1<>1<>

月を変えるだけでなく、曜日も変えます。存在しない日は消します。例えば、当月が30日までの月であれば、31日の行を丸ごと消す必要があります。

編集するのは前日までです。当日の分は空欄です。また前日の分はbliss.logの数値を入れます。当日分の数値を入れると、二重に記録される結果になります。

最後は1行だけ何もない行を残します。エディターでは「←」だけになります。つまり最後の行はこの「←」になります。もしこれと最後のデータ行の間に何もない「↓」があると、データの記録が1行飛んでしまいます。これが最大の注意点です。

5)monthディレクトリーのデータも消えていた場合も同様に編集します。消えた月のデータはdayディレクトリーのデータを足し算し、平均値についてはその月の全日数で割り算して書き込みます。書き込むのはdayの方のアップロード予定の数値までです。

6)dayとmonthのディレクトリーのログファイルをアップロードする。

7)サイトにアクセスして、アクセス・カウンターが動作しているかどうかを確認する。動作していれば、問題ありません。念のため、ログファイルを再度ローカルにダウンロードして、中身を確認します。

カテゴリーPHP