Nginx日志格式配置的實(shí)現(xiàn)
Nginx日志格式配置
Nginx日志一般有main格式(默認(rèn))和json格式兩種
對比總結(jié)
特性 | 默認(rèn)文本格式 | JSON 格式 |
---|---|---|
性能 | 高性能,占用資源低 | 解析耗時(shí),CPU 占用相對較高 |
磁盤占用 | 日志簡短,占用小 | 每個(gè)字段都帶有名稱,占用較大 |
日志分析 | 需要手動解析,較為復(fù)雜 | 結(jié)構(gòu)化數(shù)據(jù),分析工具集成方便 |
可讀性 | 人眼查看方便 | 不直觀,主要靠日志系統(tǒng)查看 |
擴(kuò)展性 | 不方便添加新字段 | 靈活添加新字段 |
集成性 | 兼容傳統(tǒng)日志工具 | 適合與 ELK、EFK 進(jìn)行日志對接 |
?? 最佳實(shí)踐
- 性能優(yōu)先: 如果服務(wù)器性能不足,優(yōu)先使用文本格式。
- 日志分析優(yōu)先: 如果要進(jìn)行集中化日志分析(如 ELK),優(yōu)先使用JSON 格式。
- 日志分級: 錯(cuò)誤日志使用文本格式,訪問日志使用 JSON 格式,這樣既能高效記錄錯(cuò)誤,又能對業(yè)務(wù)數(shù)據(jù)進(jìn)行分析。
- 日志切割與歸檔: 及時(shí)進(jìn)行日志切割和清理,避免磁盤爆滿。
?? 總結(jié)
- 默認(rèn)文本格式: 高性能,低資源消耗,適合輕量級或性能要求高的生產(chǎn)環(huán)境。
- JSON 格式: 結(jié)構(gòu)化日志,便于分析和監(jiān)控,適合現(xiàn)代化運(yùn)維和日志管理需求。
一、main 日志變量
1. 請求相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$remote_addr | 客戶端的 IP 地址 | 192.168.1.1 |
$remote_user | 客戶端的認(rèn)證用戶名 | admin |
$request | 請求的完整字符串(方法 + URI + 協(xié)議) | GET /index.html HTTP/1.1 |
$request_method | 請求的方法 | GET, POST |
$request_uri | 原始的請求 URI(包括參數(shù)) | /index.html?user=123 |
$uri | 請求的 URI,不包括查詢參數(shù) | /index.html |
$args | 請求的查詢參數(shù)字符串 | user=123&name=abc |
$query_string | 與 $args 等效,查詢字符串 | user=123&name=abc |
$status | 響應(yīng)的 HTTP 狀態(tài)碼 | 200, 404 |
$body_bytes_sent | 響應(yīng)體大?。ㄗ止?jié)數(shù)) | 2048 |
$http_referer | 引薦頁面 URL | http://example.com/ |
$http_user_agent | 客戶端的瀏覽器信息 | Mozilla/5.0 (Windows NT) |
2. 時(shí)間相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$time_local | 本地時(shí)間戳 | 19/Mar/2025:04:03:51 +0800 |
$time_iso8601 | ISO 8601 格式的時(shí)間戳 | 2025-03-19T04:03:51+08:00 |
$msec | 精確到毫秒的 Unix 時(shí)間戳 | 1614768000.123 |
3. 客戶端相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$remote_addr | 客戶端的 IP 地址 | 192.168.1.1 |
$remote_port | 客戶端的端口號 | 52345 |
$http_x_forwarded_for | 客戶端的原始 IP 地址,通常用于代理鏈路中 | 192.168.1.1 |
$http_user_agent | 客戶端的 User-Agent 信息 | Mozilla/5.0 (Windows NT) |
$http_referer | 請求的來源 URL(如果有的話) | http://example.com/ |
4. 上游服務(wù)器相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$upstream_addr | 上游服務(wù)器的地址(包括端口) | 127.0.0.1:8080 |
$upstream_status | 上游服務(wù)器響應(yīng)的狀態(tài)碼 | 200, 502 |
$upstream_response_time | 上游服務(wù)器的響應(yīng)時(shí)間(秒) | 0.125 |
$upstream_connect_time | 與上游服務(wù)器建立連接的時(shí)間 | 0.050 |
5. 請求處理相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$request_time | 處理請求所花費(fèi)的總時(shí)間(秒) | 0.123 |
$response_time | 響應(yīng)返回的總時(shí)間(秒) | 0.098 |
$upstream_response_time | 從上游服務(wù)器接收到響應(yīng)的時(shí)間(秒) | 0.125 |
$pipe | 是否通過管道連接處理請求,p 表示是,. 表示不是 | p |
6. Nginx 內(nèi)部變量
變量名 | 含義 | 示例值 |
---|---|---|
$hostname | Nginx 主機(jī)名 | nginx-server |
$server_name | 當(dāng)前處理請求的服務(wù)器名稱 | www.example.com |
$server_addr | 當(dāng)前處理請求的服務(wù)器 IP 地址 | 192.168.1.1 |
$nginx_version | 當(dāng)前 Nginx 的版本號 | 1.21.3 |
示例配置:Nginx 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main
#輸出結(jié)果
192.168.200.1 - - [19/Mar/2025:03:26:35 -0400] "GET /prod-api/captchaImage HTTP/1.1" 200 4137 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"
192.168.200.1 - - [19/Mar/2025:03:26:40 -0400] "POST /prod-api/login HTTP/1.1" 200 239 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"
字段含義:
- time:
- 日志時(shí)間戳,采用 ISO 8601 格式。
"2025-03-19T04:51:55-04:00"
:表示 2025 年 3 月 19 日,04:51:55(-04:00 時(shí)區(qū))。
- 日志時(shí)間戳,采用 ISO 8601 格式。
- request_time:
- 請求總耗時(shí),單位是秒。
"0.000"
:表示從接收到請求到返回響應(yīng)的時(shí)間為 0 秒,響應(yīng)極快。
- 請求總耗時(shí),單位是秒。
- upstream_response_time:
- 上游服務(wù)器(如 Tomcat)響應(yīng)時(shí)間,單位是秒。
"-"
:表示當(dāng)前請求沒有經(jīng)過上游服務(wù)器(如靜態(tài)資源請求)。
- 上游服務(wù)器(如 Tomcat)響應(yīng)時(shí)間,單位是秒。
- remote_addr:
- 客戶端 IP 地址。
"192.168.200.1"
:請求是從該 IP 地址發(fā)出的。
- 客戶端 IP 地址。
- remote_user:
- 遠(yuǎn)程用戶的身份認(rèn)證信息。
"-"
:表示未進(jìn)行身份認(rèn)證(或不涉及認(rèn)證)。
- 遠(yuǎn)程用戶的身份認(rèn)證信息。
- request:
- 請求行,包含請求方法、資源路徑和協(xié)議版本。
"GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1"
:表示發(fā)起了 GET 請求,訪問了指定的靜態(tài)資源文件。
- 請求行,包含請求方法、資源路徑和協(xié)議版本。
- status:
- 響應(yīng)狀態(tài)碼,表示請求處理結(jié)果。
"200"
:請求成功。
- 響應(yīng)狀態(tài)碼,表示請求處理結(jié)果。
- body_bytes_sent:
- 發(fā)送給客戶端的響應(yīng)體字節(jié)數(shù)。
"10029"
:表示響應(yīng)體大小為 10029 字節(jié)。
- 發(fā)送給客戶端的響應(yīng)體字節(jié)數(shù)。
- http_referer:
- 請求來源的 URL,表示請求是從哪個(gè)頁面發(fā)起的。
"http://192.168.200.14/monitor/druid"
:表示從監(jiān)控頁面發(fā)起的請求。
- 請求來源的 URL,表示請求是從哪個(gè)頁面發(fā)起的。
- http_user_agent:
- 客戶端的用戶代理信息,通常包含瀏覽器和操作系統(tǒng)信息。
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
- 客戶端的用戶代理信息,通常包含瀏覽器和操作系統(tǒng)信息。
- http_x_forwarded_for:
- 用于記錄客戶端真實(shí) IP 地址,通常用于反向代理或負(fù)載均衡場景。
"-"
:表示沒有經(jīng)過代理或沒有攜帶該頭信息。
- 用于記錄客戶端真實(shí) IP 地址,通常用于反向代理或負(fù)載均衡場景。
二、Json常用變量
1.請求相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$request | 請求的完整字符串(方法+URI+協(xié)議) | GET /index.html HTTP/1.1 |
$request_method | 請求方法 | GET, POST, PUT, DELETE |
$request_uri | 原始請求的 URI(包含參數(shù)) | /index.html?user=123 |
$uri | 請求的 URI(不含參數(shù)) | /index.html |
$args | 請求的參數(shù)字符串 | user=123&name=abc |
$query_string | 與 $args 等效 | user=123&name=abc |
$status | 響應(yīng)狀態(tài)碼 | 200, 404, 500 |
$protocol | 請求協(xié)議 | HTTP/1.1, HTTP/2.0 |
$host | 請求主機(jī)名 | www.example.com |
$server_name | 服務(wù)器名稱 | example.com |
$server_port | 服務(wù)器端口 | 80, 443 |
2.時(shí)間和日期相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$time_iso8601 | ISO 8601 格式的時(shí)間戳 | 2025-03-19T04:03:51+08:00 |
$time_local | 本地時(shí)間戳 | 19/Mar/2025:04:03:51 +0800 |
$msec | 精確到毫秒的時(shí)間戳(Unix 時(shí)間戳) | 1614768000.123 |
3.客戶端和用戶相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$remote_addr | 客戶端 IP 地址 | 192.168.1.1 |
$remote_port | 客戶端端口 | 52345 |
$remote_user | 已經(jīng)認(rèn)證的用戶名 | admin |
$http_user_agent | 用戶代理字符串 | Mozilla/5.0 (Windows NT 10.0...) |
$http_referer | 引薦頁面 | http://example.com/page.html |
$http_x_forwarded_for | 代理服務(wù)器轉(zhuǎn)發(fā)的原始客戶端 IP 地址 | 192.168.1.1, 172.16.0.1 |
4.上游和代理相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$upstream_addr | 上游服務(wù)器地址(IP:端口) | 127.0.0.1:8080 |
$upstream_status | 上游服務(wù)器返回的狀態(tài)碼 | 200, 502 |
$upstream_response_time | 上游服務(wù)器響應(yīng)時(shí)間(秒) | 0.125 |
$upstream_connect_time | 連接上游服務(wù)器所花費(fèi)的時(shí)間(秒) | 0.050 |
$upstream_header_time | 上游服務(wù)器響應(yīng)頭時(shí)間(秒) | 0.075 |
5.請求處理和性能相關(guān)變量
變量名 | 含義 | 示例值 |
---|---|---|
$request_time | 請求從接收到響應(yīng)完成的總時(shí)間(秒) | 0.245 |
$body_bytes_sent | 發(fā)送給客戶端的響應(yīng)字節(jié)數(shù)(不含響應(yīng)頭) | 1024 |
$bytes_sent | 發(fā)送的總字節(jié)數(shù)(包含響應(yīng)頭) | 2048 |
$connection | 連接的序列號 | 12345 |
$connection_requests | 當(dāng)前連接上處理的請求數(shù) | 5 |
6.系統(tǒng)和環(huán)境變量
變量名 | 含義 | 示例值 |
---|---|---|
$pid | 處理請求的工作進(jìn)程 ID | 1234 |
$pipe | 表示請求是否通過管道傳輸 | p(管道),.(直接連接) |
示例:JSON 日志格式配置
log_format json '{"time":"$time_iso8601",' '"request_time":$request_time,' '"upstream_response_time":"$upstream_response_time",' '"remote_addr":"$remote_addr",' '"remote_user":"$remote_user",' '"request":"$request",' '"status":$status,' '"body_bytes_sent":$body_bytes_sent,' '"http_referer":"$http_referer",' '"http_user_agent":"$http_user_agent",' '"http_x_forwarded_for":"$http_x_forwarded_for"}'; access_log /var/log/nginx/access.log json;
#輸出結(jié)果
{"time":"2025-03-19T04:51:55-04:00","request_time":0.000,"upstream_response_time":"-","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1","status":200,"body_bytes_sent":10029,"http_referer":"http://192.168.200.14/monitor/druid","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}
{"time":"2025-03-19T04:51:56-04:00","request_time":0.010,"upstream_response_time":"0.009","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /prod-api/monitor/server HTTP/1.1","status":200,"body_bytes_sent":93,"http_referer":"http://192.168.200.14/monitor/server","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}
字段含義:
time:
- 日志時(shí)間戳,采用 ISO 8601 格式。
"2025-03-19T04:51:55-04:00"
:表示 2025 年 3 月 19 日,04:51:55(-04:00 時(shí)區(qū))。
request_time:
- 請求總耗時(shí),單位是秒。
"0.000"
:表示從接收到請求到返回響應(yīng)的時(shí)間為 0 秒,響應(yīng)極快。
upstream_response_time:
- 上游服務(wù)器(如 Tomcat)響應(yīng)時(shí)間,單位是秒。
"-"
:表示當(dāng)前請求沒有經(jīng)過上游服務(wù)器(如靜態(tài)資源請求)。
remote_addr:
- 客戶端 IP 地址。
"192.168.200.1"
:請求是從該 IP 地址發(fā)出的。
remote_user:
- 遠(yuǎn)程用戶的身份認(rèn)證信息。
"-"
:表示未進(jìn)行身份認(rèn)證(或不涉及認(rèn)證)。
request:
請求行,包含請求方法、資源路徑和協(xié)議版本。
"GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1"
GET
:HTTP 請求方法。/static/js/chunk-2d0bce05.7b94b559.js
:請求的資源路徑。HTTP/1.1
:協(xié)議版本。
status:
- HTTP 響應(yīng)狀態(tài)碼。
200
:表示請求成功。
body_bytes_sent:
- 響應(yīng)體的字節(jié)數(shù)。
10029
:表示響應(yīng)大小為 10029 字節(jié)(約 9.8 KB)。
http_referer:
- 引薦頁面,即從哪個(gè)頁面發(fā)起的請求。
"http://192.168.200.14/monitor/druid"
:用戶是從這個(gè)頁面發(fā)起的請求。
http_user_agent:
- 客戶端的瀏覽器和操作系統(tǒng)信息。
- 瀏覽器:Chrome 134.0.0.0
- 操作系統(tǒng):Windows 10 x64
http_x_forwarded_for:
- 用于識別通過代理服務(wù)器訪問的客戶端的真實(shí) IP。
"-"
:表示沒有經(jīng)過代理,或沒有傳遞該頭信息。
到此這篇關(guān)于Nginx日志格式配置的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx日志配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法
在進(jìn)行軟件安裝時(shí),若遇到報(bào)錯(cuò),常見的解決方法之一是檢查是否缺失依賴,并嘗試安裝所需的依賴包,記得去掉尖括號,對于nginx服務(wù)器,配置文件的位置和管理是關(guān)鍵操作之一,通過命令cd進(jìn)入后,使用sudo nano index.nginx-debian.html命令打開并編輯默認(rèn)的html文件2024-11-11詳解如何設(shè)置Nginx實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射
在 Nginx 中實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射是一種常見的做法,本文詳細(xì)介紹如何設(shè)置 Nginx 實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10Nginx使用ngx_http_upstream_module實(shí)現(xiàn)負(fù)載均衡功能示例
本文主要介紹了Nginx使用ngx_http_upstream_module實(shí)現(xiàn)負(fù)載均衡功能示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08