導入背景
長年利用されてきたオープンソースのウェブアクセス解析ツールAWStatsは、
2025年11月リリースのバージョン8.0を最後に開発およびアップデートが終了しました。
公式サイトでも後継ツールとしてmatomoへの移行が推奨されていることから、matomoを導入することにしました。
AWStatsとmatomoはどちらもオープンソースのアクセス解析ツールですが、
設計思想と動作方式には大きな違いがあります。
AWStatsはログ解析型ツールであり、Webサーバが出力するアクセスログを直接解析します。
JavaScriptを必要とせず、過去のログを遡って解析できる点が特徴で、
CGI(Perl)として比較的シンプルな構成で動作します。
一方、matomoはPHPとSQLデータベースを用いたWebアプリケーション型の解析ツールです。
主にHTMLに埋め込んだJavaScriptトラッキングコードによってアクセス情報を収集し、
リアルタイム性の高い解析や、画面サイズ・滞在時間といったクライアント側の詳細な情報を取得できます。
そのため、LAMP/LEMP構成を前提としたサーバ常駐型アプリケーションとなっています。
また、matomoはオンプレミス環境での運用が可能であり、
GDPRをはじめとしたプライバシー保護機能が標準で実装されている点も特徴です。
Google Analytics の代替として採用されるケースも多いようです。
Dockerコンテナで運用します。
matomoのURLへアクセスし、以下のガイダンスに従い設定してください。
注) トラッキングコードの設定はサイトの属性などにより異なるため、ここでは飛ばして構いません。インストール手続きが終了後設定。
Discourseに導入
テーマのコンポーネントとしてインストール
APIでログファイルを読み込むには
matomoが提示するスクリプトをサイトコンテンツのコードに直接組込むのではなく、NginxなどのサーバのアクセスログをmatomoのAPIを通じて読み込むことで、内部処理した結果を表示するようにもできます。コンテンツのコードを改変する必要がないため、リアルタイムでのアクセス状況を監視する用途でなければ、こちらの方法を推奨します。
Nginxコンテナのアクセスログをホストと共有
Nginxコンテナ内のログをホストと共有するため、以下をNginxのvolumesセクションに追加します。
volumes:
- /path_to_shared_directory:/var/log/nginx
共有ログの更新
ログの更新をホストのlogrotateで行うため、そのための設定ファイルを作成します。
ex) /etc/logrotate.d/nginx
/path_to_shared_directory/nginx/*.log {
hourly
missingok
rotate 24
compress
delaycompress
notifempty
sharedscripts
postrotate
docker compose kill -s USR1 nginx_container_name
endscript
}
ログのアップロード
共有ログをmatomoに実装されたpythonスクリプトでAPI経由でmatomoにアップロードします。アップロードには以下の認証トークンが必要です。
管理 → 個人用 → セキュリティ で認証トークンを作成してください。
pythonスクリプトはmatomoコンテナからホストにコピーしてください。
$ docker cp matomo:/var/www/html/misc/log-analytics/import_logs.py ./
ログのアップロードコマンドは以下の通りです。注)参照
$ python3 "$IMPORT_SCRIPT" \
--url="$MATOMO_URL" \
--idsite="$SITE_ID" \
--token-auth="$TOKEN" \
--recorders=2 \
"$LOG_PATH"
ログ更新とアップロードの自動化
ホストのcronジョブで、ログの更新とアップロードをスケジュール管理します。注)参照
$ sudo crontab -e
# 毎時0分:強制回転(access.log.1 が作られる)
0 * * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx
# 毎時5分:メインサイトのログをインポート
5 * * * * python3 "$IMPORT_SCRIPT" --url="$MATOMO_URL" --idsite="$SITE_ID" --token-auth="$TOKEN" --recorders=2 "$LOG_PATH"
注 ) 下記変数は、直接使用するものと置換えて下さい。
- IMPORT_SCRIPT : import_logs.py
- MATOMO_URL : https://matomo.example.com/
- SITE_ID : matomoで指定したサイトのID(管理 → ウェブサイト)
- TOKEN : 認証トークン
- LOG_PATH : 共有ログファイルまでのパス(access.log.1)