• 締切済み

【Perlでaccess.logの解析をしたいです】

自分のホームページに訪れる人は、 どんな検索ワードなのか知りたくて、 access.logの解析スクリプトをperlで作成しようと思っています。 そこで何点かご教授いただきたい事があります。 1.apacheのログフォーマット   標準の状態では私の行いたいことができないと思うのですが、   以下の指定で行えるようになるでしょうか?     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 2.文字列の分割   例えばGoogleの場合、「q=」以降が検索ワードだと思いますので、   そこから単語を分割したいのですが良い方法がわかりません。   以下のように単語の区切りに全角と半角のスペースが混在している場合、   スマートに処理するにはどうしたらよいのでしょうか?      よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

質問のご様子では、この方面に関して余りお詳しくないようですね。 自分で作成するのも結構ですが、既に先達によって多くの解析ソフトが作成されていますから、それらを参考にされてからにしてはどうでしょう。 私は、AWSTATを薦めます。 Perlで書かれていますから、これを改造するほうが近道です。自分だけで使うなら何の問題もないでしょう。

mac_mini
質問者

お礼

ご回答ありがとうございます。 AWSTAの存在は知っていましたが、 そこまで高機能なものですとperlの知識がないため、 何処を参考にして良いかわかりませんでした。 (正規表現が難しいです) ちなみに1の件に付いては、解決しました。 apacheのログでgoogleの「p=」というキーワードが出力されたので、 半角&全角スペースの問題がクリアできれば何とかできそうです。 どうかアドバイスをお願いいたします。

