NoteStack

This page is a beginner-friendly guide to view and monitor CSP Report-Only logs (csp-received.log) safely: tail, follow mode, less, grep filtering, and quick troubleshooting for permissions and SELinux.

CSPログの見方:csp-received.log を安全に閲覧する(tail / less / grep)

CSP を Report-Only で運用開始できたら、次にやることはとてもシンプルです。「ログを見る」です。

ここで言うログとは、CSP違反レポートを受け取って保存しているファイル(例:csp-received.log)です。Report-Only はブロックしない代わりに、ブラウザから「どんな違反が起きたか」が送られてきます。つまりログを見れば、将来 “強制CSP” に移行するための材料が手に入ります。

このページでは、「とにかく中身を閲覧する」ことにだけ集中します。解析やダッシュボード化は後回しです。個人情報になりやすいドメイン名やパスは example.com などに置き換えて説明します。

このページでできるようになること
このページでは“まだやらないこと”

先に結論:まずはこの3つだけ覚えればOK

最初は、この3つを “使い分け” できれば十分です。

1) 最新だけサッと見る(まずはこれ)
sudo tail -n 50 /var/www/example.com/logs/csp-received.log

「今ちゃんとレポートが記録されているか」を最短で確認できます。

2) リアルタイムで追いかける(操作しながら確認)
sudo tail -f /var/www/example.com/logs/csp-received.log

ブラウザでページ操作しながら、ログが増えるかをその場で見られます。終了は Ctrl + C

3) 検索しながら読む(大量になってきたら便利)
sudo less /var/www/example.com/logs/csp-received.log

less は「スクロール」「検索」「行き来」ができるので、ログ閲覧に向いています。

前提チェック:ログファイルの場所と「権限」だけ確認

「見方」を説明する前に、まずはログファイルがどこにあるかと、読める状態かを確認します。

1) ログの配置(例)

よくある配置例です。あなたの環境ではパスが違うかもしれないので、設計書のパスに読み替えてください。

/var/www/example.com/
 ├ public/            (表示用)
 ├ csp/               (CSP受信口のPHPなど)
 └ logs/
     └ csp-received.log

2) 存在とサイズを確認

sudo ls -la /var/www/example.com/logs/csp-received.log
sudo stat /var/www/example.com/logs/csp-received.log

statModify(更新時刻)が最近になっていれば、少なくとも “ログが書かれている” 可能性が高いです。

3) SELinux を使っている場合(RHEL系)

ファイル権限が正しくても、SELinux が原因で「PHPが書けない」ことがあります。閲覧だけなら直接の原因にならないことも多いですが、ログが増えないときの切り分けで重要になります。

# logs ディレクトリの SELinux ラベルを見る
ls -ldZ /var/www/example.com/logs

方法A:最新だけを見る(tail)

tail は「末尾(最新行)」を見るコマンドです。ログは基本的に末尾に追記されるので、CSPログ閲覧と相性が良いです。

A-1) まずは 30〜100 行ぐらい

sudo tail -n 30 /var/www/example.com/logs/csp-received.log
sudo tail -n 100 /var/www/example.com/logs/csp-received.log
使いどころ
  • 「ログが出ているか」だけ確認したい
  • 直前に起きた違反を見たい
  • ファイルが大きくても軽い

A-2) “最後の1件だけ” 見たい(運用で便利)

sudo tail -n 1 /var/www/example.com/logs/csp-received.log

「今、1件でもレポートが入った?」を見たい時に便利です。

方法B:リアルタイム監視(tail -f)

tail -f は、ログファイルに追記された内容をそのまま流し続けて表示します。

B-1) 追跡を開始

sudo tail -f /var/www/example.com/logs/csp-received.log

B-2) こう使うと“原因が見つかりやすい”

  1. ターミナルAで tail -f を開始
  2. ターミナルB(またはブラウザ)で対象ページを開き、操作する
  3. 違反が起きた瞬間にログが増えるか確認

終了は Ctrl + C

使いどころ
  • 「どの操作で違反が出るか」を突き止めたい
  • 設定を変えた直後に、挙動が変わったか確認したい

方法C:検索しながら読む(less)

