技術情報

レポートの自動アーカイブの設定方法

あなたのウェブサイトが1日に数百回以上アクセスされている場合(素晴らしい!)、Matomoがデータを処理するのを待つのに数分かかることがあります。このような待ち時間を避ける最善の方法は、1時間ごとに自動的にデータが処理されるように、サーバーにcronジョブを設定することです。

Matomo for WordPressをご利用の場合WP Cronを利用するので、この作業は必要はありません。Matomoクラウドをご利用の場合はこの作業は自動的に行われます。

Matomo アーカイブを自動的に起動するには、1時間ごとに実行されるスクリプトを設定します。

以下はcrontabを使用したLinux/Unixシステム用の手順と、Windowsタスクスケジューラーを使用したWindowsユーザー用の手順、およびCPパネルなどのツール用の手順を示します。サーバーにアクセスできない場合は、ウェブクローンをセットアップすることもできます。

Linux/Unix:レポートを自動的にアーカイブするCrontabの設定方法。

crontabは、Unixライクなサーバーにおける時間ベースのスケジューリングサービスです。crontabを使用するには、php-cliまたはphp-cgiがインストールされている必要があります。
また、設定するにはサーバーにSSHアクセスする必要がある。テキストエディタnanoを使って新しいcrontabを作成しよう:

nano /etc/cron.d/matomo-archive
                        

以下の行を追加する:

MAILTO="youremail@example.com"
                        5 * * * * www-data /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /home/example/matomo-archive.log
                        

Matomoアーカイブスクリプトは、毎時(5分過ぎ)に実行される。
通常、1分以内に完了します。大規模なウェブサイト(10,000アクセス以上)では、Matomoアーカイブに30分かかることがあります。

パラメータの内訳

  • MAILTO=”youremail@example.com”スクリプト実行中にエラーが発生した場合、スクリプト出力とエラーメッセージがyouremail@example.com アドレスに送信される。
  • www-dataはcronジョブが実行されるユーザーです。
    ユーザーは”apache “であることがあります。ウェブサーバーユーザーと同じユーザーでcrontabを実行することをお勧めします。(ファイルパーミッションの不一致を避ける為)
  • /usr/bin/phpはPHP の実行ファイルへのパスです。サーバーの構成やオペレーティングシステムによって異なります。
    Linux シェルで “which php” または “which php”コマンドを実行すると、PHP 実行ファイルのパスを調べることができます。
    パスがわからない場合は、ウェブホストまたはシステム管理者に尋ねてください。
  • /path/to/matomo/consoleは、Matomo アプリへのパスです。 例えば/var/www/matomo/consoleとなります。
  • –url=http://example.org/matomo/はスクリプトの唯一の必須パラメータで、
    MatomoのベースURLに設定する必要があります。http://analytics.example.org/またはhttp://example.org/matomo/
  • > /home/example/matomo-archive.logはスクリプトが出力を書き出すパスです。このパスを/dev/null最後のMatomo cron 出力テキストをログに残したくない場合。
    スクリプトの出力には、どのウェブサイトがアーカイブされたか、各日付とウェブサイトの処理にかかった時間などの有用な情報が含まれています。
    このログファイルはウェブサーバ外の場所に書き、ブラウザから閲覧できないようにしてください(このログファイルにはMatomoのインストールに関する機密情報が含まれるため)。
    >,>>を使用すると、スクリプトの出力を実行ごとに上書きするのではなく、ログファイルに追加することができます。
    (ただし、その場合はこのログファイルをローテーションするか、週に一度など削除することをお勧めします)。
  • 2> /home/example/matomo-archive-errors.logはスクリプトがエラーメッセージを書き込むオプションのパスです。
    もしこれをcronタブで省略した場合、エラーはあなたのMAILTOアドレスにEメールで送られます。
    もしcrontabにこれを書くと、エラーはこの指定されたエラーログファイルに記録されます。
    このログファイルはウェブサーバ外の場所に書き、ブラウザから閲覧できないようにしてください(このログファイルにはMatomoのインストールに関する機密情報が含まれるため)。

linux cronユーティリティについて:クーロンユーティリティは、システムcrontabとユーザーcrontabという2つの異なるタイプの設定ファイルを使用する。
これら2つの形式の唯一の違いは、6番目のフィールドです。

  • システムcrontabの6番目のフィールドは、コマンドを実行するユーザー名である。これにより、システムcrontabは任意のユーザーとしてコマンドを実行することができる。
  • ユーザーcrontabでは、6番目のフィールドは実行するコマンドであり、全てのコマンドはcrontabを作成したユーザーとして実行される

もしcrontabをユーザーcrontabとして設定した場合、代わりにこう書くことになります:

5 * * * * /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /dev/null
                        

