nginx日誌方面知識整理

2021-09-03 02:28:47 字數 4013 閱讀 9542

1.預設日誌內容介紹

預設的示例:

注釋:$remote_addr   與$http_x_forwarded_for 用以記錄客戶端的ip位址;

$remote_user   :用來記錄客戶端使用者名稱;

$time_local  : 用來記錄訪問時間與時區;  

$request  :  用來記錄請求的url與http協議;

$status     :  用來記錄請求狀態;成功是200,

$body_bytes_s ent  :記錄傳送給客戶端檔案主體內容大小;

通常web伺服器放在反向**的後面,這樣就不能獲取到客戶的ip位址了,通過$remote_add拿到的ip位址是反向**伺服器的ip位址。

反向**伺服器在**請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的ip位址和原來客戶端的請求的伺服器位址;

2.日誌常用引數;

2.1access_log

語法:access_log path [format [buffer=size | off]]

預設值:access_log log/access.log combined

使用字段:http, server, location

引數為連線日誌指定了路徑,格式和緩衝區大小。使用「off」將在當前的字段中清除access_log的所有引數,如果沒有指定日誌格式,預設為「combined」。緩衝區大小不能超過寫入磁碟檔案的最小大小。

日誌檔案路徑可以包含變數(0.7.4以上版本),但是有一些限制:

nginx指定的使用者必須有建立日誌檔案的許可權。

緩衝區不會工作

每個到來的連線,日誌檔案將被開啟並且在記錄日誌後迅速關閉,然而,頻繁使用的檔案描述符將被儲存到open_log_file_cache中,關於日誌的輪詢記錄,必須記住隨著時間的過去(使用open_log_file_cache的valid引數設定),日誌仍然在舊的檔案中記錄。

nginx支援為每個location指定強大的日誌記錄。同樣的連線可以在同一時間輸出到不止乙個的日誌中,更多資訊請檢視multiple access_log directives in different contexts

2.1log_format

語法:log_format name format [format …]

預設值:log_format combined 」…」

使用字段:http server

描述記錄日誌的格式,格式中可以使用大多數變數,也包括一些在寫入日誌檔案過程中定義的變數:

$body_bytes_sent,減去應答頭後傳送給客戶端的位元組數,這個變數相容apache模組mod_log_config的%b引數(在0.3.10前這個變數為$apache_bytes_sent)。

$bytes_sent,傳送給客戶端的位元組數。

$connection,連線數。

$msec,正在寫入日誌條目的當前時間(精確到百萬分之一秒)

$pipe,如果請求為管道的。

$request_length,請求主體的長度。

$request_time,從乙個請求發出到而使nginx工作的時間,單位為毫秒(0.5.19版本後可以使用秒為單位)。

$status,應答的狀態(**)。

$time_local,寫入普通日誌格式的當地時間(伺服器時間)。

傳送到客戶端的頭中的變數以」sent_http_」標記開頭,如:$sent_http_content_range。

注意其他模組產生的變數同樣可以寫入日誌,例如你可以記錄前端負載均衡應答頭使用「upstream_http_」開頭的變數,具體請檢視負載均衡模組。

nginx有乙個預定的日誌格式稱為combined:

語法:open_log_file_cache max=n [inactive=time] [min_uses=n] [valid=time] | off

預設值:open_log_file_cache off

使用字段:http server location

這個指令為頻繁使用的日誌檔案描述符所在的路徑變數設定快取。

指令選項:

max - 快取中儲存的最大檔案描述符數。

inactive - 設定快取中在某個時間段內沒有使用的檔案描述符將被移除,預設為10秒。

min_uses - 在一定時間內(inactive指定),乙個檔案描述符最少使用多少次後被放入快取,預設為1。

valid - 設定檢查同名檔案存在的時間,預設是60秒。

off - 關閉快取。

nginx日誌切割方式

方式一:

nginx cronolog日誌分割配置文件,根據下面方法,每分鐘分割一次nginx訪問日誌。

1.nginx日誌配置

access_log access_log /data/access_log_pipe main;

2.先建立乙個命名管道

mkfifo /www/log/access_log_pipe

3.配置cronolog:

nohup cat /data/access_log_pipe | /usr/local/sbin/cronolog /data/log/domain.access_%y%m%d%h%m.log &

4.啟動nginx

/usr/local/nginx/sbin/nginx

注意:cronolog必須在nginx啟動前啟動

沒有安裝cronolog的話,需要先安裝

wget

tar zxvf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure

make

make install

方式二:

定時任務中每小時新增定時任務,執行一下指令碼,可以實現小時日誌分割

log_dir="/var/log/nginx"

date_dir=`date +%y/%m/%d/%h`

/bin/mkdir -p $/$ > /dev/null 2>&1

/bin/mv $/access.log   $/$/access.log

kill -usr1 `cat /opt/nginx/logs/nginx.pid`

方式三:

使用logrotate做nginx日誌輪詢

logrotate看名字就知道是專門做日誌輪詢的,只把任務配置放在/etc/logrotate.d/下,任務就會自動完成,而且無需安裝,系統自帶,比較推薦使用.

vi /etc/logrotate.d/nginx  

/usr/local/nginx/logs/www.willko.cn.log /usr/local/nginx/logs/nginx_error.log {

notifempty

daily

sharedscripts

postrotate

/bin/kill -usr1 `/bin/cat /usr/local/nginx/nginx.pid`

endscript

多個日誌以空格分開,

notifempty 如果日誌為空則不做輪詢

daily 每天執行一次

postrotate 日誌輪詢後執行的指令碼

這樣,每天都會自動輪詢,生成nginx.log.1-n

素數方面知識整理

一 判斷素數 int judge int n return1 注意 以上 中,for迴圈的結束條件是 i n i,相當於i sqrt n 兩種寫法都可以,只不過呼叫sqrt 函式會慢一些,因為for迴圈每次迴圈都會呼叫該函式。另外,不能寫成i i n 因為當n很接近int的最大值時,i i可能會溢位...

nginx的日誌切割小知識

今天讀了一篇文章 談談nginx訊號集 感興趣的同學可以檢視此鏈結 因為知識有限,其中有段話不是很理解,最後諮詢才了解原來如此,希望能對大家有些幫助。nginx的日誌切割 master 程序收到 sigusr1 後,會重新開啟所有已經開啟的檔案 比如日誌 然後向每個 worker 程序傳送 sigu...

jquery 方面知識

當需要取得 其中一行時 var items tr typeitemdata size 判斷 中是否有資料。tr td nth child 5 typeitemdata each function i,v 通過each函式讀取一行中第一列的值。mytrs live click function els...