PHPとCRONで、XREAの生ログをすっきり!

新年あけましておめでとうございます。
ラボという名前を冠してるので、年始にラボらしいお年玉(笑)としてフリーのスクリプトを作りました。

ApacheLogViewerという生ログを分析できる秀逸なフリーソフトを利用していますが、生ログなだけに、gifやjpgなどの画像ファイルのログも表示してしまい、ページ遷移を確認するのには少し不便です。そこで、gifやjpg、cssなどのページ遷移の解析に不要なログを排除して保存するPHPスクリプトです。

slimLog (ver 1.82)

slimLog1.82.zip(last update:09/7/20)

動作環境

利用可能ホスティング先 XREACORESERVER
サーバー Apache
PHPバージョン 5.1.6
使用PEARライブラリ File_Archive、Mail、Mail_mime
ログ解析用フリーソフト ApacheLogViewer

設置方法(XREAの場合)

  1. setting.phpとlog.shに初期設定を行う。
  2. slimLog.php、setting.php、log.shの3ファイルを/virtual/ユーザーID/にアップロード。(パーミッションはいずれも初期の0644のままでOK)
  3. XREAのコントロールパネルを開き、左側の管理メニューからCRONジョブを選択。
  4. 空いている設定番号を選び、通常ログが作成される時間より遅い時間を設定。(作者の場合、7:00を指定。)
  5. その下の空欄に、起動するシェルを右の様に指定。log.sh >/dev/null 2>&1

/virtual/ユーザーID/logフォルダの下にbackupというフォルダが自動で作られ、そこにスリムになった日毎のログと、1週間ごと圧縮されたログがドメインごとに保存されます。(圧縮後は日毎のログは自動削除)

※初期ログの手動でのスリム化

slimlogを設置した日のログからスリム化を行うので、それ以前の数日間のログもスリム化したければ、手動で行う必要があります。
ログファイルの手動でのスリム化の記事を参考にしてください。

初期設定

