在nginx的访问日志中输出响应时间

出于性能调优的考虑,我觉得在nginx的访问日志中输出响应时间会非常有用,因此我将整理出相应的步骤。

默认的访问记录

nginx的访问日志在nginx.conf文件中定义。如果在nginx.conf文件中没有指定任何内容,日志将按照以下格式输出(称为combined格式)。

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
        		    '"$http_referer" "$http_user_agent"';

以下是各个变量的内容。

変数内容$remote_addrリクエストの送信元IPアドレス$remote_userユーザー名(ベーシック認証時等に使われる)$time_localリクエストの処理完了時刻$requestリクエストのHTTPメソッド、パス、HTTPのバージョン$statusレスポンスのHTTPステータスコード$body_bytes_sentレスポンスのボディのバイト数$http_refererリクエストのReferer(遷移元)の内容$http_user_agentリクエストのUser-Agentの内容

其他在访问日志中可用的变量

除了默认选项外,还可以使用各种不同的变量。
以下是一些似乎对性能测量和瓶颈定位有帮助的变量。

変数内容$request_methodリクエストのHTTPメソッド$request_uriリクエストのURI$request_timeリクエスト処理に要した時間$upstream_request_timenginxがリバースプロキシとして動作する場合に、プロキシ先からレスポンスを取得するまでの時間

设定的例子

以下是添加了上述变量的配置示例。
由于默认输出格式不易于在聚合工具等中处理,我们将其更改为json格式输出。
为了使时间(time)更易读,我们将其更改为$time_iso8601。

log_format json escape=json '{'
                            '"time":"$time_iso8601",'
                            '"host":"$remote_addr",'
                            '"method":"$request_method",'
                            '"uri":"$request_uri",'
                            '"status":"$status",'
                            '"body_bytes":"$body_bytes_sent",'
                            '"referer":"$http_referer",'
                            '"ua":"$http_user_agent",'
                            '"request_time":"$request_time",'
                            '"respons_time":"$upstream_response_time"'
                            '}';

$request_time和$upstream_request_time之间的区别

$request_time是指nginx从客户端接收到请求到返回响应所花费的时间,而$upstream_request_time则表示nginx向代理目标(例如应用服务器等)发送请求后,等待响应返回所花费的时间。

换句话说,$request_time大于$upstream_request_time的关系。

如果客户端的线路状况没有问题,这两个指标的值几乎相同。但是,如果客户端使用细线路或者通信状况不佳,则这两个指标的值会有很大的偏差。
因此,建议同时输出这两个指标,因为它们还可以成为发现网络瓶颈的提示。

广告
将在 10 秒后关闭
bannerAds