5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

php-fpmアクセスログのおすすめ設定(www.conf)

Last updated at Posted at 2020-08-15

LEMP環境&Laravel だと、php-fpmのデフォルト設定では、アクセスログに必要な情報が出力されないので、
ログに出力できるパラメータをすべて実際に出力検証し、これはあったほうがいいなというものをまとめました。

アウトライン

  • 環境情報
  • デフォルトaccess.logフォーマット
  • おすすめaccess.logフォーマット
  • 解説
  • 番外編

環境情報

  • Centos7
  • php7.4
  • Laravel 6.0
  • nginx1.16.1
  • 対象設定ファイル:www.conf (php-fpm)

デフォルトのaccess.logフォーマット

以下はデフォルトの設定内容になります。

www.conf
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

※アクセスログフォーマットに設定可能なパラメータの簡易解説
 %C : CPU 使用率
  %d : リクエストの処理にかかった時間
  %e : 環境変数($ _ENV / $ _SERVER)
  %f : script filename
  %l : content-length of the request (for POST request only)
  %m : request method
  %M : PHPで使用したメモリのピーク
 %n : pool name
  %o : output header
  %p : PID of the child that serviced the request
  %P : PID of the parent of the child that serviced the request
  %q : クエリストリング
  %Q : the '?' character if query string exists
  %r : the request URI (without the query string, see %q and %Q)
  %R : remote IP address
  %s : status (response code)
  %t : server time the request was received
  %T : time the log has been written (the request has finished)
  %u : remote user

実際にこの設定で出力される結果はこちら↓

192.168.1.1 - 1/Aug/2020:01:01:01 +0000 "GET /index.php" 200 /var/www/html/test.com/public/index.php 1111 12211 30.11%

これだと、ログ調査をする際、以下の問題点があります。

  • どの画面にアクセスがあったかわからない (出力されるパスは全て/var/www/html/test.com/public/index.php
  • 複数ホスト管理している場合、どのホストへアクセスされたものかわからない(全部ごっちゃになる)
  • リクエスト完了までにかかった時間が「ミリ」単位で見づらい

おすすめaccess.logフォーマット

そのため、色々試した結果、以下のようにフォーマットに変更しました。

www.conf
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{HTTP_HOST}e %{REQUEST_URI}e %q %{seconds}d %{kilo}M %C%% %{HTTP_REFERER}e"

このフォーマットで実際に出力される結果はこちら↓

192.168.1.1 - 1/Aug/2020:01:01:01 +0000 "GET /index.php" 200 /var/www/html/test.com/public/index.php test.com:443 /test/home 1.111 12211 30.11% https://test.com:443/test/login

以下で解説します。

解説

追加・編集したパラメータは以下の5つになります。

パラメータ 説明 出力例
%{HTTP_HOST}e 現在のリクエストのHost:ヘッダ test.com:443
%{REQUEST_URI}e ページにアクセスするために指定されたURI /test/home
%q クエリストリング a=1
%{seconds}d リクエストの処理にかかった時間を秒数で表示 1.111
%{HTTP_REFERER}e 現在のページに遷移する前にユーザーが閲覧していたページのURL https://test.com:443/test/login

上でも説明がありましたが、「%e」で$_SERVER変数の値が取得できるので主にこちらを使用しました。
実際に出力してみた感じですと、使えそうな$_SERVER変数は上記ぐらいでしたが、お好みで追加してみてください。


まとめると、 上記5つのパラメータを追加・編集することで、 どのホスト・画面にアクセスがあったか、リクエスト処理に何**秒**かかったか さらには、遷移する前の滞在画面までわかるようになりました。

これでサービス運用していくうえで少しは助かるかと思います。
是非参考にしてください:sunny:

##番外編
その他のパラメータで、使えそうだなと思ったけど、実際出力してみて
使えないと判断したパラメータ達です。

パラメータ 説明 出力例
%r 説明では「the request URI」だが、ユーザーがアクセスしたURIではなかった。 /index.php
%R クライアントIPではなく、nginxサーバーのIPを取ってくるため今回は使えない。
IPに関してはnginxの方で取得すればOK。
192.168.1.1
%{REMOTE_ADDR}e %Rと同じ理由 192.168.1.1
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?