このcronジョブは、毎時5分過ぎに日/週/月/年のアーカイブ処理をトリガーします。
これにより、あなたがMatomoのダッシュボードにアクセスしたとき、データはすでに処理されており、Matomoは素早く読み込まれます。

cronコマンドのテスト

シェルでcrontabユーザーとしてスクリプトを実行して、crontabが実際に機能することを確認する:

su www-data -s /bin/bash -c "/usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/"
                        

アーカイブされるウェブサイトのリストがスクリプトに出力され、最後にエラーがなかったことを示す要約が表示されるはずです。

複数のアーカイバを同時に起動する

複数のサイトがある場合、より高速なアーカイブのために複数のアーカイバを並行して実行することに興味があるかもしれません。
同時実行の問題を避けるため、同時に起動せず、数秒から数分間隔で起動することをお勧めします。

5 * * * * /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /dev/null
6 * * * * /usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/ > /dev/null

上記の例では、1つのアーカイバは毎時5分に起動し、もう1つはその1分後に起動します。
また、スクリプトを使って複数のアーカイバを同時に起動し、それをcronjobで定期的に実行することもできます。

CONCURRENT_ARCHIVERS=2
for i in $(seq 1 $CONCURRENT_ARCHIVERS)
do (sleep $i && /path/to/matomo/console core:archive & )
done

Windows:Windowsのスケジューラを使用して自動アーカイブを設定する方法

->Windowsでスケジュールタスクを設定するための専用FAQをご覧ください。

Plesk:Pleskを使用したCronスクリプトの設定方法

PleskにMatomoをインストールする方法についてはこちらをご覧ください。PleskのMatomoガイドのアーカイブcrontabを設定する。

CPanel:CPanelを使用してCronスクリプトを設定する方法

CPanel、WebminまたはPleskのようなユーザーインターフェイスを使用している場合、自動アーカイブを設定するのは簡単です。
以下はCPanelの説明です:

  1. Matomo がインストールされているドメインの CPanel にログインします。
  2. “Cronジョブ “をクリック
  3. 電子メールは空白のままにしてください
  4. Minutes’には00を入れ、残りは空白にする。
  5. 次に、PHP実行ファイルへのパス、Matomo/console スクリプトへのパス、MatomoベースURL -url=matomo.example.org/。をパラメータとして貼り付ける必要があります。
    以下はHostgatorのインストール例です(この例では、’yourcpanelsitename’を特定のドメインのcpanelユーザー名に変更する必要があります)

    /usr/local/bin/php -f /home/yourcpanelsitename/public_html/matomo/console
    core:archive --url=example.org/matomo/ > /home/example/matomo-archive-output.log

“yourcpanelsitename “は、ドメインの最初の8文字になる傾向があります(cpanelアカウントをセットアップするときに変更しない限り)。
6. Add New Cron Job “をクリックします。

Matomoは時間ごとに自動的にレポートを処理します。

ウェブホストがクーロンタスクをサポートしていない場合のウェブクーロン

可能であれば、cronまたはスケジュールタスクを実行することを強くお勧めします
。しかし、共有ホスティングや特定のサーバー構成では、クーロンやスケジュールされたタスクを実行することは容易ではないかもしれません。

ウェブホストによってはウェブクロンこれは、ホストがスケジュールされた時間に自動的にアクセスする単純なURLです。
ウェブホストでウェブクーロンを作成できる場合、ホスティングインターフェースに以下のURLを入力できます:

https://matomo.your-server.example/path/to/matomo/misc/cron/archive.php?token_auth=XYZ
    

XYZ をスーパーユーザ 32 文字の token_auth
に置き換えてください。token_authを見つけるには、Matomoのスーパーユーザーとしてログインし、トップメニューのAdministrationリンクをクリックし、
Personalに移動し、Securityをクリックします。下にスクロールすると、新しいToken_auth を作成する場所があります

  • セキュリティのため、可能であればtoken_authパラメーターをURLhttps://matomo.your-server.example/path/to/matomo/misc/cron/archive.php
    POSTすることをお勧めします。(token_authをGETパラメータとして送信する代わりに)
  • ブラウザにURLを貼り付けてウェブクーロンをテストし、処理が終了するまで数分待ってから出力を確認してください。
  • ウェブクーロンは少なくとも1時間に1回起動する必要があります。
    また、’ウェブサイト監視’サービス(無料または有料)を使って、このページを1時間ごとに自動的に要求することもできます。

中〜高トラフィックウェブサイトのための重要なヒント


Matomoアーカイブのブラウザトリガーを無効にし、Matomoレポートの更新を1時間ごとに制限する。

