Nginx日志對于統(tǒng)計(jì)、系統(tǒng)服務(wù)排錯(cuò)很有用。Nginx日志主要分為兩種:access_log(訪問日志)和error_log(錯(cuò)誤日志)。通過訪問日志我們可以得到用戶的IP地址、瀏覽器的信息,請求的處理時(shí)間等信息。錯(cuò)誤日志記錄了訪問出錯(cuò)的信息,可以幫助我們定位錯(cuò)誤的原因。
訪問日志主要記錄客戶端的請求??蛻舳讼騈ginx服務(wù)器發(fā)起的每一次請求都記錄在這里??蛻舳薎P,瀏覽器信息,referer,請求處理時(shí)間,請求URL等都可以在訪問日志中得到。當(dāng)然具體要記錄哪些信息,你可以通過log_format指令定義。
錯(cuò)誤日志在Nginx中是通過error_log指令實(shí)現(xiàn)的。該指令記錄服務(wù)器和請求處理過程中的錯(cuò)誤信息。
Nginx中通過access_log和error_log指令配置訪問日志和錯(cuò)誤日志,通過log_format我們可以自定義日志格式。如果日志文件路徑中使用了變量,我們可以通過open_log_file_cache指令來設(shè)置緩存,提升性能。
一、訪問日志的配置
1.log_format
log_format用來設(shè)置日志格式,也就是日志文件中每條日志的格式,具體如下:
log_format name(格式名稱) type(格式樣式)
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" ' '$status $uptream_status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
$server_name:虛擬主機(jī)名稱。
$remote_addr:遠(yuǎn)程客戶端的IP地址。
-:空白,用一個(gè)“-”占位符替代,歷史原因?qū)е逻€存在。
$remote_user:遠(yuǎn)程客戶端用戶名稱,用于記錄瀏覽者進(jìn)行身份驗(yàn)證時(shí)提供的名字,如登錄百度的用戶名scq2099yt,如果沒有登錄就是空白。
[$time_local]:訪問的時(shí)間與時(shí)區(qū),比如18/Jul/201200:01 +0800,時(shí)間信息最后的"+0800"表示服務(wù)器所處時(shí)區(qū)位于UTC之后的8小時(shí)。
$request:請求的URI和HTTP協(xié)議,這是整個(gè)PV日志記錄中最有用的信息,記錄服務(wù)器收到一個(gè)什么樣的請求。
$status:記錄請求返回的http狀態(tài)碼,比如成功是200。
$uptream_status:upstream狀態(tài),比如成功是200。
$body_bytes_sent:發(fā)送給客戶端的文件主體內(nèi)容的大小,比如899,可以將日志每條記錄中的這個(gè)值累加起來以粗略估計(jì)服務(wù)器吞吐量。
$http_referer:記錄從哪個(gè)頁面鏈接訪問過來的。
$http_user_agent:客戶端瀏覽器信息
$http_x_forwarded_for:客戶端的真實(shí)ip,通常web服務(wù)器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址。反向代理服務(wù)器在轉(zhuǎn)發(fā)請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務(wù)器地址。
$ssl_protocol:SSL協(xié)議版本,比如TLSv1。
$ssl_cipher:交換數(shù)據(jù)中的算法,比如RC4-SHA。
$upstream_addr:upstream的地址,即真正提供服務(wù)的主機(jī)地址。
$request_time:整個(gè)請求的總時(shí)間。
$upstream_response_time:請求過程中,upstream的響應(yīng)時(shí)間。
需要注意的是:log_format配置必須放在http內(nèi),否則會(huì)出現(xiàn)如下警告信息:
nginx: [warn] the "log_format" directive may be used only on "http" level in /etc/nginx/nginx.conf:9
2.access_log
access_log指令用來指定日志文件的存放路徑(包含日志文件名)、格式和緩存大小,具體如下:
access_log path(存放路徑) [format(自定義日志格式名稱) [buffer=size] [gzip[=level]] [flush=time] [if=condition] ]
#設(shè)置訪問日志 #指定日志的寫入路徑為/var/logs/nginx-access.log,日志格式使用默認(rèn)的combined。 access_log /var/logs/nginx-access.log access_log logs/access.log main; #指定日志的寫入路徑為/var/logs/nginx-access.log,日志格式使用默認(rèn)的combined,指定日志的緩存大小為32k,日志寫入前啟用gzip進(jìn)行壓縮,壓縮比使用默認(rèn)值1,緩存數(shù)據(jù)有效時(shí)間為1分鐘。 access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m #關(guān)閉日志 access_log off; #能夠使用access_log指令的字段包括:http、server、location、limit_except。
path 指定日志的存放位置。
format 指定日志的格式。默認(rèn)使用預(yù)定義的combined。
buffer 用來指定日志寫入時(shí)的緩存大小。默認(rèn)是64k。
gzip 日志寫入前先進(jìn)行壓縮。壓縮率可以指定,從1到9數(shù)值越大壓縮比越高,同時(shí)壓縮的速度也越慢。默認(rèn)是1。
flush 設(shè)置緩存的有效時(shí)間。如果超過flush指定的時(shí)間,緩存中的內(nèi)容將被清空。
if 條件判斷。如果指定的條件計(jì)算為0或空字符串,那么該請求不會(huì)寫入日志。
二、錯(cuò)誤日志的配置
錯(cuò)誤日志主要記錄客戶端訪問Nginx出錯(cuò)時(shí)的日志,格式不支持自定義。通過錯(cuò)誤日志,你可以得到系統(tǒng)某個(gè)服務(wù)或server的性能瓶頸等。因此,將日志好好利用,你可以得到很多有價(jià)值的信息。
錯(cuò)誤日志的語法:
error_log path(存放路徑) level(日志等級)
path含義同access_log,level表示日志等級,日志等級分為[ debug | info | notice | warn | error | crit ],從左至右,日志詳細(xì)程度逐級遞減,即debug最詳細(xì),crit最少,默認(rèn)是error。
error_log logs/error.log info;
需要注意的是:error_log off并不能關(guān)閉錯(cuò)誤日志,而是會(huì)將錯(cuò)誤日志記錄到一個(gè)文件名為off的文件中。正確的關(guān)閉錯(cuò)誤日志記錄功能的方法如下:
#表示將存儲(chǔ)日志的路徑設(shè)置為“垃圾桶”。 error_log /dev/null;
error_log可以配置在main, http, mail, stream, server, location作用域。
三、日志分割
1.編寫nginx日志分割腳本
#!/bin/bash LOGS_PATH=/usr/local/nginx/logs YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) cp ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log && >${LOGS_PATH}/access.log cp ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log && >${LOGS_PATH}/error.log
2.設(shè)置定時(shí)任務(wù)運(yùn)行腳本
$ crontab -e 0 0 * * * /usr/local/nginx/logs/NginxLogRotate.sh
定時(shí)任務(wù)每天00:00執(zhí)行腳本/usr/local/nginx/logs/NginxLogRotate.sh,實(shí)現(xiàn)定時(shí)自動(dòng)分割Nginx日志(包括訪問日志和錯(cuò)誤日志),這樣Nginx每天都會(huì)生成一個(gè)新的日志文件。
鏈接:https://www.cnblogs.com/myitnews/p/11536181.html
-
腳本
+關(guān)注
關(guān)注
1文章
392瀏覽量
14947 -
nginx
+關(guān)注
關(guān)注
0文章
154瀏覽量
12238
原文標(biāo)題:玩轉(zhuǎn)Nginx日志管理:高效排查問題的終極指南
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
華為 FlexusX 與 Docker+Nginx 的高效整合之路
![華為 FlexusX 與 Docker+<b class='flag-5'>Nginx</b> 的<b class='flag-5'>高效</b>整合之路](https://file1.elecfans.com//web3/M00/04/7A/wKgZPGd0HLGANzOxAAEA43MSbXE681.png)
零死角玩轉(zhuǎn)STM32F103—指南者
分布式日志追蹤ID實(shí)戰(zhàn)
EulerOS+Nginx+MySQL 部署 GLPI 資產(chǎn)管理系統(tǒng)
![EulerOS+<b class='flag-5'>Nginx</b>+MySQL 部署 GLPI 資產(chǎn)<b class='flag-5'>管理</b>系統(tǒng)](https://file1.elecfans.com//web3/M00/04/A1/wKgZPGd2mOqAAiIfAAIStNukK3Q423.png)
Linux高頻命令終極指南
使用lsof實(shí)現(xiàn)對linux文件的誤刪除恢復(fù)練習(xí)
![使用lsof實(shí)現(xiàn)對linux文件的誤刪除恢復(fù)練習(xí)](https://file1.elecfans.com/web1/M00/F5/C3/wKgaoWdCmqmAA124AAAjwC2g6tA394.png)
機(jī)智云歷史數(shù)據(jù)導(dǎo)出與排查指南
![機(jī)智云歷史數(shù)據(jù)導(dǎo)出與<b class='flag-5'>排查</b><b class='flag-5'>指南</b>](https://file.elecfans.com/web2/M00/40/03/pYYBAGJrSWqAb-nSAAAXmKtCFeo833.jpg)
errDump錯(cuò)誤日志上報(bào):開啟高效排查之門
![errDump錯(cuò)誤<b class='flag-5'>日志</b>上報(bào):開啟<b class='flag-5'>高效</b><b class='flag-5'>排查</b>之門](https://file1.elecfans.com/web1/M00/F4/29/wKgZoWck44uAeUy3AARu2-gdDwE800.png)
Linux日志管理經(jīng)驗(yàn)總結(jié)
nginx中的正則表達(dá)式和location路徑匹配指南
![<b class='flag-5'>nginx</b>中的正則表達(dá)式和location路徑匹配<b class='flag-5'>指南</b>](https://file1.elecfans.com/web2/M00/08/9C/wKgZomb5Cb2AbMf0AACDRywOs8w869.png)
linux日志管理之journalctl命令
![linux<b class='flag-5'>日志</b><b class='flag-5'>管理</b>之journalctl命令](https://file1.elecfans.com/web2/M00/03/80/wKgaoma8hKeAQMsTAABtScTXN6w548.png)
nginx重啟命令linux步驟是什么?
nginx重啟命令linux步驟是什么?
玩轉(zhuǎn)EEPROM——全面指南
![<b class='flag-5'>玩轉(zhuǎn)</b>EEPROM——全面<b class='flag-5'>指南</b>](https://file1.elecfans.com/web2/M00/F7/0F/wKgaomaBMpeAaB3hAACC1VNMyM8427.png)
評論