基本の設定はlog.shは1カ所、setting.phpは数カ所です。(初期設定→太字

log.sh

パスを設定します。下記太字の部分をご自分のユーザーIDに変更してください。
/usr/local/bin/php /virtual/XXXXXX/slimLog.php

setting.php

$keyword
除外したいファイルの拡張子(初期設定".gif", ".jpeg", ".jpg", ".png", ".css", ".js")
(ホスト名での除外もできるようになりました。例:softbankXXXXXXXXXX.bbtec.net 等)
MAIL_SEND
メールを送信するかどうか(はい→TRUE、いいえ→FALSE
INIDOMAIN
xrea.comおよびcoreserver.jpの初期アドレスでアクセスされたログを処理するかどうか(する→TRUE、しない→FALSE
CHAR_CHANGE
ApacheLogViewerで日本語が正しく表示されるように文字コードをUTF-8からSJISに変換するか(する→TRUE、しない→FALSE)
NEWLINE_CHANGE
Windowsのメモ帳で読みやすいように改行コードを変更するかどうか(する→TRUE、しない→FALSE

メール送信機能を使う場合

1週間ごとにログファイルをメールで送信する機能を付けました。これ以降は、メール送信機能を利用する場合のみ設定します。

MAIL_FROM
送信元メールアドレス
MAIL_TO
送信先メールアドレス
MAIL_SUBJECT
ログ送信メールタイトル(初期設定:ログバックアップ)

「www.XXX.jp」 約61%スリム化 というようにスリム化率をメール本文でお知らせします。

フォルダ構成(XREA)

/virtual/userID [ルートディレクトリ]
┃ 
┣ public_html (HPページ用データフォルダ)
┣ Maildir (メール用データフォルダ)
┃ 
┣ log [ログフォルダ]
┃ ┃
┃ ┣ www.3re.jp.log   (最新ログファイル)
┃ ┣ www.3re.jp.1.log (前日ログファイル)
┃ ┃
┃ ┣ blog.3re.jp.log   (最新ログファイル)
┃ ┣ blog.3re.jp.1.log (前日ログファイル)
┃ ┃
┃ ┗ backup [自動生成スリムログフォルダ]
┃    ┃
┃    ┣ www.3re.jp200801.log.gz(第1週スリムログ圧縮)
┃    ┣ www.3re.jp_20080106.log(1/6スリムログ)
┃    ┣ www.3re.jp_20080107.log(1/7スリムログ)
┃    ┃
┃    ┣ blog.3re.jp200801.log.gz(第1週スリムログ圧縮)
┃    ┣ blog.3re.jp_20080106.log(1/6スリムログ)
┃    ┗ blog.3re.jp_20080107.log(1/7スリムログ)
┃
┣ log.sh (slimLog.php起動用シェルスクリプト)
┃
┣ setting.php (初期設定ファイル)
┃
┗ slimLog.php (本PHPコード)

ファイルの設置位置は下記の画像を参考にしてください。

アップロードパス

※セキュリティに配慮した著名なフリーソフト「WinSCP」でのアップロードを推奨します。

今後の予定

  1. 特になし。不具合・要望などありましたら検討しますので、下記のコメント欄にお願い致します。

改訂履歴

1.822009/07/20PEARライブラリのMail_Mimeクラスの使い方で、インスタンスを生成するときに改行コードの引数を指定した。※Special Thanks to こうの様
1.812008/09/23同じxreaでもサーバーによって保存されるログの文字コードが違う可能性があるので、文字コードの変換をUTF-8→Shift-JISではなく、auto→Sift-JISとした。※Special Thanks to げんごろう様
1.82008/09/21コードミス修正。メンテナンス性向上のため、初期設定ファイルをメインプログラムと分離。Windowsのメモ帳でも読める様に改行コードを変換するオプション追加。
1.712008/09/20文字コードのオプションと、除外キーワードなしの設定を追加。
1.72008/07/16メール送信時にスリム率を表示。CORESERVERでの動作確認。
1.62008/06/13ホスト名による除外対応。メール添付ファイルの圧縮形式変更。アクセス数が少ないURLのログの不具合修正。改行コードをLFに変更。※Special Thanks to KSP様
1.12008/01/12ソースコードを少しきれいに。
1.02008/01/10ドメイン自動設定機能
0.42008/01/09メール送信対応
0.32008/01/08gz圧縮対応
0.22008/01/06サブドメイン対応
0.12008/01/03初期リリース

カテゴリ:

| | コメント(32) | トラックバック(0)

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHPとCRONで、XREAの生ログをすっきり!

このブログ記事に対するトラックバックURL: http://www.3re.jp/mt3re/mt-tb.cgi/16

コメント(32)

かけ出しサンデープログラマー :

最近、xreaを使ってアフィリサイト等を勉強してます。
slimlogは、ちょうど、あったらいいなぁと思ってたプログラムだったので早速つかってみたいと思います。
公開ありがとうございます。

管理人 :

コメントありがとうございます。自分用に作っているので、使いにくいところもあるかと思います。

ご要望があればできる範囲で対応しますので、また感想など頂ければと思います。

彫 :

はじめまして。
昨日こちらのスクリプトを見つけて早速使用させて頂いたのですが、何故かログが作成される時間を数時間過ぎても、ディレクトリすら生成されませんでした…。時間は設置方法に記載されている5:00に設定し、他の設定の誤りも今のところ見つかりません。
とても理想に合ったスクリプトの為できれば使用させて頂きたいと思っておりますので、まずは時間の間隔を変更して試してみるつもりです。
何の参考にもならないコメントで申し訳御座いませんが、他に設置状況を書いていらっしゃる方が見当たらなかったので、とりあえずご報告だけさせて頂きます。もし設置できたらまたご連絡差し上げますね。
それでは用件のみですが失礼致します。

管理人 :

利用していただき、コメントありがとうございます。

コメント頂いたとおり、実行時間を5分後くらいにしてbackupフォルダができていなければ、エラーを確認したいので、シェルの指定を >/dev/null 2>&1 を取り除いたlog.shのみにしてみてください。確かエラーのメールが来るはずだったと思います。

説明などわかりにくい部分が多いので、今後画像など載せてわかりやすく変更したいと思います。コメントありがとうございました。

彫 :

お返事下さりありがとうございました。間隔を1時間にして試したところ、早速メールが届きましたので転載致します。

--------------------------
/virtual/****/log.sh: line 2:
: command not found
Status: 404 Not Found
Content-type: text/html

No input file specified.
/virtual/****/log.sh: line 6:
: command not found
/virtual/****/log.sh: line 7: exit
: command not found
--------------------------

****の部分はuserIDです。ファイルは説明通り「public_html」と同じ階層に設置したのですが…。スクリプトの事はさっぱりの為、こちらの勘違いや下らないミスでしたら申し訳ないです。何かご指摘等御座いましたら、お手数ですが宜しくお願い致します。

エラーを見る限り、スクリプトが見つからないと言うことのようです。

考えにくいですが、上部の管理人という文字のリンク先ページで話題の、文字コードの問題か、やはりファイル設置場所の問題ではないかと思います。

多少わかりやすいように、ファイル設置位置の画像を載せましたのでご確認下さい。

違ってたら困りました。。。

KSP(かけ出しサンデープログラマー) :

横ヤリですみませんが、動作報告を。
私の方では、毎日のログスリム化上手くいっております。紹介通りの設置方法です。
・PHP 5.2.5
・ファイルの文字コードは2つとも「shift_jis」「CR+LF」
・パーミッションは2つとも「644」
また、ファイルの所有者はユーザーIDのままで、logディレクトリの所有者もユーザーIDです。
logフォルダ内のlogファイルはroot所有者ですが、作成されたbackupディレクトリとその中のスリム、圧縮されたファイルの所有者はユーザーIDです。
(参考になるかどうか分かりませんが記載してみました)


あと、使ってみて思ったのですが、ドメイン(サブドメイン)1つ1つの圧縮が便利な場合もありますが、それぞれで圧縮せずに、複数をまとめて圧縮した方がダウンロードした後の解析が便利ではないかと感じてます。
圧縮ファイルのままApacheLogViewerで閲覧できなかったと思いますので(←違っていたら指摘下さい)複数ドメインあった場合に結構手間でした。
それと日毎にメールで送れるような設定もあると個人的には便利で助かるなぁ、と思っています。

現状でも、shift_jis変換が入っていたり、と、十分助かってますので、余力がありましたら叶えていただけると幸いです。

管理人 :

KSPさんへ

貴重なコメントありがとうございます。
大変うれしく思います。

また、ご要望はとても的を得ていると思います。
余力を出して改良したいと思いますので、気長にお待ち下さい。

どうぞよろしくお願いします。

keithr :

これ便利そうですね。5日を超えるXreaのログをどうやって保存するか悩んでいたので助かりました。使ってみて報告します。

管理人 :

keithr さんへ

コメントありがとうございます。現在、KSPさんご指摘の、ログファイルをまとめて圧縮し、メールに添付する改造をしているところです。

ほぼ完成して、自分の環境で実証中で、間もなくアップできると思います。

また、利用していただき、何かありましたらご連絡いただければと思います。

彫 :

ご無沙汰しております。大分間が空いてしまいましたが、先日再度挑戦してみましたところ無事ログの取得が出来ましたので、ご報告に参りました。

エラーの原因は、log.shの改行コードだったようです。XREAのCRONジョブのページの下部に記載されている通り、改行コードを「LF」にしたところ、きちんとファイルが生成されました。(ちなみに「CR+LF」では同じくエラーになってしまいました。)

お騒がせして申し訳御座いませんでした…。今までログの無駄に悩まされておりましたので、使用する事ができて大変嬉しいです。本当にありがとうございました。

管理人 :

ご利用いただきありがとうございます。

大変遅くなりましたが、ご希望のありました、メール添付ログのアーカイブ形式を変更しました。(PEARのFile_Archive利用)またご指摘のあった改行コードもLFに修正。その他、ホスト名での除外にも対応しました。(自分のアクセスなどをログに残さないようにしたい方には便利かと思います。)また、アクセスが極端に少ないURLでの不具合も修正しました。

以前のものをご利用で、1.6へ差し替える方は、念のためログをバックアップしていただくなどして慎重に行って頂くことをオススメします。

彫 さんへ
 動作確認ありがとうございます。改行コードのご指摘ありがとうございます。1.6ではしっかりLFにさせていただきました。

KSP :

バージョンアップ楽しみにしていました。
ありがとうござます。

ですが、zipファイルのリンクが切れているようです。(404がでてます)

のんびりお待ちしております。

管理人 :

KSP さん

大変に失礼しました。
修正しましたので、ご覧下さい。

今後、ログを添付するメールに、どの程度スリムにしたのかを、表示するように改良しようと思ってます。
これからもどうぞよろしくお願いします。

げんごろう :

はじめまして、私もこれを使ってみたくなりました。
でも私のはアクセスも少なく、何も除外したくなかったので
除外拡張子として、使われていない(.aaa)の1つだけ設定しました。
「何も除外しない」というスイッチが有れば嬉しいです。

これで実行してみましたら何故か原文と比べて短いのです。
良く調べてみると下記ダンプのように化けていました。

原版
22 68 74 74 70 3A 2F 2F - 6A 61 2E 77 69 6B 69 70
65 64 69 61 2E 6F 72 67 - 2F 77 69 6B 69 2F A5 C6
"http://ja.wikipedia.org/wiki/テ

backup版
22 68 74 74 70 3A 2F 2F - 6A 61 2E 77 69 6B 69 70
65 64 69 61 2E 6F 72 67 - 2F 77 69 6B 69 2F 3F 83
"http://ja.wikipedia.org/wiki/?

のようになり"テ"以降の日本語部分が短くなっていました。
どうも日本語で変換エラーが出ているのですが、何が原因か
全然わかりません。ご指導宜しくお願いします。
日本語以外では変換エラーは無いようです。

管理人 :

げんごろう さん

コメントありがとうございます。当スクリプトは、ApacheLogViewerで日本語が正しく表示できるように、文字コードをUTF-8からSJISに変換して保存しています。おっしゃるとおり、日本語以外の部分のコードは変わりないので、そのまま保存されます。

せっかくコメントいただきましたので、変換や除外なしでそのまま保存するオプションを作ろうと思います。

しばらくお待ち下さい。

管理人 :

げんごろう さん

文字コードを変換しないオプションを追加しましたが、既に変換してしまったその週のログは直りませんのであしからず。1週間分のログを結合する日曜日の朝以降に置き換えていただくことをおすすめします。

また、除外キーワードなしの場合は、ダミーを入れなくても良いように、$keyword = array();で動作するようにしました。

げんごろう :

早速有難う御座います。
日本語はコード変換されているんですね。
slimLog1.71.zip をDLしましたのでこれから入れてみます。

げんごろう :

おはようございます。頂きました slimLog1.71 をDLし、昨夜設定して
今朝 05:00にcronを自動実行させたのですが、何故かbackupフォルダーが
作成されません。前のv1.7は動くことは確認していました。
ちなみにlog.shはv1.7で動いたままのもので、slimLog.phpは下記のように
「何も除外しない、変換もしない」に設定しています。
もしかすると「日曜日の朝」以後にしかbackupフォルダは作成されない
のでしょうか?

// 除外する必要がなければ右の様に空欄にして下さい。例 $keyword = array();
// $keyword = array(".gif", ".jpeg", ".jpg", ".png", ".css", ".js");
$keyword = array();
// メールを送信するかどうか(はい→TRUE、いいえ→FALSE)
define("MAIL_SEND", FALSE);
// xrea.comおよびcoreserver.jpの初期アドレスでアクセスされたログを処理するか
//(する→TRUE、しない→FALSE)
define("INIDOMAIN", FALSE);
// ApacheLogViewerで日本語が正しく表示されるように文字コードを
// UTF-8からSJISに変換するか(する→TRUE、しない→FALSE)
define("CHAR_CHANGE", FALSE);

管理人 :

いつもありがとうございます。

私の方でも調べてみたところ、サーバー側の生ログの作成時間が原因かも知れません。私の環境では、6時すぎにログが出来ておりました。今までは、おおむね4時前後だったのですが、今週に限っていろいろと時間がぶれているようです。

まずは、げんごろうさんの環境の生ログの作成時間がcronの実行時間の前なのか確認をお願いします。

私の方ではcronの実行時間を変更したいと思います。
貴重な情報ありがとうございました。

P.S. 
 CHAR_CHANGEオプションのTRUEの動作の検証にもう少し時間をかけたいので、ファイルのダウンロードを一時中断します。

管理人 :

げんごろうさん

申し訳ありません。ログ生成時間の他に、単純なコードミス({の一カ所抜け)もありました。

自分の環境での確認では、初期設定が違うので、コピペしながら差し替えしてましたが、ミスの原因になるので、初期設定ファイルを別にしました。

ちょっと大きく変えたので、バージョンをあげて再公開しました。まだご利用していただける場合は、お手数ですが差し替えをお願いします。

またWindowsのメモ帳でコードが見やすいようにphpファイルの改行コードを変更しました。(※shファイルはLFのまま)秀丸エディタを使っているので気づきませんでしたが、メモ帳だとほぼ設定不能です。

この度はご指摘をいろいろとありがとうございました。

げんごろう :

せっかくのお休みなのに有難う御座います。
当方のテキストエディタはTerapadを使用しています。

頂きましたv1.8を設定?cron実行させましたら、正常にbackupフォルダが出来、
原版logとbakupフォルダ内のlogとも一致して動作試験OKとなりました。
ちなみに私の設定は「何も除外しない、変換もしない」の設定にしています。

あと、少し気になっていますが、当方のXreaサーバーの原版logの漢字コードはEUCのようです。
Xreraでもサーバーによって原版logの漢字コードが違うのかどうか私には解らないのですが。

それから、このスクリプトは、1週間たっても、数ヶ月たってもサーバー容量の許す限り、
ほったらかしておいても良いものでしょうか? 1ヶ月に1回FTPでデータを取り出そうと思っています。

今後とも宜しくお願いいたします。有難う御座いました。

管理人 :

いつも情報をありがとうございます。

文字コードについて調べてみました。当方の環境もサーバーの設定自体は、phpのmb_internal_encoding()でEUC-JPだということは確認していました。しかし生ログはUTF-8なので、そういう設定にしてあるのだろうと思ってました。
いろいろ検索してみると、XREA&CORE SUPPORT BOARDに書き込みを見つけました。
http://sb.xrea.com/showthread.php?p=41341

この書き込みによると、生のアクセスログはShift-JISで統一するように書いてあります。

さらに詳細に自分の生ログを調べたところ、Referに日本語が含まれない日はShift-JISで保存されていました。自分の使っている幾つかのxrea、CoreServerでも同様でした。検索エンジンからの日本語キーワードはUTF-8で飛んでくるのでしょうか?

げんごろうさんの環境はEUCの生ログということで、正直よくわかりません。当方の環境でのみ確認したスクリプトなので、他の環境の方の情報が聞けて助かりました。

また、サーバーの容量ですが、おそらく大丈夫だと思います。当方は今年の1月からためっぱなしです。

げんごろう :

こんばんは。
再度漢字コードを調べてみました。ちなみに当方のサーバーはかなり古いS20番代とS40番代です。
google,Yahoo,wikipedia.msn,nifty からReferに日本語を含んでいるデータは、原版logで日本語はやはりEUCコードになっています。
2種類のFTPでDLしていますがやはりEUCです。なお生ログなどバイナリモードでDLしています。

次のXREA&CORE SUPPORT BOARD では生logはEUCと書かれている所もありました。
http://sb.xrea.com/archive/index.php/t-9887.html
管理人さんのlog取得FTPソフトで、ASCIIファイルはUTF-8に自動変換されている、という事は無いでしょうか?

管理人 :

げんごろうさん

当方の勝手な推測は違っていたようです(涙)

私はログの取得にはWinSCPというソフトを使っておりますが、漢字コードの変換のオプションは見あたりませんでした。しかし、.logの拡張子は自動モードでバイナリで落としていたようで、テキストモードに切り替えてみましたが、変化なし。FFFTPでも試しましたが、変わらず。変化がないと、がっくりきますね(笑)

ログの文字コードの謎の解決には至りませんでしたが、スクリプト的には、UTF-8と決めうちしてたところを修正したいと思います。

具体的には、コード変換の関数、mb_convert_encodingの指定で、UTF-8→Sift-JISではなく、auto→Sift-JISに変更してUTF-8以外のログもSift-JISにできるようにして、1.81としようと思います。

サーバーの違いの可能性大ですが、また何か情報がわかりましたら、教えていただければと思います。どうぞよろしくお願いします。

げんごろう :

こんばんは管理人さん。
slimLogを使い始めて1週間経ち、初めての圧縮が行われたようです。gzファイルが出来ていました。gzファイルを解凍して、日々のlogが正常に連結された1つのTEXTファイルも取り出せました。

私はまだv1.8のままですが、漢字コードで何かわかりましたらまた書き込みしたいと思います。

こうの :

こんばんは。今まではログをほったらかしにしていたのですが、新しく作ったWebページでログを見る必要があり、このツールにたどり着きました。良いツールの公開、ありがとうございます。
メールでログを送るとき私のal-mailでは添付ファイルを開けないので、調べたら、添付部分の改行コードが0D 0D 0Aになっていました。(al-mailが何かしているのかも知れず、このとおりで送られてきているかどうかはわかりませんが)

myMailLogAttach()の中の、Mail_mimeを作る
$o_mime= new Mail_mime();

$crlf="\n";
$o_mime= new Mail_mime($crlf);
にしたら改行コードが変化して、al-mailでも正常に受けられるようになりました。
他のメーラーで試していないので、スクリプトの問題かはわかりませんが、とりあえずご報告まで。

げんごろう :

久しぶりにまいりました。当初はお世話になりました。

まずは現状説明から
これまでcoreserver-mini上で、slimLog v1.80でcron起動を05:10に設定して動かしておりました。
このたびcore-miniからcores-Aに移動することになりました。
その際、久々にslimlogのbackupフォルダを見ましたら2010年4月頃からxxx.gzファイルが殆ど
作成されていないのに気づきました。
調べますと、生ログ自体の生成時間がかなり遅くなっており、朝5時頃から遅くは15時頃まで有ります。
たぶんcore-miniサーバーに、多数の方が移って来たのが原因ではなかろうかと思っています。

ここからが本題ですが
cron起動を、朝06:15と昼16:15などのように1日に2回動かしてもslimlogは問題は無いでしょうか?
slimlogがcronで起動した時に、生ログが作成されていない場合には、slimlogはどのような動きをするのでしょうか?

зЊ? I bought the cat didn't know what to call him. Found here full list http://allcatsnames.com/male-cat-names of names for cats.




AaronzVepay :

viagra coupon free trial current activity
[url=http://viagra-withoutdoctorsprescriptions.org]viagra without a doctor prescription usa
[/url] where to buy viagra fast delivery
viagra without prescription
- viagra generics recent message
viagra 20mg online registered users

Jazonnaf :

yohimbe viagra
[url=http://viagra-withoutdoctorprescriptions.org]viagra no prescription
[/url] viagra uk retailers
viagra without doctor prescription
- viagra generics log in
vente viagra

ekulikov :

С этим я полностью согласен!

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、サンレシステムが2008年1月 3日 11:53に書いたブログ記事です。

ひとつ前のブログ記事は「clearfix」です。

次のブログ記事は「PHP環境設定覚書(Pleiades、xampp、php.ini)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.22-ja