#osc16ep (20161005) | 2016-10-05 11:46 |
piwik-fluentd (2.0.3) | 2015-11-12 15:22 |
Piwik patches for Japanese (20160813) | 2016-08-13 15:23 |
your_own_path は、 piwik-fluentd-1.2.4.tar.gz を展開したディレクトリです。
* piwik-fluentd >= 1.1.0 で変更または、追加。
** piwik-fluentd >= 1.2.0 で変更または追加。
* piwik-fluentd >= 1.1.0 で変更または追加 ** piwik-fluentd >= 1.2.0 で変更または追加 /your_own_path/fluentd/ ├── bin (fluentd 対応の import_logs.py、シェルスクリプト) │ ├── GNUmakefile ** │ ├── common.mak │ ├── cron * ** │ ├── env.sh *(Piwk インストールディレクトリ、Piwik URL、token auth) │ ├── import_logs.py (Piwik からコピーする) │ ├── import_logs-230.py.patch (Piwik 2.3.0 の import_logs.py パッチ) │ ├── import_logs-241.py.patch (Piwik 2.4.1 の import_logs.py パッチ) │ ├── import_logs-261.py.patch (Piwik 2.4.1 の import_logs.py パッチ) │ ├── import_logs-270.py.patch (Piwik 2.7.0 の import_logs.py パッチ) │ ├── import_logs-280.py.patch (Piwik 2.8.0, 2.8.1, 2.8.2, 2.8.3 の import_logs.py パッチ) │ ├── import_logs-290.py.patch (Piwik 2.9.0 の import_logs.py パッチ) │ ├── import_logs-291.py.patch (Piwik 2.9.1 の import_logs.py パッチ) │ ├── import_logs-2100.py.patch (Piwik 2.10.0 の import_logs.py パッチ) │ ├── import_logs-2111.py.patch (Piwik 2.11.1 の import_logs.py パッチ) │ ├── import_logs-2112.py.patch (Piwik 2.11.2 の import_logs.py パッチ) │ ├── import_logs-2121.py.patch (Piwik 2.12.1 の import_logs.py パッチ) │ ├── importlogs-dryun.sh * │ └── importlogs.sh * ├── exclude (取り込んではいけない URL パスが書かれたファイルを格納) │ ├── exclude_idsite1.txt │ ├── exclude_idsite2.txt │ ├── exclude_idsite3.txt │ ├── exclude_idsite4.txt │ └── exclude_idsite5.txt ├── log *(piwik/console core:archive のログ) ├── piwik-patch (Piwik 日本語(マルチバイト)問題解決パッチ) │ ├── piwik-japan-2.6.1-2.8.0.patch │ ├── piwik-japan-2.8.1-2.8.3.patch │ ├── piwik-japan-2.9.0-2.9.1.patch │ ├── piwik-japan-2.10.0.patch │ ├── piwik-japan-2.11.1.patch │ ├── piwik-japan-2.11.2.patch │ └── piwik-japan-2.12.1.patch └── td-agent (各サイト毎アクセスログディレクトリ) ├── site1 (Web サイト 1 のアクセスログ) │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── MOVECONDITIONS ** │ └── common.mak ├── site2 (Web サイト 2) │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── MOVECONDITIONS ** │ └── common.mak ├── site3 │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── MOVECONDITIONS ** │ └── common.mak ├── site4 │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── MOVECONDITIONS ** │ └── common.mak └── site5_test_disable (disable を入れると cron 処理からは除外される) ├── GNUmakefile -> ../../bin/GNUmakefile ├── IDSITE ├── MOVECONDITIONS ** └── common.mak
your_own_path は、 piwik-fluentd-2.0.3.tar.gz を展開したディレクトリです。
* piwik-fluentd >= 1.2.4 より変更または追加
* piwik-fluentd >= 1.2.4 で変更または追加 /your_own_path/fluentd/ ├── bin (fluentd 対応の import_logs.py、シェルスクリプト) │ ├── GNUmakefile * │ ├── common.mak │ ├── cron * │ ├── env.sh *(Piwk インストールディレクトリ、Piwik URL、token auth) │ ├── import_logs.py (Piwik からコピーする) │ ├── import_logs-2141.py.patch * │ ├── import_logs-2143_3.py.patch * │ ├── importlogs-dryun.sh * │ └── importlogs.sh * ├── exclude (取り込んではいけない URL パスが書かれたファイルを格納) │ ├── exclude_idsite1.txt │ ├── exclude_idsite2.txt │ ├── exclude_idsite3.txt │ ├── exclude_idsite4.txt │ └── exclude_idsite5.txt ├── log (piwik/console core:archive のログ) ├── piwik-patch (Piwik 日本語(マルチバイト)問題解決パッチ) │ ├── piwik-japan-2.6.1-2.8.0.patch │ ├── piwik-japan-2.8.1-2.8.3.patch │ ├── piwik-japan-2.9.0-2.9.1.patch │ ├── piwik-japan-2.10.0.patch │ ├── piwik-japan-2.11.1.patch │ ├── piwik-japan-2.11.2.patch │ ├── piwik-japan-2.12.1.patch │ ├── piwik-japan-2.14.1.patch * │ └── piwik-japan-2.14.3.patch * └── td-agent (各サイト毎アクセスログディレクトリ) ├── piwik_tracker * (Piwik tracker からのアクセスログ) │ ├── GNUmakefile -> ../../bin/GNUmakefile * │ ├── IDSITE * │ ├── IMPORTRANGE * │ ├── MOVECONDITIONS * │ └── common.mak * ├── site1 (Web サイト 1 のアクセスログ) │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── IMPORTRANGE │ ├── MOVECONDITIONS * │ └── common.mak ├── site2 (Web サイト 2) │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── IMPORTRANGE │ ├── MOVECONDITIONS * │ └── common.mak ├── site3 │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── IMPORTRANGE │ ├── MOVECONDITIONS * │ └── common.mak ├── site4 │ ├── GNUmakefile -> ../../bin/GNUmakefile │ ├── IDSITE │ ├── IMPORTRANGE │ ├── MOVECONDITIONS * │ └── common.mak └── site5_test_disable (disable を入れると cron 処理からは除外される) ├── GNUmakefile -> ../../bin/GNUmakefile ├── IDSITE ├── IMPORTRANGE ├── MOVECONDITIONS * └── common.mak
すなわち bot もアクセス数として入ります。入れたくなければ、 importlogs.sh の --enable-bot を削除してください。
/your_own_path/fluentd/importlogs.sh --enable-bot あり
python $base_dir/import_logs.py --idsite=$1 --url=$PIWIK_URL --token-auth=$PIWIK_TOKEN_AUTH --config=$PIWIK_INSTALL_DIR/config/config.ini.php --recorders=4 --recorder-max-payload-size=200 --enable-bot -d --log-format-name=apache_fluentd --exclude-path-from=$base_dir/../exclude/exclude_idsite${1}.txt ${2%.gz} 2>&1 | tee ${2%.gz}.archive
importlogs.sh に
Pwik = 2.6.1,2.7.0
Pwik >= 2.8.0
を追加します。
/your_own_path/fluentd/importlogs.sh
Pwik = 2.6.1, 2.7.0
python $base_dir/import_logs.py --idsite=$1 --url=$PIWIK_URL --token-auth=$PIWIK_TOKEN_AUTH --config=$PIWIK_INSTALL_DIR/config/config.ini.php --recorders=4 --recorder-max-payload-size=200 --enable-bot -d --log-format-name=apache_fluentd --static-extensions-include=jpe,json --static-extensions-exclude=xml --download-extensions-include=img,iso --download-extensions-exclude=asx,xml,pdf,xls,doc,ppt --exclude-path-from=$base_dir/../exclude/exclude_idsite${1}.txt ${2%.gz} 2>&1 | tee ${2%.gz}.archive
Pwik >= 2.8.0
python $base_dir/import_logs.py --idsite=$1 --url=$PIWIK_URL --token-auth=$PIWIK_TOKEN_AUTH --config=$PIWIK_INSTALL_DIR/config/config.ini.php --recorders=4 --recorder-max-payload-size=200 --enable-bot -d --log-format-name=apache_fluentd --static-extensions-include=jpe,json --static-extensions-exclude=xml --download-extensions-include=img,iso --download-extensions-exclude=asx,xml,pdf,xls,xlsx,doc,docx,ppt,pptx --exclude-path-from=$base_dir/../exclude/exclude_idsite${1}.txt ${2%.gz} 2>&1 | tee ${2%.gz}.archive
これらのオプションは、 piwik 標準の import_logs.py にはありません。パッチを当てることで実現します。オプションの説明は import_logs.pyで拡張されたオプション にあります。
"新しいサイトの追加" で、アクセスログを取り込むサイトの個数分ウェブサイトを作っておきます。
env.sh 例:
export PIWIK_INSTALL_DIR=/var/www/piwik export PIWIK_URL=http://piwik.example.com/ export PIWIK_TOKEN_AUTH=your_token export PIWIK_TRACK_SERVER_DIVIDED=0 export PIWIK_TRACK_INSTALL_DIR=/var/www/piwik export PIWIK_TRACK_URL=http://piwik.example.com/ export PIWIK_TRACK_TOKEN_AUTH=your_token export PIWIK_BULK_ARCHIVE=1PIWIK_TRACK_ で始まる環境変数は、piwik-fluentd >=2.0.0 で追加されています。
piwik をインストールしたディレクトリです。
piwik の URL です。import_logs.py から piwik の http API を使って piwik のデータベースにログを登録するために使用されます。
import_logs.py から piwik の http API を使って piwik のデータベースにログを登録する際使用されます。トークンは システムの構成→ユーザー で表示できます。VIEW 権限のみのユーザーのトークンは使えません。
Piwik tracker ログを解析するときのみ、PIWIK_INSTALL_DIR, PIWIK_URL, PIWIK_TOKEN_AUTH を別にしたいとき 1 にします(Piwik tracker ログ解析と、apache ログ解析のサイトを完全に分離したいときの使用を想定しています)。
PIWIK_TRACK_SERVER_DIVIDED = 1 のとき有効で Piwik tracker ログを解析するときのみ PIWIK_INSTALL_DIR の代わりに使用されます。
PIWIK_TRACK_SERVER_DIVIDED = 1 のとき有効で Piwik tracker ログを解析するときのみ PIWIK_URL の代わりに使用されます。
PIWIK_TRACK_SERVER_DIVIDED = 1 のとき有効で Piwik tracker ログを解析するときのみ PIWIK_TOKEN_AUTH の代わりに使用されます。
export PIWIK_BULK_ARCHIVE=1console core:archive の実行結果は /your_own_path/fluentd/log/archive.log に出力されます。
export PIWIK_BULK_ARCHIVE=0console core:archive の実行結果は /your_own_path/fluentd/td-agent/各サイト/access.時間_X.log.archive それぞれに出力されます。
ファイル名 exclude_idsite+siteid(下記).txt を用意し、取り込まない URL を記述します。 Piwik の設定と同様にワイルドカードが指定できます。取り込まない URL がない場合も空のファイルを作らなければなりません。(piwik-fluentd >=2.0.0)Piwik tracker ログの解析するこのファイルは読み込みませんので不要です。
例:
% cat exclude_idsite1.txt /robots.txt /humans.txt /favicon.*
このディレクトリにはすでに fluentd からアクセスログが書き込まれているはずです。make の仕組みを使い、piwik にアクセスログが取り込み済かどうかを判定するのでそのための準備をします。
% cd /your_own_path/fluentd/td-agent/site1 % ln -s ../bin/GNUmakefile . % cp ../bin/common.mak .
# # common.mak # #IMPORTLOGS=../../bin/importlogs.sh IMPORTLOGS=../../bin/importlogs-dryrun.sh → アクセスログのスキャンはするけど、piwik に反映しない TARGETMAK=target.mak .SUFFIXES: .gz .archive .gz.archive: $(IMPORTLOGS) $(IDSITE) $<
例: siteid = 4 のアクセスログである
% cd /your_own_path/fluentd/td-agent/site1 % echo 'IDSITE=4' > IDSITE
例: Piwik tracker からのアクセスログ解析は siteid = 0 とする
% cd /your_own_path/fluentd/td-agent/piwik_tracker % echo 'IDSITE=0' > IDSITE
例: 取り込み済のアクセスログを 1000 残して、1000 を超えたファイルをは done (fluentd/td-agent/site1/done) に転送します
% cd /your_own_path/fluentd/td-agent/site1 % vi MOVECONDITIONS LEAVEFILES=1000 DESTDIR=done
例: すべてのログを Piwik データベースに反映(通常運用)
IMPORT_START=infinity IMPORT_END=infinity
例2: 2015-10-12 00:00:00 から 2015-10-12 23:59:59 までのログを Piwik データベースに反映、そのほかは無視
IMPORT_START=2015-10-12:00:00:00 IMPORT_END=2015-10-12:23:59:59
例3: 2015-10-12 23:59:59 までのログを Piwik データベースに反映、そのほかは無視
IMPORT_START=infinity IMPORT_END=2015-10-12:23:59:59
例4: 2015-10-12 00:00:00 からのログを Piwik データベースに反映、そのほかは無視
IMPORT_START=2015-10-12:00:00:00 IMPORT_END=infinity
% cd /your_own_path/fluentd/td-agent/site1 % sudo -u td-agent make depend % sudo -u td-agent make % sudo -u td-agent make moveimportedlogs
時間_X については fluentdのout_fileプラグインの仕様について を参照してください。なおここで、デフォルトでは 256m 毎に分割されるとありますが実際は 8m 毎です。
% cd /your_own_path/fluentd/td-agent/site1 % make clean % ../../bin/cron
% make clean
# # common.mak # IMPORTLOGS=../../bin/importlogs.sh #IMPORTLOGS=../../bin/importlogs-dryrun.sh TARGETMAK=target.mak .SUFFIXES: .gz .archive .gz.archive: $(IMPORTLOGS) $(IDSITE) $<
/etc/crontab に以下の設定をします。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 15 * * * * td-agent /your_own_path/fluentd/bin/cron開始分を 15 しているのは、 fluentd がデフォルトでログ遅延を 10 分まつからです。上記の設定だと、毎時、fluentd アクセスログのファイルが切り替わりますが、遅延を 10 分間受け付けて毎時 11 分ごろに 前の一時間分のログを出すためです。 12 にしてもいいでしょう。 一時間に 2 度実行してもいいですが、 アクセスログ取り込み中に cron の次の回が当って二重実行されないように調整します。 月初は console core:archive の処理が速いのですが、月末に近づくにつれて遅くなるので注意が必要です。 月末の処理時間は、月初の 10 倍程度 を見込んでください。