1 日志管理
1.1 Nginx日志描述
通過訪問日志,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息;通過錯誤日志,你可以得到系統某個服務或server的性能瓶頸等。因此,將日志好好利用,你可以得到很多有價值的信息。
1.2 Nginx日志格式
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日志部分內容:
#access_log logs/access.log main;
日志生成的到Nginx根目錄logs/access.log文件,默認使用“main”日志格式,也可以自定義格式。
默認“main”日志格式:
參數明細表:
$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 |
可以記錄用戶是從哪個鏈接訪問過來的 |
查看日志命令tail -f /usr/local/nginx/logs/access.log
1.3 Nginx自定義日志
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日志,使用“main”日志格式。
日志生成的到Nginx根目錄logs/access.log文件,默認使用“main”日志格式,也可以自定義格式。
重新讀取加載Nginx配置文件:
執行命令:nginx-s reload
查看日志文件:
執行命令:tail -100f /usr/local/nginx/logs/abc.access.log
1.4 Nginx日志分隔
nginx的日志文件沒有rotate功能。編寫每天生成一個日志,我們可以寫一個nginx日志切割腳本來自動切割日志文件。
第一步就是重命名日志文件,不用擔心重命名后nginx找不到日志文件而丟失日志。在你未重新打開原名字的日志文件前,nginx還是會向你重命名的文件寫日志,Linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主進程發送USR1信號。nginx主進程接到信號后會從配置文件中讀取日志文件名稱,重新打開日志文件(以配置文件中的日志名稱命名),並以工作進程的用戶作為日志文件的所有者。重新打開日志文件后,nginx主進程會關閉重名的日志文件並通知工作進程使用新打開的日志文件。工作進程立刻打開新的日志文件並關閉重名名的日志文件。然后你就可以處理舊的日志文件了。[或者重啟nginx服務]。
nginx日志按每分鍾自動切割腳本如下:
新建shell腳本:vi/usr/local/software/nginx/nginx_log.sh
#!/bin/bash #設置日志文件存放目錄 LOG_HOME="/usr/local/software/nginx/logs/" #備分文件名稱 LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".abc.access.log #重命名日志文件 mv ${LOG_HOME}/abc.access.log ${LOG_HOME}/${LOG_PATH_BAK}.log #向nginx主進程發信號重新打開日志 kill -USR1 `cat /usr/local/software/nginx/logs/nginx.pid`
創建crontab設置作業
#設置日志文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh