通常のアクセスログの収集は各ページにSSI(CGI)を組み込んで「総参照数」や「ページ表示数」などを集計しています。
この方法だと新規ページを作成する毎に、そのロジックを組み込まなければなりません。また、カウント用のSSI(CGI)を変更した場合はその全てのページに組み込んだ部分を変更する必要があります。
この点を補う為に、「apache」プロセスがページ要求を受けた時に「apache」自身が出力するログの部分で一括管理(以下、イメージ図参照)をしてしまえば、アクセスログ収集の組み込み軽減化を図れます。
apache設定ファイルの変更 # vi /etc/httpd/conf/httpd.conf # # For a single logfile with access, agent, and referer information # (Combined Logfile Format), use the following directive: # #CustomLog logs/access_log combined SetEnvIf Request_URI "default\.ida" no_log SetEnvIf Request_URI "cmd\.exe" no_log SetEnvIf Request_URI "root\.exe" no_log SetEnvIf Request_URI "Admin\.dll" no_log SetEnvIf Request_URI "NULL\.IDA" no_log SetEnvIf Request_URI "NULL\.printer" no_log SetEnvIf Request_URI "_vti_bin" no_log SetEnvIf Request_URI "_vti_pvt" no_log SetEnvIf Request_URI "MSOffice" no_log SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)|(js)$" no_log SetEnvIf Remote_Addr 192.168. no_log CustomLog logs/access_log combined env=!no_log カスタムログを集計するスクリプトを組み込む # Custom log (Start) LogFormat "%{%Y/%m/%d %H:%M:%S}t %h %>s %m %U" custom_log CustomLog "| /etc/httpd/conf/custom_log.pl >> /var/log/httpd/custom_log" custom_log env=!no_log # Custom log (End) |
なお、「%h %m %U」などの詳しい説明は、Apache HTTP Server Projectの『カスタムログ書式』を参照してください。
カスタム集計スクリプトの『ダウンロード』を行い、解凍せずにサーバへアップロードします。
(「/root/accesslog.tar」にアップロードしたとして、説明していきます。)
カレントをapacheのドキュメントルート「/var/www/html/」へ移動 # cd /var/www/html/ アップロードしたカスタム集計スクリプトを展開 # tar xvf /root/accesslog.tar ./accesslog/ ./accesslog/accesslog.cgi ./accesslog/custom_log.pl ./accesslog/init.pl ./accesslog/history/ |
『アクセスログ表示スクリプトの設置』で展開した「custom_log.pl」を規定位置へ移動します。
「custom_log.pl」を規定位置へ移動 # mv /var/www/html/accesslog/custom_log.pl /etc/httpd/conf/ |
/etc/httpd/conf/ `-- custom_log.pl (root:root[700]) /var/www/html/ `-- accesslog (apache:apache[750]) |-- accesslog.cgi (apache:apache[750]) |-- history (apache:apache[750]) `-- init.pl (apache:apache[640]) |
アクセスログ表示スクリプトの配置ディレクトリはログ表示する為、CGIの実行許可が必要です。「cgi-bin」のみ許可等している場合はご注意ください。
また、配置先やディレクトリ名の変更も可能です。「init.pl」の設定値を変更してください。
(*:変更先のディレクトリやファイルのパーミッション等は『カスタム集計スクリプトのオーナ・グループ、パーミッション』をご参照ください。)
集計スクリプト「custom_log.pl」をはじめて配置または変更(「init.pl」含む)した場合は、apacheサービスの再起動が必要です。
これは、「custom_log.pl」がapacheプロセスのビルトインみたいなものである為、再起動しないと変更内容等が反映されない為です。
ログファイルはアクセスログ表示スクリプトを配置した場所に自動的に作成されます。(以下参照)
・access_log.dat
本日までの総アクセス数や本日・前日のページ表示数やIPアドレス数と本日のアクセス元IPアドレスとその回数
・access_page.dat
本日までの各ページに対する総アクセス数や本日・前日のアクセス数
・access_unknow.dat
エラーコードとして弾かれたアクセスデータ(集計は「200」「301」「302」「403」のコードを対象にしています。これ以外は当ファイルにロギングします。)
・historyディレクトリ以下に「YYYYMMDD.log」(YYYY:西暦、MM:月、DD:日)
日付毎のアクセスログ(日付が変わると「access_log.dat」ファイルがこのディレクトリ内に「日付.log」として履歴されます。)
自動生成されるログのオーナ・グループは「root」となっていますが、無視して構いません。これは、apacheの親プロセスが「root」で起動されている為でありここで作成されるオーナ等も継承される為です。
クライアントより[http://サーバのアドレス/accesslog/accesslog.cgi]でアクセスして下記の様な画面が表示されれば動作しています。