當(dāng)前位置 主頁(yè) > 技術(shù)大全 >
日志不僅記錄了服務(wù)器的各種活動(dòng),還提供了分析和排查問(wèn)題的關(guān)鍵信息
而log_format,作為設(shè)置日志格式的指令,其重要性不言而喻
本文將詳細(xì)介紹Linux中Nginx的log_format,展示其如何幫助管理員高效地記錄和分析服務(wù)器活動(dòng)
log_format的基本概念 log_format是指存儲(chǔ)日志時(shí)所采用的格式,它允許管理員自定義日志記錄的內(nèi)容,以滿足不同的需求
這一功能在Nginx的配置文件(通常是/usr/local/nginx/conf/nginx.conf)中進(jìn)行設(shè)置
通過(guò)設(shè)置log_format,管理員可以精確地指定日志中包含哪些信息,比如客戶端的IP地址、訪問(wèn)時(shí)間、請(qǐng)求狀態(tài)、用戶代理等
log_format的設(shè)置方法 在Nginx配置文件中,log_format的設(shè)置語(yǔ)法如下: log_format name【escape=default|json】 string ...; 其中,`name`表示定義的格式名稱,`string`表示定義的格式樣式
Nginx提供了一個(gè)默認(rèn)的combined日志格式,相當(dāng)于Apache的combined日志格式,但管理員也可以根據(jù)需要自定義日志格式
例如,一個(gè)典型的log_format設(shè)置如下: log_format main $remote_addr - $remote_user 【$time_local】 $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; 這個(gè)設(shè)置定義了名為main的日志格式,包含了以下信息: - `$remote_addr`:客戶端的IP地址
- `$remote_user`:客戶端用戶名稱(如果進(jìn)行了身份驗(yàn)證)
- `$time_local`:訪問(wèn)時(shí)間與時(shí)區(qū)
- `$request`:請(qǐng)求的URL與HTTP協(xié)議
- `$status`:請(qǐng)求狀態(tài)碼(例如,成功為200,頁(yè)面未找到為404)
- `$body_bytes_sent`:發(fā)送給客戶端的文件主體內(nèi)容大小
- `$http_referer`:記錄從哪個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的
- `$http_user_agent`:客戶端瀏覽器的相關(guān)信息
- `$http_x_forwarded_for`:在反向代理場(chǎng)景下,記錄客戶端的真實(shí)IP地址
log_format的實(shí)際應(yīng)用 設(shè)置了log_format之后,還需要在server字段中指定日志文件的存放路徑和格式
例如: server { listen 80; access_log logs/host.access.log main; # 其他配置... } 這樣,Nginx就會(huì)在寫入日志時(shí)采用main的格式
從access.log中提取的訪問(wèn)日志示例如下: 220.181.108.169 - - 【03/Apr/2015:19:07:52+0800】 GET /feed HTTP/1.1 499 0 - Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) - 27.159.224.22 - - 【03/Apr/2015:19:10:51+0800】 GET /p/5180.html HTTP/1.1 499 0 - Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727 ; .NET CLR 4.0.30319) - 這些日志記錄了每次訪問(wèn)的詳細(xì)信息,包括客戶端IP、訪問(wèn)時(shí)間、請(qǐng)求的URL、狀態(tài)碼、發(fā)送的字節(jié)數(shù)、引用頁(yè)和用戶代理等
這些信息對(duì)于分析用戶行為、監(jiān)控服務(wù)器性能和排查問(wèn)題非常有用
log_format的自定義與擴(kuò)展 除了默認(rèn)的combined和自定義的main格式外,log_format還支持更多的變量和參數(shù),以滿足更復(fù)雜的需求
例如: - `$http_host`:請(qǐng)求地址,即瀏覽器中輸入的地址(IP或域名)
- `$upstream_status`:上游服務(wù)器的狀態(tài)碼
- `$ssl_protocol`:SSL協(xié)議版本
- `$ssl_cipher`:交換數(shù)據(jù)中的加密算法
- `$upstream_addr`:后臺(tái)upstream的地址,即真正提供服務(wù)的主機(jī)地址
- `$request_time`:整個(gè)請(qǐng)求的總時(shí)間
- `$upstream_response_time`:請(qǐng)求過(guò)程中,上游服務(wù)器的響應(yīng)時(shí)間
通過(guò)添加這些變量,管理員可以獲取更詳細(xì)的信息,以進(jìn)一步分析服務(wù)器的性能和用戶行為
例如,一個(gè)更詳細(xì)的log_format設(shè)置可能如下: log_format detailed $remote_addr $remote_user【$time_local】 $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for $request_time $upstream_response_time $upstream_add