nginx訪問日誌格式
1. nginx log日誌有什麼用
Linux系統下Nginx 日誌可以查看系統運行記錄和出錯說明,對Nginx 日誌的分析可以了解系統運行的狀態。那麼Linux系統Nginx日誌怎麼分析呢?
Nginx 日誌相關配置有 2 個地方:access_log 和 log_format 。
默認的格式:
access_log /data/logs/nginx-access.log;
log_format old 『$remote_addr [$time_local] $status $request_time $body_bytes_sent 』
『「$request」 「$http_referer」 「$http_user_agent」』;
相信大部分用過 Nginx 的人對默認 Nginx 日誌格式配置都很熟悉,對日誌的內容也很熟悉。但是默認配置和格式雖然可讀,但是難以計算。
Nginx 日誌刷盤相關策略可配置:
比如,設置 buffer,buffer 滿 32k 才刷盤;假如 buffer 不滿 5s 鍾強制刷盤的配置如下:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;
這決定了是否實時看到日誌以及日誌對磁碟 IO 的影響。
Nginx 日誌能夠記錄的變數還有很多沒出現在默認配置中:
比如:
請求數據大小:$request_length
返回數據大小:$bytes_sent
請求耗時:$request_time
所用連接序號:$connection
當前連接發生請求數:$connection_requests
Nginx 的默認格式不可計算,需要想辦法轉換成可計算格式,比如用控制字元 ^A (Mac 下 ctrl+v ctrl+a 打出)分割每個欄位。
log_format 的格式可以變成這樣:
log_format new 『$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A』
『$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent』;
這樣之後就通過常見的 Linux 命令行工具進行分析了:
查找訪問頻率最高的 URL 和次數:
cat access.log | awk -F 『^A』 『{print $10}』 | sort | uniq -c
查找當前日誌文件 500 錯誤的訪問:
cat access.log | awk -F 『^A』 『{if($5 == 500) print $0}』
查找當前日誌文件 500 錯誤的數量:
cat access.log | awk -F 『^A』 『{if($5 == 500) print $0}』 | wc -l
查找某一分鍾內 500 錯誤訪問的數量:
cat access.log | awk -F 『^A』 『{if($5 == 500) print $0}』 | grep 』09:00』 | wc-l
查找耗時超過 1s 的慢請求:
tail -f access.log | awk -F 『^A』 『{if($6》1) print $0}』
假如只想查看某些位:
tail -f access.log | awk -F 『^A』 『{if($6》1) print $3″|」$4}』
查找 502 錯誤最多的 URL:
cat access.log | awk -F 『^A』 『{if($5==502) print $11}』 | sort | uniq -c
查找 200 空白頁
cat access.log | awk -F 『^A』 『{if($5==200 && $8 《 100) print $3″|」$4″|」$11″|」$6}』
查看實時日誌數據流
tail -f access.log | cat -e
或者
tail -f access.log | tr 『^A』 『|』
照著這個思路可以做很多其他分析,比如 UA 最多的訪問;訪問頻率最高的 IP;請求耗時分析;請求返回包大小分析;等等。
這就是一個大型 Web 日誌分析系統的原型,這樣的格式也是非常方便進行後續大規模 batching 和 streaming 計算。
以上就是Linux系統Nginx日誌怎麼分析的全部內容了,可以看出來Nginx日誌還是有很強大的作用的。
2. nginx訪問日誌求解 最後面的IP是什麼
查詢現有的NGinx Log_format 格式 。其中
代理伺服器會在 X-Forwarded-For 頭追加自己的ip , 它們用逗號分隔 ,一般第一個會是真實iP ,其他都是代理節點的 iP
3. nginx在哪裡查看錯誤日誌
日誌在一個系統中是非常重要的,它可以監控一個應用程序的活動,因為它們為你提供有用的調試信息,並使你能夠分析一個Web伺服器的所有方面。像其他軟體應用程序一樣,Nginx也會將諸如網站訪問者、遇到的問題等事件保存到日誌文件中。這些有用的記錄信息被用來採取先發制人的措施,以便處理日誌事件中的重大嚴重差異。
在Nginx中記錄事件的日誌有兩種類型,一種是訪問日誌,另一種是錯誤日誌。如果你已經在Nginx核心配置文件中啟用了這些日誌,那麼在所有Linux發行版中,你都可以在/var/log/nginx中找到這兩種類型的日誌。
您可以在伺服器部分或HTTP中使用access_log指令啟用訪問日誌。
access_log log_file log_format ;
第一個參數』log_file』是強制性的,而第二個參數是可選的』log_format』。如果您未提及日誌格式,則將以默認的組合格式鍵入日誌。
默認情況下,訪問日誌是在Nginx配置文件中定義的。因此,所有虛擬主機的訪問日誌將存儲在同一配置文件中。
http {
access_log /var/log/nginx/access.log;
}
重新載入新的NGINX配置。現在,您可以使用以下命令在文件/var/log/nginx/example.access.log中訪問example.com域的訪問日誌:
$ sudo tail -f /var/log/nginx/example.access.log
當需要禁用錯誤日誌時,請將日誌文件的名稱分配給/dev/null。
error_log/dev/null;
Nginx錯誤日誌的安全級別
您可以在錯誤日誌中使用以下安全級別:
emerg:當系統不穩定時,用於緊急消息
alert:生成嚴重問題的警報消息。
crit:用於緊急情況下立即處理。
error:處理頁面時,可能會發生錯誤。
warn:用於警告消息
notice:您也可以忽略的通知日誌。
info:有關信息,消息
debug:指向用於調試信息的錯誤位置。
Nginx訪問和錯誤日志對於記錄某些活動非常有用,
4. 如何設置nginx日誌格式來查看負載分擔結果
nginx配置好負載分擔後,測試的時候,如何查看負載分擔情況:通過設置nginx日誌顯示:
nginx伺服器日誌相關指令主要有兩條,一條是log_format,用來設置日誌格式,另外一條是access_log,用來指定日誌文件的存放路徑、格式和緩存大小,一般在nginx的配置文件中日記配置(/usr/local/nginx/conf/nginx.conf)。
nginx的log_format有很多可選的參數用於指示伺服器的活動狀態,默認的是:
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
5. nginx 日誌格式的$http_x_forwarded_for 無法紀錄訪問ip,得到的一條小扛'-',這是為什麼呢,求解答
直接訪問後端伺服器,或者反向代理前端伺服器沒有設置這個值,必須要設置才有值,否則就是"-"。
試試在前端nginx配置server{}塊中加入:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6. Nginx相關知識點
Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑借開源的力量,已經接近成熟與完善。
Nginx功能豐富,可作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支持很多第三方的模塊擴展。
Nginx的穩定性、功能集、示例配置文件和低系統資源的消耗讓他後來居上,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站。
自行安裝
正向代理: 代理伺服器站在客戶端那邊就是正向代理;
反向代理: 代理伺服器站在原始伺服器那邊就是反向代理;
詳解參考點擊 Nginx正向代理與反向代理
Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。
Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件伺服器,動態頁面走web伺服器,只要你正則寫的沒問題,又有相對應的伺服器解決方案,你就可以隨心所欲的玩。
並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的伺服器存在異常,他可以將請求重新轉發給另外一台伺服器,然後自動去除異常伺服器。
如果你的nginx伺服器給2台web伺服器做代理,負載均衡演算法採用輪詢,那麼當你的一台機器web程序iis關閉,也就是說web不能訪問,那麼nginx伺服器分發請求還是會給這台不能訪問的web伺服器,如果這里的響應連接時間過長,就會導致客戶端的頁面一直在等待響應,對用戶來說體驗就打打折扣,這里我們怎麼避免這樣的情況發生呢。這里我配張圖來說明下問題。
如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然後等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這里的響應時間如果過長,用戶等待的時間就會越長。
下面的配置是解決方案之一:
如果使用upstream指令配置了一組伺服器作為被代理伺服器,伺服器中的訪問演算法遵循配置的負載均衡規則,同時可以使用該指令配置在發生哪些異常情況時,將請求順次交由下一組伺服器處理。
狀態值可以是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
Nginx提供的負載均衡策略有2種:內置策略和擴展策略。
內置策略: 1.輪詢;2.加權輪詢;3.Ip hash;
擴展策略: 就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡演算法,給他一一找出來做下實現。
Ip hash演算法,對客戶端請求的ip進行hash操作,然後根據hash結果將同一個客戶端ip的請求分發給同一台伺服器進行處理,可以解決session不共享的問題。
eg:
開啟簡單的緩存配置,只需要兩個指令:proxy_cache_path和proxy_cache。
proxy_cache_path: 配置緩存的存放地址和其他的一些常用配置;
proxy_cache:指令是為了啟動緩存;
相關配置說明:
該指令用於定義滿足條件的響應不會被保存到緩存中。在條件字元串中至少有一個條件不為空或者0,符合這樣條件的響應才不會被緩存。
舉例如下
其中,cookie_nocache、arg_nocache...皆為變數,可以根據你訪問的匹配策略來設置,其值只有2類,0和非0;
訪問匹配策略例如:
如果在此鏈式配置中,只要有一個值不為0,則不會cache;例如:
則不會被cache.
註:一般會配合proxy_cache_bypass共同使用;
該指令用於定義哪些情況不從cache讀取,直接從backend獲取資源;配置方式同proxy_no_cache。
給緩存數據定義一個鍵,例如
該指令用於設置緩存哪些HTTP方法,默認緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.。
設置不同響應碼的緩存時間,當不指定響應碼的時候,例如
只對響應碼為200,301,302的訪問請求資源設置緩存時間,此外可以個性化定製,例如:
此外,還可以在相應header里設置優先順序更高的緩存有效時間:
不緩存包含在field的響應header,可以設置的值有:「X-Accel-Redirect」, 「X-Accel-Expires」, 「X-Accel-Limit-Rate」,「X-Accel-Buffering」, 「X-Accel-Charset」, 「Expires」, 「Cache-Control」, 「Set-Cookie」 (0.8.44), and 「Vary」。
如果上述的header field沒有設置為忽略,則header filed中有「X-Accel-Expires」, 「Expires」, 「Cache-Control」, 「Set-Cookie」, and 「Vary」的話,響應會被緩存。
該指令用於設置緩存的最小使用次數,默認值為1
源站有問題時,nginx可以通過proxy_cache_use_stale指令開啟容錯能力,即使用緩存內容來響應客戶端的請求。舉例如下:
如上配置表示,當作為cache的NGINX收到源站返回error、timeout或者其他指定的5XX錯誤,並且在其緩存中有請求文件的陳舊版本,則會將這些陳舊版本的文件而不是錯誤信息發送給客戶端。
使用NGINX,不需要建立一個RAID(磁碟陣列)。如果有多個硬碟,NGINX可以用來在多個硬碟之間分割緩存。舉例如下:
在這份配置中,使用了3個獨立的緩存,每個緩存專用一塊硬碟,另外,3個獨立的線程池也各自專用一塊硬碟。
緩存之間(其結果就是磁碟之間)的負載均衡使用split_clients模塊,split_clients非常適用於這個任務。
在 proxy_cache_path指令中設置 use_temp_path=off ,表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是為了避免在更新緩存時,磁碟之間互相復制響應數據。
通過訪問日誌,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息;
通過錯誤日誌,你可以得到系統某個服務或server的性能瓶頸等。
因此,將日誌好好利用,你可以得到很多有價值的信息。
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日誌部分內容:
#access_log logs/access.log main;
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
默認「main」日誌格式:
參數明細表:
查看日誌命令tail -f /usr/local/nginx/logs/access.log
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日誌,使用「main」日誌格式。
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
重新讀取載入Nginx配置文件:
執行命令:nginx-s reload
網上一位老師寫的log文件分解的腳本
此腳本執行時間根據自己公司情況來定,可以設置默認一天執行一次;
創建crontab設置作業
設置日誌文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh
此設置的為一分鍾,如果設置一天自行修改;
默認的 nginx 配置文件 nginx.conf 內容如下
示例
幾個常見配置項:
注意:
驚群現象:一個網路連接到來,多個睡眠的進程被同事叫醒,但只有一個進程能獲得鏈接,這樣會影響系統性能
每個指令必須有分號結束。
進入安裝目錄下的sbin
7. nginx 如何配置日誌不記錄靜態文件的訪問
配置段:
http,
server,
location,
if
in
location,
limit_except
gzip壓縮等級。
buffer設置內存緩存區大小。
flush保存在緩存區中的最長時間。
不記錄日誌:access_log
off;
使用默認combined格式記錄日誌:access_log
logs/access.log
或
access_log
logs/access.log
combined;
8. 如何用shell將nginx配置文件中日誌默認格式nginx-access,log 替換成指定格式
1.客戶端(用戶)IP地址。如:上例中的 10.1.1.1 (內網負載均衡地址)
2.訪問時間。如:上例中的 [22/Aug/2014:16:48:19 +0800]
3.訪問埠。如:上例中的 127.0.0.1:8080
4.響應時間。如:上例中的 0.022
5.請求時間。如:上例中的 0.022
6.用戶地理位置代碼(國家代碼)。
9. 從nginx訪問日誌中怎麼看後端伺服器的狀態信息(nginx前端傳給後端看後端響應
nginx的日誌格式是可以通過日誌模塊去配置的。
比如:$status 記錄請求狀態,$body_bytes_sent 發送給客戶端的位元組數,不包括響應頭的大小,$bytes_sent 發送給客戶端的總位元組數等。可在nginx配置文件中這樣配置:
配置完後重啟nginx服務,再查看日誌。