nginx 日誌

  • Nginx日誌

Nginx日誌對於統計、系統服務排錯很有用。

Nginx日誌主要分爲兩種:access_log(訪問日誌)和error_log(錯誤日誌)。

通過訪問日誌我們可以得到用戶的IP地址、瀏覽器的信息,請求的處理時間等信息。

錯誤日誌記錄了訪問出錯的信息,可以幫助我們定位錯誤的原因。

因此,將日誌好好利用,可以得到很多有價值的信息。

 

查看日誌命令:

  1. tail -f /usr/local/nginx/logs/access.log 
  1. 設置access_log

訪問日誌主要記錄客戶端的請求。客戶端向Nginx服務器發起的每一次請求都記錄在這裏。客戶端IP,瀏覽器信息,referer,請求處理時間,請求URL等都可以在訪問日誌中得到。當然具體要記錄哪些信息,你可以通過log_format指令定義。

語法

  1. access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 設置訪問日誌
  2. access_log off; # 關閉訪問日誌

 

  1. path 指定日誌的存放位置。
  2. format 指定日誌的格式。默認使用預定義的combined。
  3. buffer 用來指定日誌寫入時的緩存大小。默認是64k。
  4. gzip 日誌寫入前先進行壓縮。壓縮率可以指定,從1到9數值越大壓縮比越高,同時壓縮的速度也越慢。默認是1。
  5. flush 設置緩存的有效時間。如果超過flush指定的時間,緩存中的內容將被清空。
  6. if 條件判斷。如果指定的條件計算爲0或空字符串,那麼該請求不會寫入日誌。
  7. 另外,還有一個特殊的值off。如果指定了該值,當前作用域下的所有的請求日誌都被關閉。

示例

  1. http {
  2.     include       mime.types;
  3.     default_type  application/octet-stream;
  4.  
  5.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  6.                       '$status $body_bytes_sent "$http_referer" '
  7.                       '"$http_user_agent" "$http_x_forwarded_for"';
  8.        ##日誌格式使用默認的combined,指定日誌的緩存大小爲32k,日誌寫入前啓用gzip進行壓縮,壓縮比使用默認值1,緩存數據有效時間爲1分鐘。
  9.     access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m;  
  10.     ...
  11. }

作用域

access_log指令的作用域分別有httpserverlocation

  1. log_format自定義格式

默認的日誌格式

  1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  2.                       '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"'; 

各參數明細表:

$remote_addr

客戶端的ip地址(代理服務器,顯示代理服務ip)

$remote_user

用於記錄遠程客戶端的用戶名稱(一般爲“-”)

$time_local

用於記錄訪問時間和時區

$request

用於記錄請求的url以及請求方法

$status

響應狀態碼,例如:200成功、404頁面找不到等。

$body_bytes_sent

給客戶端發送的文件主體內容字節數

$http_user_agent

用戶所使用的代理(一般爲瀏覽器)

$http_x_forwarded_for

可以記錄客戶端IP,通過代理服務器來記錄客戶端的ip地址

$http_referer

可以記錄用戶是從哪個鏈接訪問過來的

  1. 設置error_log

錯誤日誌在Nginx中是通過error_log指令實現的。該指令記錄服務器和請求處理過程中的錯誤信息。

錯誤日誌不支持自定義。

語法

  1. error_log path [level];

 

  1. path參數指定日誌的寫入位置。
  2. level參數指定日誌的級別(不寫爲全部)。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值(等級從低到高排列)。

只有日誌的錯誤級別等於或高於level指定的值纔會寫入錯誤日誌中。默認值是error。

 

示例

error_log  logs/error.log; 

error_log  logs/error_notice.log  notice;

error_log  logs/error_info.log  info; ##可以將不同的錯誤類型分開存儲

 

 

 

  1. 日誌配置和及切割

/etc/init.d/rsyslog start  #系統日誌,如不開啓,看不到定時任務日誌

/etc/rc.d/init.d/crond start #定時任務開啓

 

編寫sh:(備註  sh腳本是按每分鐘進行切割  只需修改 %Y%m%d%H%M  )

#!/bin/bash

#設置日誌文件存放目錄

LOG_HOME="/usr/local/nginx/logs/"

#備分文件名稱

LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)"

#重命名日誌文件

mv ${LOG_HOME}/access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log

mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log

#向nginx主進程發信號重新打開日誌

kill -USR1 `cat ${LOG_HOME}/nginx.pid`

 

配置cron:(配置的是每分鐘執行一次)

*/1 * * * * /usr/local/nginx/sbin/logcut.sh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章