アクセス解析(awffull)の導入

目的

レンタルサーバーで提供しているアクセス解析が Analog で、とても使いにくい。 そこで、別に提供されているナマのログをダウンロードして、こちらのサーバーで解析ソフトを動かすことにする。

提供されているAnalogは、毎回必要事項を調整して期間を設定して結果を得るようになっている。ログの保存期間は3ヶ月だが、解析の期間は1ヶ月以内でなければならない。年間の推移を見ようとすれば、得られた解析ページを保存する必要がある。

4ヶ月前にサポートにwebalizerを使えるようにと要望を出したが、「具体的な導入等の予定をお伝えできず、心苦しい限り」との返事。少し脈がある回答だったが、4ヶ月経っても動く様子がないので、こちらで何とかすることにした。

ダウンロードするデータは日ごとに1ファイル。ログインしてからマウス操作で一つずつダウンロードする様になっていて、これまた不満。ftpやwgetでとれると自動化できるのだが、これも同時に要望済であったのだが。せめて、まとめてダウンロードできるようになっていればいいのに。

というわけで、次のようにする。

ログファイルのダウンロードがcronでできるようになれば、レポートの更新もcronで自動化できる。

webalizerで検索

職場で使っていたASJのレンタルサーバではwebalizerとawstatsが提供されていた。まずsynaptic(debianのパッケージマネージャ)で webalizer を検索。

出てきたのは3つ

webalizerで検索

awffull
webalizerからの分岐。webalizerが改良されたと考えてこれを採用する。
後述するが正解。htmlの仕様がhtml5。(webalizerは HTML 4.0 Transitional)
awstats
Advanced Web Statistics (AWStats) 。webalizer よりもより詳しい情報を出す。 ASJのレンタルサーバーで追加されたアクセス解析。日を指定して、詳細な解析を表示するタイプ
webalizer
ASJのレンタルサーバーでも昔から使えたアクセス解析。月集計が毎日更新されていく。

awffullのインストール

awffullを使ってみることにしてsynapticでそのままインストール。

Commit Log for Wed Feb 13 00:36:14 2019
以下のパッケージがインストールされました:
awffull (3.10.2-4+deb9u1)

awffullでネット検索をしても日本語の情報がほとんどない。look&feelはwebalizerとあまり変わらないものの、もう少し出てきてもいいように思う。

awffullの設定

設定ファイルは/etc/awffull/awffull.conf

#でコメントアウトされた説明文中に、デフォルトの設定や自サイトに合わせるべき項目が散りばめられた、Linuxによくある設定ファイル。英文だが時間をかければなんとかなる。

# Sample AWFFull configuration file
#
# This is a sample configuration file for AWFFull (v3.8.1)
# Lines starting with pound signs '#' are comment lines and are
# ignored.  Blank lines are skipped as well.  Other lines are considered
# as configuration lines, and have the form "ConfigOption  Value" where
# ConfigOption is a valid configuration keyword, and Value is the value
# to assign that configuration option.  Invalid keyword/values are
# ignored, with appropriate warnings being displayed.  There must be
# at least one space or tab between the keyword and its value.
#
# AWFFull will look for a 'default' configuration file
# "/usr/local/etc/awffull.conf", and if found, use that.
# the '-c config.file' option can also be used to specify an alternate
# configuration file. Or multiple configuration files, with multiple -c's.
......以下続く.......

Debianには /usr/local/etc/awffull.conf はない。/etc/awffull/awffull.conf がその役目なのだろう。-cオプションで指定しない時に使われる設定ファイルがdebianでは/etc/awffull/awffull.confなのかは不明なので、詮索せず、

$ awffull -c /etc/awffull/awffull.conf

で実行させる。

ログファイルの位置

ログファイルの位置は、デフォルトはSTDIN。

ダウンロードしたファイルを指定する。

apache2のログローテートされるファイルが設定例になっている。

インストール時にcronも設定されて自動実行されるので、固定のファイル名でうまく行く仕組みなのだろう。

