#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 |
何らかの理由である期間だけ Piwik へのログの取り込みおよび集計が行われていないときも後追いでログを取り込みたいことがあります。 このとき、後追いで取り込んだ期間のリアルタイムのビジターなどは出るのですが、集計プロセスを動かしても、日別ユニークビジター数などの集計された数値がかけてしまうときがあります。 こういう現象↓が起こったときの対処方法です。
方法は以下の二通りがあります。上記のリンク先にもあるように、 (実際は一行です)
?module=API&method=CoreAdminHome.invalidateArchivedReports& idSites=1,3,5&dates=2012-01-01,2011-10-15&token_auth=xyzのような URL リクエストをだし、次回の core:archive でどの期間を再集計するか指定します。core:archive は別途実行しなければならず、さらに 再集計したい日付が 3 週間以上の前のときはパラメータを付加して手動実行しなければなりません。
例をあげます(wget は一行です) 。
% wget -O - "http://piwik.example.com/?module=API&method=CoreAdminHome.invalidateArchivedReports&idSites=7&dates=2014-08-16&token_auth=your_token" --2015-03-17 09:11:01-- http://piwik.example.com/?module=API&method=CoreAdminHome.invalidateArchivedReports&idSites=7&dates=2014-08-16&token_auth=your_token http://piwik.example.com piwik.example.com をDNSに問いあわせています... 192.168.0.12 piwik.example.com|192.168.0.12|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 141 [text/xml] `STDOUT' に保存中 0% [ ] 0 --.-K/s <?xml version="1.0" encoding="utf-8" ?> <result> <row>Success. The following dates were invalidated successfully: 2014-08-16</row> 100%[================================================================================================================================================================================================================================>] 141 --.-K/s 時間 0s 2015-03-17 09:11:10- (19.0 MB/s) - stdout へ出力完了 [141/141]
上記は daily のみ再集計します。weekly、monthly、yearly、range は再集計されません。ということで、period 引数を与えてさらに再集計の指示をだします。 下記の例は、週の再集計です(実際は一行です) 。複数回 API を叩いて複数の対象日付を指定し、結果として指定した日付がすべて同じ週のときは、週の再集計の指示は最後の一度だけでいいです(おそらく、最後ではなくどこかの一度だけでもいいはずであるが未検証)。
% wget -O - "http://piwik.example.com/?module=API&method=CoreAdminHome.invalidateArchivedReports&idSites=7&period=week&dates=2014-08-16&token_auth=your_token"
同様に、period を month、year (year は必要であれば、下記)、range に入れ替えてリクエストを投げてください(連続で投げるとキューに溜まります)。複数回 API を叩いて複数の対象日付を指定し、が結果として指定した日付がすべて同じ月(または同じ年)にかかるときは、月(または年)の再集計の指示は最後の一度だけでいいです(おそらく、最後ではなくどこかの一度だけでもいいはずであるが未検証)。
range (Piwik の公式サイトで説明なし)は、Piwik で計算期間を任意の日付で指定できる 期間 (カレンダーで選択できるアレ)です。 期間 で月初と月末を指定すると計算結果は 月 で指定した一カ月と同じになりますが、内部的には別に処理されています。 daily、weekly、monthly、yearly は、core:archive が動く毎の再集計結果を用いるので表示は速いですが、 range はその場で集計を始めるので 結果的に daily、weekly、monthly、yearly と同じ期間でも応答が遅い です。
Piwik デフォルトは、年単位の集計は負荷がかかるので行わないようになっています。
config/config.ini.php
[General] enable_processing_unique_visitors_year = 1とあれば、年単位の集計を行うようになっています(デフォルトは 0 です)。
再集計は、 ./console core:archive で行うのですが、下記条件
のとき再集計します。 つまり、一番短い再集計のレンジは、week の 2 週となるため、 3 週間以上前の再集計はオプションが必要としました。
再集計の範囲を広げるには二通りの方法があります。
遡って集計する範囲を広げるため、 --force-date-last-n=365 を付加します。
% cd piwik をインストールしたディレクトリ名 % ./console --url=http://piwik.example.com/ core:archive --force-idsites=7 --force-date-last-n=365
--force-date-last-n=365 で次のように振る舞いをむりくり変更します:
を再集計。 How do I reprocess all websites, all dates and all periods, after initial import of logs? には、--force-date-last-n=1000 なんて記述もあります。
例えば、2015/3/18 に 2014/9/20 の再計算を行うのであれば、 --force-date-last-n=180 以上であればよいです。 --force-date-last-n=179 では再計算されません。
こちらは、再計算の範囲を from, to で指定します。
% cd piwik をインストールしたディレクトリ名 % ./console --url=http://piwik.example.com/ core:archive --force-idsites=7 --force-date-range=2014-08-16,2014-08-16
上記は、2014-08-16 だけを再集計の対象とします。--force-date-range=2014-08-16,2014-09-01 であれば、2014-08-16 から 2014-09-01 までを再集計の対象とします。
参考 How do I reprocess all websites, all dates and all periods, after initial import of logs? リンクにあるように core:archive でも再集計可能です。ただ、説明がアバウトで、特定の日だけ集計したい方法が書いていないので、ここで説明します。
% cd piwik をインストールしたディレクトリ名 % ./console core:archive --url=http://piwik.example.com --force-idsites=7 --force-periods=day,week,month --force-date-range=2014-08-16,2014-08-16
% cd piwik をインストールしたディレクトリ名 % ./console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000
同じく参考 How do I reprocess all websites, all dates and all periods, after initial import of logs?