1. 目的
- Cloudflare Tunnel(cloudflared)経由のアクセスで、訪問者の生のIPアドレス(IPv4/IPv6)を正しくApacheログに記録する。
- WordPress特有の内部通信(Heartbeat、疑似Cron)や、管理者自身のアクセス、Cloudflareのヘルスチェックなどの「PV計測におけるノイズ」を完全排除したレポートを自動生成する。
2. ログ除外フィルター対象(5大ノイズ)
| 除外ターゲット | 正規表現 | 除外理由 |
| WordPress管理画面 | /wp-admin/ | 記事編集時に数十秒おきに走る自動保存通信(Heartbeat / admin-ajax.php)の蓄積防止。 |
| ログイン画面 | /wp-login\.php | 不正ログインを狙うBotの総当たり攻撃(ブルートフォース)ログの排除。 |
| 管理者(自分)のIP | 240d:f:660: | 自身のサイト確認や記事プレビューによるPV水増しの防止(※IPv6の先頭セグメントを指定)。 |
| Cloudflare生存確認 | [0-9a-f]{32}\.txt | トンネル接続確認のために自動送信されるランダム英数字txtへのアクセス。放置すると404エラーパネルを埋め尽くす。 |
| WordPress疑似Cron | /wp-cron\.php | 予約投稿などのためにWPが内部で自分自身を呼び出すシステム通信のカット。 |
3. 更新スクリプトの実装
Cron環境の最小限の PATH 対策として、コマンドはすべてフルパスで記述する。
Bash
[root@almalinux ~]# vi /root/update_report.sh
#!/bin/bash
export LANG="ja_JP.UTF-8"
# 5大ノイズをgrepで一括排除し、パイプでgoaccessに流し込んでレポートを上書き生成
/usr/bin/grep -v -E '/wp-admin/|/wp-login\.php|240d:f:660:|[0-9a-f]{32}\.txt|/wp-cron\.php' /var/log/httpd/access_log | /usr/bin/goaccess - -o /var/www/html/report.html --log-format=COMBINEDBash
# パーミッション付与:
[root@almalinux ~]# chmod +x /root/update_report.sh4. ⚠️ 【最重要】「設定したのに自分のIPやノイズが消えない」ときの対処
原因(ゾンビ復活の正体)
- ブラウザの開きっぱなし(WebSocket):
GoAccessの画面を開いたままだと、ブラウザのメモリ上に古い集計データが保持され続け、サーバーを初期化しても古い記憶と合算されてしまう。 - 出力ファイルの仕様:
既存のreport.htmlがあると、GoAccessはそこにデータをマージ(追記)してしまう。 - システムキャッシュ:
共通設定によっては、/var/lib/goaccess/等にバイナリDBが保持され、そこからデータが復元されてしまう。
🔥 強制リセット・クリーンアップ手順(何かあったらこれを叩く)
古いレポートファイルを物理的に削除し、生ログを初期化した状態でゼロからスクリプトを叩き直す。
Bash
# 1. サーバーの隠し永続化キャッシュ(データベース)を物理削除
[root@almalinux ~]# rm -rf /var/lib/goaccess/* /tmp/goaccess*
# 2. 過去のデータが保持されているレポートHTMLファイルを削除
[root@almalinux ~]# rm -f /var/www/html/report.html
# 3. 蓄積された古い生ログファイルの中身を空(サイズ0)にする
[root@almalinux ~]# truncate -s 0 /var/log/httpd/access_log
# 4. 更新スクリプトを手動実行し、真っ新な状態からクリーンなレポートを再生成
[root@almalinux ~]# /root/update_report.sh※実行後はブラウザ側で Ctrl + F5(スーパーリロード)をかける。
5. 反映ログの確認
Bash
# RELOAD が出ていればOK
[root@almalinux ~]# tail -f /var/log/cron


コメント