関連するQ&A

  • Apache/2.0.54 (Debian GNU/Linux)でローカルホストからのアクセスを記録しない設定

    お世話になります。当方玄箱でDebian3.1(Sarge)でApache/2.0.54 (Debian GNU/Linux) 使用中です。 特定のローカルホストからのアクセスと画像ファイルへのアクセスを記録しない設定をするべく。 /etc/apache/apache2.conf # The following directives define some format nicknames for use with # a CustomLog directive (see below). LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog /var/log/apache2/access.log combined env=!no_log SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)" no_log SetEnvIf Remote_Addr 127.0.0.1 no_log SetEnvIf Remote_Addr 192.168.1. no_lo ↑の4行を追加し /etc/init.d/apache2 restart してローカルからHP覗きaccess.logを確認するとしっかりlogを取っています。 どうすれば設定が有効になるのでしょうか?

  • apacheとawstats連携

    こんばんは。 Webサーバを構築中にIPアドレスの変更の必要が出てしまい、 変更したところ、awstatsによるアクセス状況の更新されな くなりました。 「更新されない」とは、「http://ホスト名/awstats.pl」を 実行し、下記の個所2点を見て判断しました。  ・更新日付が、IP変更前と変わらない  ・アクセスログが、IPアドレス変更以降カウントされていない 色々調べたところ、apacheのアクセスログに「combined」 だけが大量に出力されていました。 #cat /var/log/httpd/access_log combined combined combined   : ログ関係の設定を見てみましたが、導入時に変更したままでした。 #cat /etc/httpd/conf/httpd.conf ServerName web01  : LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent  : CustomLog logs/access_log combined  : #cat /etc/httpd/conf/httpd.conf  : LogFormat=1 LogSeparator=" " SiteDomain="web01" HostAliases="localhost 127.0.0.1" DNSLookup=1  : 環境は、以下の通りです。 OS :CentOS release 5.7 (Final) http:apache2.2.3 php :php5.3 awstats:7.0 awstatsは初めての利用でしたので、IPアドレスの変更で影響が大きいとは 予想もしておらず、サイトを見ても似たようなサイトが見つからず困って しまいました。 「awstats.pl」は、色々なサイトを見て、「"YYYY年MM月"の日付の調整」等 「やっておくべき事項」は、対応しています。 解決策や再調査事項等のアドバイスをお願いします。

  • Apacheのaccess.logについて

    Windows版のApacheを使ってサーバを立ち上げています。 access.logの情報を利用したいんですが、どうやらうまくログを取れていないようです。 例えば、11月26日のアクセスログを見たいのに、access.logを開いて見たら11月7日のデータしかないんです。 httpd.confでは、次のように設定しています。 LogFormat "%T %h %l %u %t \"%r\" %>s %b \"%{Referer}i\ \"%{User-Agent}i\"" combined LogFormat "%T %h %l %u %t \"%r\" %>s %b" common CustomLog log/access.log common Apacheがログを記録するのは随時ではありませんか? Linuxなら、cronとか使えばいいんですが、Windowsでは、どうすれば、当日のログを取れるんですか? よろしくお願いします。

  • アクセスログの解析スクリプト

    アクセスログの解析スクリプト Googleからの訪問者の検索ワード集計を行いたいと思っております。 本当はperlで書きたかったのですが、 全く知識がないためphpにしました。 それに正規表現について全くわかっていませんが、 以下までは何とか辿り着く事が出来ました。 <?php $fp_in = fopen("./access_log", "r"); $fp_out = fopen("./out.log", "a"); $pattern = "http:\/\/www\.google\.co(.*)\/search\?(.*)$". "(/[-.!~*\d\w;/?:@&=+$,%#]+)?"; while (!feof($fp_in)) {   $data = fgets($fp_in, 65536);   if (ereg ( $pattern, $data, $url )) {     $ary = split('&', $url[2]);     foreach ($ary as $value) {       if (strstr ($value, 'q')) {         if (!fwrite($fp_out, $value)) {           print "Cannot write to file ($filename)";           exit;         }       }     }   } } fclose($fp_in); fclose($fp_out); ?> 「q」で始まる配列をout.logに出力しております。 ここから文字列を分割して行こうと思っているのですが、 検索ワードは半角・全角スペースが混在しているため、 どのようにしたら良いかつまずきました。 手詰まり状態&もっと効率的なロジックがあると思っています。 どうかアドバイスをお願いいたします。

    • 締切済み
    • PHP
  • apache2のログの分け方について

    自宅サーバーでBBSのCGIを動かしています。 VineLinux3.2+Apache2 長すぎるリクエストのログを残さないように LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined とhttpd.confに記入してうまく機能しています。 そのほかに不正なアクセス(主に海外から)をドメインやIPアドレスで 制限しているのですが、ログに403エラーがたくさん残ってしまいます。 上記の方法で"414"の部分を"403"に書き換えても機能せず 大量のログが残ってしまいます。 ログを残さないようにするために何か良い方法はないでしょうか?

  • Apacheのログの種類(WebTrendsによる解析)

    こんにちは。 とあるサイトのログ解析をWebTrendsで行うのですが、管理者からアクセスログとリファラーのログが別々のファイルで送られてきました。 ひとつのログファイルでページビューとリファラーの両方が見られると思っていただけに、戸惑っています(関連付けが難しくなりそうで)。Apacheの場合、ログファイルはこのような設定で吐き出されるのでしょうか? なおOSはUNIX(マシンはSun)です。 UNIXやApacheについてほとんど何も知らない初心者のため言ってることがめちゃくちゃかと思いますが、何かアドバイスをお願いします。

  • アメブロのアクセス解析の内容に詳しい方教えて下さい

    アメブロでブログを開設しています。 それなりにアクセス解析などを見ながらPV数や閲覧者数などを見て、内容を変化させて来たりしているのですが、最近になってちょっと気になる事が起きました。 アクセス解析を詳しく見ていると (1)同じアクセスワードで訪問している人は、同じワードで数回アクセスしたらそれはカウントされているのか? (2)検索ワードでブログを訪問し、F5や更新ボタンを押すとカウントが上がるのか? (3)検索ワードが単語の場合と文章の場合とでは、カウントは別になるのか? (4)同一人物が、違うワードで何度も訪問した場合、別カウントとして扱われるのか、それとも同じIPアドレスならカウントは1のままになっているのか? アメブロ付属のアクセス解析では、大ざっぱな解析しか出来ず、どのワードで誰が何時に訪問したのかが分からず、多少支障が出てきました。 外部のアクセス解析を設置しようかどうか迷ってますが、アメブロの解析では全然解析になってないので、やはり新しいツールを導入した方が良いのかと検討中です。 同じ質問をアメブロ側にもしましたが、多分納得行く回答が得られないと思います。 そこで詳しい方是非ご教授下さい。 宜しくお願いします。 (実は迷惑行為に悩まされています。その行為を避ける為にも解析が必要なんです)

  • SQLiteでたまにアクセスログが取れない

    PHPが使えないサーバーにあるホームページのアクセスログを取得するため、 JavaScriptを使ってPHPが使えるレンタルサーバーに飛び、 PHP+SQLite2でアクセスログを集計していました。 最近パソコンを買い替えたのを機にPHPをVersion 5.4.8にアップデートしたところ、 ローカル環境でSQLite2が使えなくなり、この際pdo_sqliteにプログラムを書き換えました。 レンタルサーバーではSQLite2 がまだ使えるため、以前のプログラムはそのままにして SQLite2 とPDO両方でログをとってみました。 するとSQLite2では取れているのにPDOでは取れていない、 逆にPDOでは取れているのにSQLite2では取れていないログがあることに気が付きました。 (詳しくは下記の画像をご覧ください 赤丸がついているものが他方にはないログです) https://box.yahoo.co.jp/guest/viewer?sid=box-l-oolzr4jkzfiedw4zavuldosoha-1001&uniqid=12bc9230-5e96-41fb-b00e-271a1aa79397&viewtype=detail#du%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ds%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26tu%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ts%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26vt%3Dpublic%26lf%3Dlist%26ls%3D1%26lm%3D20%26il%3D1 何が問題なのでしょうか? プログラム? SQLite? PHP? サーバー? 閲覧者のブラウザ? また回避法をご存知でしたらご教授願います。 (log.js) ref =document.referrer; var qword=""; if(ref.indexOf("?")!=-1){ ref2=ref.split("?"); query=ref2[1].split("&"); qword="?qword="; for (i=0; i<query.length; i++){ qword+=query[i]+"*"; } ref=ref2[0]; } document.write('<script src=" http://○○○/log2.php?ref='+ ref + qword +'"></script>'); document.write('<script src=" http://○○○/log.php?ref='+ ref + qword +'"></script>'); (log.php) <?php $referer = stripslashes($_GET['ref']); $d=date_create(); $date=date_format($d,"Y/m/d"); $time=date_format($d,"H:i:s"); $day=date_format($d,"w"); $referer=sqlite_escape_string($referer); $url=sqlite_escape_string($_SERVER['HTTP_REFERER']); $accept_language=sqlite_escape_string($_SERVER['HTTP_ACCEPT_LANGUAGE']); $remote_addr=sqlite_escape_string($_SERVER['REMOTE_ADDR']); $user_agent=sqlite_escape_string($_SERVER['HTTP_USER_AGENT']); $db=sqlite_open("log.sqlite"); $sql="INSERT INTO log_table ( log_date, log_time, log_day, log_url, log_referer, log_language, log_remote_addr, log_user_agent) VALUES( '$date', '$time', $day, '$url', '$referer', '$accept_language', '$remote_addr', '$user_agent')"; sqlite_query($db,$sql); sqlite_close($db); (log2.php) <?php $referer = stripslashes($_GET['ref']); $d=date_create(); $date=date_format($d,"Y/m/d"); $time=date_format($d,"H:i:s"); $day=date_format($d,"w"); $db=new PDO("sqlite:/home/○○○/www/log.sqlite3",null,null); $referer=$db->quote($referer); $url=$db->quote($_SERVER['HTTP_REFERER']); $accept_language=$db->quote($_SERVER['HTTP_ACCEPT_LANGUAGE']); $remote_addr=$db->quote($_SERVER['REMOTE_ADDR']); $user_agent=$db->quote($_SERVER['HTTP_USER_AGENT']); $sql="INSERT INTO log_table ( log_date, log_time, log_day, log_url, log_referer, log_language, log_remote_addr, log_user_agent) VALUES( '$date', '$time', $day, $url, $referer, $accept_language, $remote_addr, $user_agent)"; $res=$db->prepare($sql); $res->execute(); $db=null; レンタルサーバーの環境 さくらインターネット PHP Version 5.2.17 Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e SQLite 2.8.17 pdo_sqlite 3.3.7

    • 締切済み
    • PHP
  • ブログのアクセス解析

    自分のブログにアクセス解析の設定をしていますが 生ログを見ると以下のような内容があります。 HTTP_USER_AGENT DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html) これは単純に自分のブログにドコモの携帯でアクセスしたと言う事でしょうか? 詳しい意味がわかる方よろしくお願いします。

  • 無料レンタルアクセス解析

    以下の条件を持つレンタルCGIのアクセス解析をさがしています。 1htmlに埋め込めば利用できる 2無料 3どこからはもちろん、検索サイトから来た場合どのワードで検索をかけたかが分かる 以前使ってましたが見つけられなくなってしまいました。 ----------------- もう一つ質問 フレームを使っている場合htmlはindex(つまりフレーム部)に埋め込むのが良いのか(これだとバナーは表示されなくなってしまいますが効果ありますか?) それともいわゆるtop、またはNavi部分、どこが一番よいのでしょう?