Nginx訪問日志切割的3種實(shí)現(xiàn)方法
1. 使用 shell 腳本實(shí)現(xiàn)
接下來,很簡單,shell 腳本來了
#/bin/bash # author jiangexing set -e #腳本執(zhí)行,遇到錯(cuò)就退出,不再往下執(zhí)行 sleep 1 # 配合定時(shí)任務(wù),0 點(diǎn)過一秒再開始切割任務(wù) yesterday=$(date -d 'yesterday' +%Y-%m-%d) #取得服務(wù)器當(dāng)前時(shí)間 ng_logs_dir='/var/log/nginx' #nginx 日志文件目錄 if [ -d $ng_logs_dir ];then #判斷日志目錄是否存在 cd $ng_logs_dir mv access.log access_${yesterday}.log #通過 mv 命令將日志移動(dòng)到分割后的日志,error 日志我一般不做切割 kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #發(fā)送 kill -USR1 信號(hào)給 Nginx 的主進(jìn)程號(hào),讓 Nginx 重新生成一個(gè)新的日志文件 sleep 1 tar -czf access_${yesterday}.log.tar.gz access_${yesterday}.log #把舊的日志打成壓縮包 rm -f access_${yesterday}.log #已有壓縮包,刪除壓縮前的日志 else echo "日志目錄不存在,請檢查" exit 0 fi
這已經(jīng)達(dá)到了我們想要的效果了,點(diǎn)個(gè)贊
當(dāng)然還有最重要的一步,那就是要做好定時(shí)任務(wù)
crontable -l 0 0 * * * /usr/local/nginx/scripts/split.sh
2. 使用 logrotate 來實(shí)現(xiàn)
這種切割的方法,一開始我是不知道的,因?yàn)槲抑暗?nginx 都是使用源碼安裝的,在一次偶然的情況下,使用了 yum 安裝的方式安裝了 nginx,然后發(fā)現(xiàn) nginx 的日志自動(dòng)切割和壓縮了,這就讓我要去一探究竟了
后來發(fā)現(xiàn),這個(gè)切割功能是由 logrotate 來實(shí)現(xiàn)的,接下來我們一起來看看看
如果系統(tǒng)沒有安裝logrotate 可以使用
sudo yum install logrotate -y
進(jìn)行安裝
配置 logrotate
接下來我們就來配置 nginx 切割的配置文件,我的 nginx 日志路徑在/var/log/nginx
我們在 /etc/logrotate.d/ 目錄下新建一個(gè) nginx 的文件
vim nginx #########以下為文件配置內(nèi)容############## /var/log/nginx/*log # 這里也可以寫明對具體哪幾個(gè)文件進(jìn)行切割 { su root root daily dateext missingok rotate 7 notifempty compress create 644 www www sharedscripts postrotate [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` endscript } # 我們也可以先手 手動(dòng)執(zhí)行一下切割試試看看效果 logrotate -f /etc/logrotate.d/nginx
查看執(zhí)行后的結(jié)果:
沒錯(cuò),這就是我們想要的 ,這種方式和第一種還是比較像的。
logrotate 配置項(xiàng)詳解
logrotate 的默認(rèn)配置文件是 /etc/logrotate.conf。主要參數(shù):
- daily–>指定轉(zhuǎn)儲(chǔ)周期為每天
- weekly–>指定轉(zhuǎn)儲(chǔ)周期為每周
- monthly–>指定轉(zhuǎn)儲(chǔ)周期為每月
- dateext–>在文件末尾添加當(dāng)前日期
- compress–>通過 gzip 壓縮轉(zhuǎn)儲(chǔ)以后的日志
- nocompress–>不需要壓縮時(shí),用這個(gè)參數(shù)
- copytruncate–>先把日志內(nèi)容復(fù)制到舊日志文件后才清除日志文件內(nèi)容,可以保證日志記錄的連續(xù)性
- nocopytruncate–>備份日志文件但是不截?cái)?/li>
- create mode owner group–>轉(zhuǎn)儲(chǔ)文件,使用指定的文件模式創(chuàng)建新的日志文件
- nocreate–>不建立新的日志文件
- delaycompress 和 compress –>一起使用時(shí),轉(zhuǎn)儲(chǔ)的日志文件到下一次轉(zhuǎn)儲(chǔ)時(shí)才壓縮
- nodelaycompress–>覆蓋 delaycompress 選項(xiàng),轉(zhuǎn)儲(chǔ)同時(shí)壓縮。
- errors address–>專儲(chǔ)時(shí)的錯(cuò)誤信息發(fā)送到指定的 Email 地址
- ifempty–>即使是空文件也轉(zhuǎn)儲(chǔ),這個(gè)是 logrotate 的缺省選項(xiàng)。
- notifempty–>如果是空文件的話,不轉(zhuǎn)儲(chǔ)
- mail address–>把轉(zhuǎn)儲(chǔ)的日志文件發(fā)送到指定的 E-mail 地址
- nomail–>轉(zhuǎn)儲(chǔ)時(shí)不發(fā)送日志文件
- olddir directory–>轉(zhuǎn)儲(chǔ)后的日志文件放入指定的目錄,必須和當(dāng)前日志文件在同一個(gè)文件系統(tǒng)
- noolddir–>轉(zhuǎn)儲(chǔ)后的日志文件和當(dāng)前日志文件放在同一個(gè)目錄下
- rotate count–>指定日志文件刪除之前轉(zhuǎn)儲(chǔ)的次數(shù),0 指沒有備份,5 指保留 5 個(gè)備份
- tabootext [+] list 讓 logrotate –> 不轉(zhuǎn)儲(chǔ)指定擴(kuò)展名的文件,缺省的擴(kuò)展名是:.rpm-orig, .rpmsave, v, 和 ~
- size–> size 當(dāng)日志文件到達(dá)指定的大小時(shí)才轉(zhuǎn)儲(chǔ),Size 可以指定 bytes (缺省)以及 KB (sizek)或者 MB (sizem).
- prerotate/endscript –>在轉(zhuǎn)儲(chǔ)以前需要執(zhí)行的命令可以放入這個(gè)對,這兩個(gè)關(guān)鍵字必須單獨(dú)成行
- postrotate/endscript –>在轉(zhuǎn)儲(chǔ)以后需要執(zhí)行的命令可以放入這個(gè)對,這兩個(gè)關(guān)鍵字必須單獨(dú)成行
3. 高級(jí)用法–使用 nginx 本身來實(shí)現(xiàn)
當(dāng) nginx 在容器里,把 nginx 日志掛載出來的時(shí)候,我們發(fā)現(xiàn)就不適合再使用 kill -USR1 的方式去分割日志
這時(shí)候當(dāng)然就需要從 nginx 本身配置去解決這個(gè)問題了,我們都知道訪問日志里面都有一個(gè)時(shí)間相關(guān)的字段,如果我們把這個(gè)時(shí)間撈出來,這個(gè)問題就解決了
在對用的 nginx 配置文件中添加如下配置
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; } access_log /var/log/nginx/${year}_${month}_${day}_access.log json;
這個(gè)的日志切割可以達(dá)到秒級(jí),用法都是一樣的,去正則匹配到時(shí)間戳就好了。nginx 內(nèi)置的變量有很多,列如 ${server_name} 這些變量都是可以用來命名日志
當(dāng)然如果我們需要壓縮,就寫個(gè)對應(yīng)的定時(shí)任務(wù)去做壓縮就好了
總結(jié)
到此這篇關(guān)于Nginx訪問日志切割的3種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Nginx訪問日志切割內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx配置訪問圖片路徑以及html靜態(tài)頁面的調(diào)取方法
這篇文章主要介紹了詳解nginx配置訪問圖片路徑以及html靜態(tài)頁面的調(diào)取方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的高可用(最新解決方案)
這篇文章主要介紹了Nginx+keepalived實(shí)現(xiàn)七層的負(fù)載均衡的高可用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03Mac上搭建nginx+rtmp直播服務(wù)器的步驟詳解
最近的直播很火,所以這篇文章跟大家分享了在Mac上搭建nginx+rtmp直播服務(wù)器的步驟,文章通過一步步圖文介紹的很詳細(xì),有需要的朋友們可以參考借鑒。2016-09-09Nginx 只允許 www 域名訪問并禁止裸域名訪問的實(shí)現(xiàn)步驟
通過Nginx配置,可以設(shè)定僅允許www域名訪問,禁止或重定向裸域名,提升網(wǎng)站品牌統(tǒng)一性及用戶體驗(yàn),設(shè)置包括創(chuàng)建針對www的虛擬主機(jī),禁止裸域名訪問,并可選進(jìn)行裸域名到www的301重定向,完成后,重啟Nginx服務(wù)器使配置生效2024-10-10云服務(wù)器使用寶塔搭建Python環(huán)境,運(yùn)行django程序
本文詳細(xì)講解了在云服務(wù)器使用寶塔搭建Python環(huán)境,運(yùn)行django程序的方法。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12