LEMP環境&Laravel だと、php-fpmのデフォルト設定では、アクセスログに必要な情報が出力されないので、
ログに出力できるパラメータをすべて実際に出力検証し、これはあったほうがいいなというものをまとめました。
アウトライン
- 環境情報
- デフォルトaccess.logフォーマット
- おすすめaccess.logフォーマット
- 解説
- 番外編
環境情報
- Centos7
- php7.4
- Laravel 6.0
- nginx1.16.1
- 対象設定ファイル:www.conf (php-fpm)
デフォルトのaccess.logフォーマット
以下はデフォルトの設定内容になります。
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フォーマット
そのため、色々試した結果、以下のようにフォーマットに変更しました。
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つのパラメータを追加・編集することで、 どのホスト・画面にアクセスがあったか、リクエスト処理に何**秒**かかったか さらには、遷移する前の滞在画面までわかるようになりました。
これでサービス運用していくうえで少しは助かるかと思います。
是非参考にしてください
##番外編
その他のパラメータで、使えそうだなと思ったけど、実際出力してみて
使えないと判断したパラメータ達です。
パラメータ | 説明 | 出力例 |
---|---|---|
%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 |