前回、さくらレンタルサーバにて Matomo に Apache ログを食わせようとして撃沈した。そして、今回はそのリベンジ。その後、Python は無事 2.7.15 にすることができ、準備完了。ということで、やってみる。
インポートスクリプト
まず、インポートスクリプトのディレクトリまで降りる。パスを与えてあげれば降りなくても良いのだけど。ところどころセンシティブな箇所は { }
にしている。
1 2 |
% cd $HOME/www/analytics/misc/log-analytics/ |
そして実行。
1 2 |
% python import_logs.py --url={site url} --recorders=4 --enable-http-errors --enable-http-redirects --enable-static --enable-bots /home/{user name}/log/access_log_20181106 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
0 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) Parsing log /home/{user name}/log/access_log_20181106... 2018-11-07 15:01:52,968: [INFO] Error when connecting to Matomo: 2018-11-07 15:01:52,969: [INFO] Retrying request, attempt number 2 2018-11-07 15:01:52,989: [INFO] Error when connecting to Matomo: 2018-11-07 15:01:52,990: [INFO] Error when connecting to Matomo: 2018-11-07 15:01:52,990: [INFO] Retrying request, attempt number 2 2018-11-07 15:01:52,991: [INFO] Error when connecting to Matomo: 2018-11-07 15:01:52,992: [INFO] Retrying request, attempt number 2 2018-11-07 15:01:52,993: [INFO] Retrying request, attempt number 2 3200 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) ...(略)... 3200 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) 2018-11-07 15:02:02,985: [INFO] Error when connecting to Matomo: 2018-11-07 15:02:02,985: [INFO] Retrying request, attempt number 3 2018-11-07 15:02:03,010: [INFO] Error when connecting to Matomo: 2018-11-07 15:02:03,011: [INFO] Retrying request, attempt number 3 2018-11-07 15:02:03,012: [INFO] Error when connecting to Matomo: 2018-11-07 15:02:03,012: [INFO] Retrying request, attempt number 3 2018-11-07 15:02:03,014: [INFO] Error when connecting to Matomo: 2018-11-07 15:02:03,014: [INFO] Retrying request, attempt number 3 3200 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) ...(略)... 2018-11-07 15:02:13,024: [INFO] Error when connecting to Matomo: 2018-11-07 15:02:13,024: [INFO] Max number of attempts reached, server is unreachable! Fatal error: Matomo returned an invalid response: You can restart the import of "/home/{user name}/log/access_log_20181106" from the point it failed by specifying --skip=0 on the command line. |
ぐはぁ。urlopen error Matomo returned an invalid response:
とな。SSL のエラーが出ないということで一歩前進。このメッセージで検索かけて調べる。このページ(https://github.com/matomo-org/matomo/issues/6885#issuecomment-67884327)によると、--token-auth
を指定しろとのこと。API トークンは、Matomo にログインし、左上のメニューから、Personal -> Settings -> API Authentication Token で見つけることができた。そして再度打ち込む。
1 2 |
% python2 import_logs.py --url={site url} --token-auth={api token} --recorders=4 --enable-http-errors --enable-http-redirects --enable-static --enable-bots /home/{user name}/log/access_log_20181106 |
しかし、同じエラーがでる。ここでエラーメッセージの意味を考える。”an invalid response” ということはどこかにアクセスして、レスポンスに不備があるということ。しかもトークンを与えるということは何か認証を行っている。アクセス認証している・・・ということは、オプションで指定したサイトにアクセスしてるのかな、という推測が立ったところで、上記、{site url} をドメインルートにしていたのををMatomo のインストール場所、https://{domain}/analytics に変更して再度実行。
1 2 |
% python import_logs.py --url=https://{domain}/analytics --token-auth={api token} --recorders=4 --enable-http-errors --enable-http-redirects --enable-static --enable-bots /home/{user name}/log/access_log_20181106 |
すると、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
0 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) Parsing log /home/{user name}/log/access_log_20181106... 1397 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) ... (略) ... 12717 lines parsed, 12470 lines recorded, 157 records/sec (avg), 0 records/sec (current) Logs import summary ------------------- 12717 requests imported successfully 298 requests were downloads 5175 requests ignored: 0 HTTP errors 0 HTTP redirects 0 invalid log lines 0 filtered log lines 5175 requests did not match any known site 0 requests did not match any --hostname 0 requests done by bots, search engines... 0 requests to static resources (css, js, images, ico, ttf...) 0 requests to file downloads did not match any --download-extensions Website import summary ---------------------- 12717 requests imported to 2 sites 2 sites already existed 0 sites were created: 7 distinct hostnames did not match any existing site: {site 1}.jp {site 2}.jp {site 3}.jp {site 4}.jp {site 5}.jp {site 6}.jp {site 7}.jp TIPs: - if one of these hosts is an alias host for one of the websites in Matomo, you can add this host as an "Alias URL" in Settings > Websites. - use --add-sites-new-hosts if you wish to automatically create one website for each of these hosts in Matomo rather than discarding these requests. - use --idsite-fallback to force all these log lines with a new hostname to be recorded in a specific idsite (for example for troubleshooting/visualizing the data) - use --idsite to force all lines in the specified log files to be all recorded in the specified idsite - or you can also manually create a new Website in Matomo with the URL set to this hostname Performance summary ------------------- Total time: 79 seconds Requests imported per second: 160.14 requests per second Processing your log data ------------------------ In order for your logs to be processed by Matomo, you may need to run the following command: ./console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000 --url='https://{domain}/analytics' |
来たーーーーーー!!ちなみに --token-auth
は無くても良いみたいで、--url
がきちんと指定されている必要がある模様。
In order for your logs to be processed by Matomo, you may need to run the following command:
./console core:archive –force-all-websites –force-all-periods=315576000 –force-date-last-n=1000 –url=’https://{domain}/analytics’
このメッセージの意図するところが気になる。完全にデータを読めてないってことなのかな?ま、これは後回し。
7 distinct hostnames did not match any existing site:
で、ログ内に記載されているホストで Matomo 内で追加していないサイトは無視され、その旨を警告してくれている。サブドメインやカスタムドメインのものが該当している。
ということで、Matomo にログインし、それらのサイトを追加。
こういう感じが、サイトを追加して、
こんな感じになって、再度ログを食わせる。一日分だけど。するとこんな感じなった。
Visitors -> Locations とか見ると、なかなかいい感じで表示してくれる。Google が使ってたというだけあって、なかなか優秀な印象。
さくらサーバの場合
さくらサーバの場合、前日以前の Apache ログは .gz
で圧縮されて $HOME/log
に格納される。コントロールパネルの設定によっては最長2年分保存される。で、.gz
ファイルもインポートしてくれるのか試してみた。
1 2 |
% python import_logs.py --url=https://{domain}/analytics --recorders=4 --enable-http-errors --enable-http-redirects --enable-static --enable-bots /home/{user name}/log/access_log_20181105.gz |
結果、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<br />Logs import summary ------------------- 12717 requests imported successfully 298 requests were downloads 0 requests ignored: 0 HTTP errors 0 HTTP redirects 0 invalid log lines 0 filtered log lines 0 requests did not match any known site 0 requests did not match any --hostname 0 requests done by bots, search engines... 0 requests to static resources (css, js, images, ico, ttf...) 0 requests to file downloads did not match any --download-extensions Website import summary ---------------------- 12717 requests imported to 8 sites 8 sites already existed 0 sites were created: 0 distinct hostnames did not match any existing site: Performance summary ------------------- Total time: 51 seconds Requests imported per second: 246.33 requests per second Processing your log data ------------------------ In order for your logs to be processed by Matomo, you may need to run the following command: ./console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000 --url='https://{domain}/analytics' |
ときちんと解析してくれる。ということは2年分放り込むスクリプトを書く必要がある。
放り込みスクリプト
ということで、簡単な Bash スクリプトを書いた。これは、$HOME/log
内のaccess_log_{date}.gz
ファイルを順に周っていって、一つづつインポートスクリプトに渡してあげる、というもの。スクリプト内の Importer
、Python
と URL
の値は{domain}などで伏せているけど、もし使うのであれば、編集して自分のものを設定する必要がある。
sakura_apach_log_feeder_to_matomo.sh
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash Importer=$HOME/www/analytics/misc/log-analytics/import_logs.py Python=$HOME/local/bin/python2 URL=https://{domain}/analytics DIR=$HOME/log for filename in $DIR/access_log_*.gz; do echo Parsing $filename $Python $Importer --url=$URL --recorders=4 --enable-http-errors --enable-http-redirects --enable-static --enable-bots $filename done |
これを走らせると、2年分のログをインポートするわけで、かなり時間がかかる。夜通し走らせたところ、まだやってて、18時間ほどかかった。
データベースの肥大化
途中、データベースのサイズが肥大化してきた。さくらレンタルサーバではいつからか、データベースの容量に制限がかかっている。スタンダートでは1.5Gまで。以前超過していて、全データベースをまっさらに消された事がある。これについては、いつか別に投稿したい。上の画像がさくらサーバのコントロールパネル -> アプリケーションの設定 -> データベスの設定 のスクリーン。1Gを超えている。
ということで、Matomo にログインし、右上のギアアイコン -> System -> General settings -> Delete old visitor logs and reports から、Schedule old data deletion に降りて行き、Purge DB Now をクリック。警告がでるので、Save を押し、再度クリックすると、また警告がでて、Yes を押す。これで Purging Data… と実行中になる。終わるまで数分要する。たまに全然削れない時があるので、その場合は繰り返す必要がある。
使用感
なかなかいい感じ。ただ、重い。頻繁にデータがロードできませんでしたという旨の赤いメッセージがでる。ムキになってクリックしまくると、Internal Server Error が出る。マシンのリソースを食うのかな。Google Analytics も重いけど、同じくらい重い。
ただ、さくらサーバに標準搭載されている Webalize、また AWStats よりかは遥かに詳しいデータが分かる。それらは、サブドメインなどをきちんと区別してくれないが、Matomo はサイトを追加する項目があり、そこで仕分けてくれる。ちょっと調べたところ、Bot のアクセスをフィルタリングできる機能がなく、オーガニックなアクセスとごちゃまぜになるのが難点。ユーザーエージェントのブラックリストの設定をするも、一度インポートした情報は除外されないようだ。
ただ、マップで表示してくれたり、1ユーザーの行動をわかりやすくしてくれたり、というのはなかなか良い。また、画像を貼る形式のトラッキングもサポートされている。これを使えば、GitHubなどの完全な外部サイトのドキュメンテーションのアクセス解析などもできそう。詳しい使用感、詳細設定についてはレビュー記事を後に書こうと思う。