less は “ログ閲覧の定番” です。cat と違って、巨大ログでも比較的安全に扱えます。

C-1) 基本

sudo less /var/www/example.com/logs/csp-received.log

C-2) less の最低限の操作(これだけでOK)

/ で検索

例:blocked-uri を探す

/blocked-uri
n / N で次/前の一致
検索結果を巡回できます。
G(末尾) / g(先頭)
一気に移動できます。
q(終了)
less を閉じます。

C-3) 追記されるログを “less で追う”(便利)

sudo less +F /var/www/example.com/logs/csp-received.log

tail -f のように流れ続けます。Ctrl + C で止めると、スクロールや検索ができる状態になります。再開は F

方法D:必要な行だけ拾う(grep)

ログが増えてきたら、grep で “欲しい行だけ” 抜き出すのが楽です。

D-1) キーワードで抽出して、最新50件だけ見る

sudo grep -n "blocked-uri" /var/www/example.com/logs/csp-received.log | tail -n 50

-n を付けると行番号が出ます。あとで周辺を見たいときに便利です。

D-2) 周辺も一緒に見たい(行番号が分かった後)

行番号が 1234 だった場合、前後をまとめて表示する例です。

sudo sed -n '1210,1260p' /var/www/example.com/logs/csp-received.log

D-3) “今この瞬間の違反だけ” 追いたい(grep + tail -f)

ログの形式によっては行単位でフィルタできます(1行1レポート形式のときに向きます)。

sudo tail -f /var/www/example.com/logs/csp-received.log | grep --line-buffered "blocked-uri"

もしログが複数行にまたがる形式なら、この方法は向きません。その場合は less で検索するのがおすすめです。

やってはいけない:いきなり cat で全部表示

cat /path/to/csp-received.log は、ファイルが小さいうちは動きます。しかし運用が進むとログは増えます。

巨大化したログを cat で表示すると、ターミナルが固まったり、操作不能になったりします。

代わりに使うべきコマンド
  • 最新を見る:tail -n
  • リアルタイム:tail -f / less +F
  • 検索しながら:less
  • 抽出:grep

ログが「読めない」「増えない」時のチェック(最短)

ここは “つまずきポイント” なので、短いチェック手順を用意しておきます。

チェック1:そもそもファイルは存在する?

sudo ls -la /var/www/example.com/logs
sudo ls -la /var/www/example.com/logs/csp-received.log

チェック2:更新時刻は動いている?

sudo stat /var/www/example.com/logs/csp-received.log

チェック3:Nginx/PHPのエラーログに失敗が出ていない?

環境によりパスは違いますが、典型例です。

# Nginx
sudo tail -n 50 /var/log/nginx/error.log

# PHP-FPM
sudo tail -n 50 /var/log/php-fpm/error.log

チェック4:SELinux が拒否していない?(RHEL系)

sudo grep -i denied /var/log/audit/audit.log | tail -n 30

avc: denied が並んでいる場合は、SELinux が “安全のために止めている” サインです。disableはせず、ログディレクトリだけに適切なラベルを付けるのが正攻法です。

運用ルーティン例(迷わない最小手順)

1日1回:最新50行だけ確認
sudo tail -n 50 /var/www/example.com/logs/csp-received.log
設定変更の直後:リアルタイム監視しながらページ操作
sudo tail -f /var/www/example.com/logs/csp-received.log
原因調査:lessで検索(blocked-uri / violated-directive)
sudo less /var/www/example.com/logs/csp-received.log

よくある質問(FAQ)

Q. どのコマンドから始めればいいですか?

A. まずは tail -n 50 です。ログが出ているかを最短で確認できます。

Q. ログが増えません。どこから疑えばいいですか?

A. 次の順で切り分けるのが最短です:

  • 受信口にPOSTできているか(curl等)
  • Nginx/PHP-FPMのエラーログに失敗が出ていないか
  • SELinux の avc: denied が出ていないか
Q. lesstail -f の違いは?

A. tail -f は “流し続ける専用”。less は “読む・探す・行き来する”。大量になってきたら less が便利です。

Q. cat で見たらダメですか?

A. 小さいうちは動きますが、運用ログは増えます。巨大化すると固まりやすいので、基本は tail/less がおすすめです。