上記で説明したように自動アーカイブスクリプトを設定した後、Matomoを設定して、ユーザインターフェイスでの要求がアーカイブをトリガせず、
代わりに事前にアーカイブされたレポートを読み込むようにすることができます。スーパーユーザーとしてログインし【管理】> 【システム】 > 【一般設定】を選択する:

  • ブラウザから閲覧したレポートをアーカイブする:いいえ
  • アーカイブは最大でX秒ごとに報告される:3600

保存をクリックして変更を保存します。これでアーカイブクーロンの設定と、
これら2つの設定の変更が完了し、Matomoでリアルタイムに近い高速な前処理済みレポートを楽しむことができます!

the general settings with the options above highlighted

本日の統計の有効期限は1時間で、1時間ごとにレポートが処理されます。(ほぼリアルタイム)

PHPのメモリ制限を増やす

このエラーが表示されたら

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate X bytes)
    

これらを使用するには、PHP に割り当てるメモリを増やす必要があります。
Matomoがウェブ解析レポートを処理するのに十分なメモリを確保するには、メモリの上限を増やしてください。
データ量が少なかったり、有効な機能が少なかったりするサイトでは、512M または 2Gを使用できます。
(問題が解決しない場合は、さらに設定を増やすことをお勧めします。中規模から大規模の Matomo インスタンスでは、8G が一般的なサイズです)。

memory_limit = 512M
    

サーバー上のphp.iniファイルがどこにあるか調べるには、以下の手順に従ってください:
test.phpファイルを作成し、以下のコード追加します:

 <?php phpinfo(); ?>
    

実行してブラウザで開くと、ウェブサーバ上で動作しているPHPが実際に読み込んでいるファイルが表示されます。
また、現在設定されているmax_execution_timeの値も表示されます。

高トラフィックサーバーのヒント

Matomoを使用して、数百、数千のウェブサイトの月間数百万ページを追跡することが可能です。
上記で説明したようにcronアーカイブをセットアップしたら、Matomoのパフォーマンスを向上させるための重要で簡単なステップが他にもあります。

詳しくはMatomoを高速に設定する方法.

Matomo Archivingについての詳細情報

  • 1日に数回アーカイブを実行すると、今日のレポートだけでなく、今日を含む日付範囲(現在の週、現在の月など)のレポートも再アーカイブされます。
  • Matomoデータベースのサイズは時間とともに大きくなります。
    Matomoは、不完全な期間に処理されたアーカイブを削除しますが(例えば、今週の途中で1週間アーカイブした場合など)
    他のアーカイブを削除することはありません。つまり、MySQLテーブルには毎日、毎週、毎月、毎年のアーカイブが存在することになります。
    これにより、非常に高速なUIレスポンスとデータアクセスが保証されますが、ディスク容量が必要になります。
  • Matomo の今日のレポートのアーカイブは、インクリメンタルではありません。
    1日に数回アーカイブを実行しても、数週間、数ヶ月、1年分のアーカイブに必要なメモリを減らすことはできません。
    Matomoは、その日のレポートを処理するために、その日のすべてのログを読み込みます。
  • 日/週/月/年の処理が完了すると、Matomoによって再処理されることなくキャッシュされます。
  • アーカイブを自動的に実行するように設定しないと、ユーザがMatomoレポートを要求したときにアーカイブが実行されます。
    これは時間がかかり、ユーザーエクスペリエンスを低下させます(ユーザーはN秒待つ必要があります)
    そのため、以下のように自動アーカイブを設定することをお勧めします。
    中規模から大規模のウェブサイト(詳しくはクリック)上記で説明した通りである。
  • デフォルトでは、Matomo アーカイブのブラウザトリガーを無効にしても、期待されるようなアーカイブのトリガーが完全に無効になるわけではありません。
    Matomoを閲覧しているユーザは、ある特定のケースにおいてアーカイブの処理をトリガすることができます。
    カスタムセグメントが使用されます。
    Matomoのユーザがデータ処理をトリガしないようにするには、config.ini.phpファイルの[General]カテゴリーの下に以下の設定を追加する必要があります:

    ; disable browser trigger archiving for all requests (even those with a segment)
        browser_archiving_disabled_enforce = 1
        

core:archiveコマンドのヘルプ

以下はこのコマンドのヘルプ出力である:

$ ./console help core:archive
    Usage:
     core:archive [--url="..."] [--skip-idsites[="..."]] [--skip-all-segments] [--force-idsites[="..."]] [--skip-segments-today] [--force-  periods[="..."]] [--force-date-last-n[="..."]] [--force-date-range[="..."]] [--force-idsegments="..."] [--concurrent-requests-per-website[="..."]] [--concurrent-archivers[="..."]] [--max-websites-to-process="..."] [--max-archives-to-process="..."] [--disable-scheduled-tasks] [--accept-invalid-ssl-certificate] [--php-cli-options[="..."]] [--force-all-websites] [--force-report[="..."]]
    
    Options:
     --url                              Forces the value of this option to be used as the URL to Matomo. 
                                        If your system does not support archiving with CLI processes, you may need to set this in order for the   archiving HTTP requests to use the desired URLs.
     --skip-idsites                     If specified, archiving will be skipped for these websites (in case these website ids would have been archived).
     --skip-all-segments                If specified, all segments will be skipped during archiving.
     --force-idsites                    If specified, archiving will be processed only for these Sites Ids (comma separated)
     --skip-segments-today              If specified, segments will be only archived for yesterday, but not today. If the segment was created or changed recently, then it will still be archived for today and the setting will be ignored for this segment.
     --force-periods                    If specified, archiving will be processed only for these Periods (comma separated eg. day,week,month,year,range)
     --force-date-last-n                Deprecated. Please use the "process_new_segments_from" INI configuration option instead.
     --force-date-range                 If specified, archiving will be processed only for periods included in this date range. Format: YYYY-MM-DD,YYYY-MM-DD
     --force-idsegments                 If specified, only these segments will be processed (if the segment should be applied to a site in the first place).
                                        Specify stored segment IDs, not the segments themselves, eg, 1,2,3. 
                                        Note: if identical segments exist w/ different IDs, they will both be skipped, even if you only supply one ID.
     --concurrent-requests-per-website  When processing a website and its segments, number of requests to process in parallel (default: 3)
     --concurrent-archivers             The number of max archivers to run in parallel. Depending on how you start the archiver as a cronjob, you  may need to double the amount of archivers allowed if the same process appears twice in the `ps ex` output. (default: false)
     --max-websites-to-process          Maximum number of websites to process during a single execution of the archiver. Can be used to limit the process lifetime e.g. to avoid increasing memory usage.
     --max-archives-to-process          Maximum number of archives to process during a single execution of the archiver. Can be used to limit the process lifetime e.g. to avoid increasing memory usage.
     --disable-scheduled-tasks          Skips executing Scheduled tasks (sending scheduled reports, db optimization, etc.).
     --accept-invalid-ssl-certificate   It is _NOT_ recommended to use this argument. Instead, you should use a valid SSL certificate!
                                        It can be useful if you specified --url=https://... or if you are using Matomo with force_ssl=1
     --php-cli-options                  Forwards the PHP configuration options to the PHP CLI command. For example "-d memory_limit=8G". Note:  These options are only applied if the archiver actually uses CLI and not HTTP. (default: "")
     --force-all-websites               Force archiving all websites.
     --force-report                     If specified, only processes invalidations for a specific report in a specific plugin. Value must be in the format of "MyPlugin.myReport".
     --help (-h)                        Display this help message
     --quiet (-q)                       Do not output any message
     --verbose (-v|vv|vvv)              Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
     --version (-V)                     Display this application version
     --ansi                             Force ANSI output
     --no-ansi                          Disable ANSI output
     --no-interaction (-n)              Do not ask any interactive question
     --matomo-domain                    Matomo URL (protocol and domain) eg. "http://matomo.example.org"
     --xhprof                           Enable profiling with XHProf
    
    Help:
     * It is recommended to run the script without any option.
     * This script should be executed every hour via crontab, or as a daemon.
     * You can also run it via http:// by specifying the Super User &token_auth=XYZ as a parameter ('Web Cron'),
       but it is recommended to run it via command line/CLI instead.
     * If you have any suggestion about this script, please let the team know at feedback@matomo.org
     * Enjoy!
    

core:archiveの出力を理解する

core:archive出力ログは、アーカイバプロセスに関する有益な情報、特にどのウェブサイトとセグメントが処理されているかを表示します。出力は特に次のことを示している:

  • どのウェブサイトIDが現在アーカイブされているか:INFO [2020-03-31 21:16:29] 23146 Will pre-process for website id = 1, period = month, date = last3.
  • この例では25のセグメントがあります:INFO [2020-03-31 21:16:29] 23146 - pre-processing segment 1/25 countryName!=Algeria March 29, 2022​​.
  • この例では、3つのウェブサイトのうち2つのウェブサイトの処理が終了しています:INFO [2020-03-31 21:17:07] 23146 Archived website id = 3, 4 API requests, Time elapsed: 18.622s [2/3 done]​.
  • concurrent-archiversを使ってcore:archiveプロセスを実行している場合は、タイムスタンプの後ろの数字を見れば、同時実行中のアーカイバを見分けることができます。:INFO [2020-03-31 21:17:07] 23146​​ […]同時に実行されるアーカイバはそれぞれ異なる番号を持つ。そのため、ログからこの番号をgrepすれば、特定のcore:archiveスレッドの出力を見つけることができます。また–concurrent-archivers-1に設定することもできます。