とりあえず数日のファイルを連結してdabiyone.com.logというファイルにすることにして、この名前を指定する(#がついているのはコメント扱い。変更したら署名しておくのが私の流儀)。

#LogFile /var/log/apache2/access.log.1
#adachi
LogFile /home/adachi/Downloads/dabiyonelog/dabiyone.com.log

出力先

出力先はデフォルトがこれ。

OutputDir /var/www/awffull

変更してもいいのだが、あえてこのまま使う。

ここにできるファイルを、ローカルなapache2で提供するようにする。

これはPHPのテスト環境として運用するapache2のサイトの一つとするのだが、ローカルなファイルシステムのhtmlファイルとしての運用(つまり/var/www/awffullをGUIで開いてindex.htmlをダブルクリックする)でももちろん構わない。

awffullの位置をlocalなapache2のサイトとする

ここで言うapache2は普段デスクトップ機として使用しているPC上で動いているもの。localなアクセスログは放置して、ダウンロードしたレンタルサーバーのログを処理し、それをlocalなapache2で閲覧するための設定。

設定完了後のapache2のサイト設定

root@debian64:# ll /etc/apache2/sites-available/
合計 24
-rw-r--r-- 1 root root 1332  7月 11  2018 000-default.conf
-rw-r--r-- 1 root root  325 10月 21 17:43 001-debian64.conf
-rw-r--r-- 1 root root  285 10月 21 17:59 002-solomon.conf
-rw-r--r-- 1 root root  285  2月 13 01:42 003-awffull.conf
-rw-r--r-- 1 root root 6338  3月 31  2018 default-ssl.conf

000-default.confでは/var/www/htmlがDocumentRootになっている。これはDebianのapache2のデフォルトで、/var/www/html/index.html には It Works! が書いてある。

普通の解説では、このindex.htmlを書き換えていくか、DocumentRootを/srv/wwwなどに書き換えたりする。

でも、Debianではsites-availableに別ファイルで設定を書くことでサイトを追加という形で設定できる。いわゆるVirtualHostという考え方。

そのために、すでに、000-, 001-, 002- のサイトがある。そこに003-を追加した。

実際にはコピーして編集したもの

root@debian64:# cp /etc/apache2/sites-available/002-solomon.conf /etc/apache2/sites-available/003-awffull.conf
root@debian64:# vi /etc/apache2/sites-available/003-awffull.conf

ファイルができたら、a2ensite コマンドで有効にする。(実際にはシンボリックリンクが作られるだけなので手動でも良い)

root@debian64:/home/adachi/Downloads# a2ensite 003-awffull.conf
Enabling site 003-awffull.
To activate the new configuration, you need to run:
  systemctl reload apache2

シンボリックリンクというのは、

root@debian64:# ll /etc/apache2/sites-enabled/
合計 0
lrwxrwxrwx 1 root root 35  7月 11  2018 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 36  7月 11  2018 001-debian64.conf -> ../sites-available/001-debian64.conf
lrwxrwxrwx 1 root root 35 10月 21 18:01 002-solomon.conf -> ../sites-available/002-solomon.conf
lrwxrwxrwx 1 root root 35  2月 13 01:43 003-awffull.conf -> ../sites-available/003-awffull.conf

VirtualHostの設定内容

003-awffull.confの編集内容はこちら

root@debian64:/home/adachi/Downloads# cat /etc/apache2/sites-available/003-awffull.conf
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/awffull
  serverName   awffull.dabiyone.com
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

つまりは、awffull.dabiyone.com でアクセスしてきたら、DocumentRoot を /var/www/awffull にするという設定。

dabiyone.com は私が取得したドメインだが、内部で使用する分には適当で構わない。

/etc/hostsの設定

内部DNSを立てるほどのことではないので、/etc/hostsに書き込む。

root@debian64:# vi /etc/hosts
root@debian64:# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	debian64.nan.dabiyone.com	debian64
127.0.2.1	nan.dabiyone.com
127.0.3.1	www.nan.dabiyone.com
127.0.4.1	solomon.dabiyone.com
127.0.5.1	awffull.dabiyone.com

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

nan, solomonなどは諸事情ですでに使っているホスト名。これで、dabiyone.comに nan, solomon などがついていれば自機、いなければDNS経由でIPを取得してレンタルサーバーに接続になる。

これで、次のURLでアクセスログページを表示できる。

http://awffull.dabiyone.com

ログの加工

レンタルサーバーからダウンロードしたログファイルは日毎に圧縮されている。例えば2018年6月24日は、

dabiyone.com_20180624.log.gz

そこで、zcatでファイルを復元・連結して dabiyone.com.log ファイルを作って、awffullの実行をする。

$ zcat dabiyone.com_201806??.log.gz >dabiyone.com.log
$ awffull -c /etc/awffull/awffull.conf 

これが6月分。7??で7月分だが、このままでは6月分が消えて7月分だけの結果となる。

awffull.conf再び

Incrementalをyesに変更すると、アクセス記録を重ねていく。awffull.currentに記録されて同じログが重ねて集計されないようになっている。たぶん最終ログの日時などが記録されて、古いものは無視される仕様なのだろう。過去のログは追加できない。

というわけで、/etc/awffull/awffull.conf への変更。

Incremental    yes
HostName dabiyone.com

HostNameは表題に使用する。Incrementalには関係はない。

これで、

$ zcat dabiyone.com_201806??.log.gz >dabiyone.com.log
$ awffull -c /etc/awffull/awffull.conf 
$ zcat dabiyone.com_201807??.log.gz >dabiyone.com.log
$ awffull -c /etc/awffull/awffull.conf
... 

で月ごとに追加してもよし

$ zcat dabiyone.com_201?????.log.gz >dabiyone.com.log
$ awffull -c /etc/awffull/awffull.conf 

で全部まとめてもよし。dabiyone.com.logは残す必要はない。

一応完成

awffullですが、出来上がったページは見慣れたwebalizerです。

webalizerではヒット・ファイル・ページが一つのグラフにまとめられていましたが、awffullでは「ページ」が独立しています。これは実態把握の面で理にかなっています。

awffullトップページ

月ごとのページも出しておきます。こちらのグラフはヒット・ファイル・ページが一つのグラフです。

awffull月別ページ

このページは2019年2月11日までのものですが(12日3時までが11日というのがレンタルサーバー側の設定)、続きのデータをダウンロードしたら

$ zcat dabiyone.com_201902??.log.gz >dabiyone.com.log
$ awffull -c /etc/awffull/awffull.conf 

で追加していけばOKです。dabiyone.com.logに過去のファイルが入っても二重集計にはなりませんが、データ量が多いとそれなりに負荷ですから、月ごとにしています。

awffull.confのLogFile指定をしなければ、STDINがデフォルトになりますから、パイプで渡すことも可能です。

$ zcat dabiyone.com_201902??.log.gz |awffull -c /etc/awffull/awffull.conf 

私はrootでそのままやってしまいましたが、パーミッションを適切にすれば一般ユーザーでもできるはずです。

awffull.conf

今回の、awffull.confの変更点は4つ

LogFile /home/adachi/Downloads/dabiyonelog/dabiyone.com.log
OutputDir /var/www/awffull
Incremental    yes
HostName dabiyone.com