backcheck事業部の前田です。
今回は簡単なTips程度の話です。
結論だけ見たい人は結果の見出しへ
問題
私はよくnginx+php-fpmの構成で、Laravelを使います。
その際に、php-fpm側でもアクセスログを出しているのですが、デフォルトの設定だと以下のようになります。
172.18.0.7 - 31/Jul/2020:14:48:45 +0900 "GET index.php" 200 172.18.0.7 - 31/Jul/2020:14:48:47 +0900 "GET index.php" 200 172.18.0.7 - 31/Jul/2020:14:48:58 +0900 "PATCH index.php" 204
まぁ、すべてのリクエストを意図的にindex.phpに集めてるから、そうなるよねー・・・・という話です。
ただ、実際の運用では「どのファイルにアクセスしたか」よりも、「どのURIでアクセスしたか」が知りたいと思います。
なので、ここの index.php
の部分を実際にリクエストされたURIに変更したいと思います。
アクセスログのフォーマット指定
さて、URIをログに書き込むためには、ログのフォーマット形式を変更する必要がありそうです。
php-fpmのアクセスログのフォーマット指定は、php-fpmの設定ファイルで指定できます。
https://www.php.net/manual/ja/install.fpm.configuration.php#access-format
ここで、ログ形式のデフォルト値は
"%R - %u %t \"%m %r\" %s"
と書かれています。が、なんと肝心の各記号の意味が書かれていません!!
色々と探してみると、php-fpmのデフォルトの設定ファイルの中に書かれているようでした。
説明が大量にあるので、デフォルトのログの部分の説明だけ拾ってみます。
; %R: remote IP address
; %u: remote user
; %t: server time the request was received
; it can accept a strftime(3) format:
; %d/%b/%Y:%H:%M:%S %z (default)
; The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
; %m: request method
; %r: the request URI (without the query string, see %q and %Q)
; %s: status (response code)
・・・ということで、 %r
が index.php
に該当していることがわかります。
ここを、リクエストURIに置き換えれば良さそうです。
リクエストURIの取得
置き換える場所がわかったので、リクエストURIはどのように取得すれば良いかを調べます。
先ほどの各記号の説明をざっと読んでもそれらしきものは見当たらなかったのですが、じっくり読むと、以下が使えそうです。
; %e: an environment variable (same as $ENV or $SERVER)
; it must be associated with embraces to specify the name of the env
; variable. Some examples:
; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
リクエストURIは $_SERVER['REQUEST_URI']
に入っているので、 %{REQUEST_URI}e
と書けば良さそうです。
結果
まとめると、以下のような修正を行いました。
[www] ;access.format = "%R - %u %t \"%m %r\" %s" access.format = "%R - %u %t \"%m %{REQUEST_URI}e\" %s"
そしてログを確認すると・・・
172.18.0.7 - 31/Jul/2020:14:48:45 +0900 "GET /api/posts" 200 172.18.0.7 - 31/Jul/2020:14:48:47 +0900 "GET /api/posts/5/comments" 200 172.18.0.7 - 31/Jul/2020:14:48:58 +0900 "PATCH /api/posts/5/comments/12" 204