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