色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

最全的Nginx日志分割教程

Android編程精選 ? 來源:baobao555.tech ? 2023-02-16 14:51 ? 次閱讀

nginx 默認沒有提供對日志文件的分割功能,所以隨著時間的增長,access.log 和 error.log 文件會越來越大,尤其是 access.log,其日志記錄量比較大,更容易增長文件大小。影響日志寫入性能分割 nginx 日志的方法有很多,這里推薦利用 Logrotate 來完成。

Logrotate 用法

1. 安裝

logrotate 是一個 Linux系統日志的管理工具。可以對單個日志文件或者某個目錄下的文件按時間 / 大小進行切割,壓縮操作;指定日志保存數量;還可以在切割之后運行自定義命令。

logrotate 是基于 crontab 運行的,所以這個時間點是由 crontab 控制的,具體可以查詢 crontab 的配置文件 /etc/anacrontab。系統會按照計劃的頻率運行 logrotate,通常是每天。在大多數的 Linux 發行版本上,計劃每天運行的腳本位于 /etc/cron.daily/logrotate。

主流 Linux 發行版上都默認安裝有 logrotate 包,如果你的 Linux 系統中找不到 logrotate, 可以使用 apt-get 或 yum 命令來安裝。

yuminstall-ylogrotate

一般 Linux 都已經自帶 logrotate,下列命令可以查看是否已安裝。

rpm-qllogrotate
c7c52de8-aa8b-11ed-bfe3-dac502259ad0.png

2. 基本用法詳解

2.1 入門

/etc/logrotate.conf 這個文件是 logrotate 的主配置文件。

#see"manlogrotate"fordetails
#rotatelogfilesweekly
weekly

#keep4weeksworthofbacklogs
rotate4

#createnew(empty)logfilesafterrotatingoldones
create

#usedateasasuffixoftherotatedfile
dateext

#uncommentthisifyouwantyourlogfilescompressed
#compress

#包含自定義配置目錄
include/etc/logrotate.d

#nopackagesownwtmpandbtmp--we'llrotatethemhere
/var/log/wtmp{
monthly
create0664rootutmp
minsize1M
rotate1
}

/var/log/btmp{
missingok
monthly
create0600rootutmp
rotate1
}

#system-specificlogsmaybealsobeconfiguredhere.

這個主配置文件中定義了日志文件分割的通用參數。并且 include /etc/logrotate.d 表示其會加載 /etc/logrotate.d 的所有自定義配置文件,自定義配置文件中的配置可以覆蓋掉通用配置。

我們來到自定義配置文件的目錄/etc/logrotate.d。

c7db2efe-aa8b-11ed-bfe3-dac502259ad0.png

嘗試在該目錄中創建一個日志分割配置 test,對 /opt/logtest 目錄中所有以 .log 結尾的文件進行分割。

vimtest

#test配置文件的內容
/opt/logtest/*.log{
daily
rotate2
copytruncate
missingok
}

test 配置的第一行指定要對哪個路徑的哪些文件進行分割,然后攜帶的 4 個參數解釋如下:

「daily:」 按天切割。觸發切割時如果時間不到一天不會執行切割。除了 daily,還可以選 monthly,weekly,yearly;

「rotate:」 對于同一個日志文件切割后最多保留的文件個數;

「copytruncate:」 將源日志文件切割成新文件后,清空并保留源日志文件。默認如果不啟用該配置,分割后源日志文件將被刪除。設置該值,以便分割后可以繼續在源日志文件寫入日志,等待下次分割;

「missingok:」 切割中遇到日志錯誤忽略。

創建好配置以后,系統會在每天利用 cron 定時執行 logrotate 日志分割指令。這里我們為了看到效果,不等到系統自動執行,可以手動強制執行一次日志分割。強制執行會立即進行一次日志。

#-v:顯示執行日志
#-f:強制執行分割
logrotate-vf/etc/logrotate.d/test

執行前,事先在日志所在目錄中創建 2 個測試日志文件。

touchtest1.log
touchtest2.log

手動執行一次日志分割,觀察執行日志可以發現,過程如下:

先將源日志內容拷貝到分割后的文件

清空源文件

c7ec9252-aa8b-11ed-bfe3-dac502259ad0.png

此時分割后的文件名為源文件名后面加上 . 序號,序號從 1 開始。

c7fce814-aa8b-11ed-bfe3-dac502259ad0.png

然后我們再次手動執行一次分割,此時執行過程如下:

將第一次分割后的日志文件 test1.log.1 重命名為 test1.log.2;

將源日志文件拷貝到此次分割后的文件,命名序號重新從 1 開始,為 test1.log.1;

清空源日志文件。

c8113b16-aa8b-11ed-bfe3-dac502259ad0.png
c82c7106-aa8b-11ed-bfe3-dac502259ad0.png

接著再次手動執行一次分割,此時執行過程如下:

將之前分割后的日志文件 test1.log.2 重命名為 test1.log.3,test1.log.1 重命名為 test1.log.2;

分割源日志文件,拷貝其內容到 test1.log.1;

由于設置了 rotate 為 2,即最多保留 2 個日志文件,所以此時要刪除最早分割出的那個日志文件,即 test1.log.3。

c842da90-aa8b-11ed-bfe3-dac502259ad0.png
c867b310-aa8b-11ed-bfe3-dac502259ad0.png
總結一下 logrotate 日志分割的步驟:

默認分割后日志的命名為源日志名稱 +. 序號(從 1 開始)。分割之前將所有之前分割出的日志文件重命名,序號往后移一位;

執行分割,將源日志文件分割為源日志文件名 .1。這樣就保證了所有分割后的文件中,序號最小的是最新分割出的,序號最大的是最早分割出的;

根據 rotate 設置,如果此次分割后文件數量大于 rotate 設置,那么刪除序號最大的那個分割文件,也就是最舊的分割日志。

實際開發中可以使用 create 代替 copytruncate,它們的區別如下:

copytruncate 先將源文件內容拷貝到分割后文件,再清空源文件,拷貝和清空之間有時間差,可能會丟失部分日志。另外拷貝操作在源文件比較大時消耗性能;

create 直接將源文件重命名為分割后文件,再創建一個與源文件名稱相同的新文件,用于后續日志寫入。

/opt/logtest/*.log{
daily
rotate2
create#創建與源文件名稱相同的新文件,用于后續日志寫入,新文件的歸屬用戶、權限與源文件相同
missingok
}

c87aed2c-aa8b-11ed-bfe3-dac502259ad0.png

但是要注意 create 即使創建新的文件后,如果沒有主動通知應用程序,那么應用程序仍然會往舊的文件(即被重命名的那個分割后的文件)寫入日志。所以此時在分割后要通知應用程序重新打開新的日志文件進行寫入。

以通知 nginx 為例,配置如下:

/var/log/nginx/*.log{
daily
rotate30
create
sharedscripts#所有的文件切割之后只執行一次下面腳本,通知nginx重新打開新的日志文件進行后續寫入
postrotate
if[-f/run/nginx.pid];then
kill-USR1`cat/run/nginx.pid`#通過USER1信號通知nginx重新打開日志文件
fi
endscript
}

綜上,一般情況下如果應用程序提供了通知其打開新的日志文件的接口,那么推薦使用 create 續寫日志;否則推薦使用 copytruncate 續寫日志。

注意:

/etc/logrotate.d 中的自定義配置中,如果不配置 rotate、daily 等參數在強制手動執行時并不會繼承默認的主配置 /etc/logrotate.conf。比如不配置 rotate 時,并不會繼承保留 4 個分割文件,而是等價于 0,即不保留任何分割文件。所以自定義配置中推薦顯式指定這些參數;

在系統crontab定時任務自動執行logrotate時,自定義配置會繼承主配置文件中的參數;

logrotate 執行分割的時機要依賴于 crontab 定時任務,也就是說 crontab 定時任務每日觸發時,logrotate 才會讀取相應配置,檢查是否滿足分割的條件決定是否執行分割。這意味著,在默認 crontab 每日觸發 logrotate 的定時任務情況下,即便 logrotate 配置文件中配置的分割頻率小于1天,也將按照 1 天的頻率觸發分割,除非修改 crontab 定時任務,將 logrotate 的任務觸發頻率修改為小于 1 天。

2.2 分割文件壓縮

我們可以通過如下設置對分割后的日志文件開啟壓縮:

/opt/logtest/*.log{
daily
rotate2
copytruncate
missingok
compress#以gzip方式壓縮
nodelaycompress#所有分割后的文件都進行壓縮
}

此時刪除原有所有文件,重新創建測試日志文件 test1.log 和 test2.log,然后手動執行分割,可以生成壓縮后的 .gz 文件。

c88dbd80-aa8b-11ed-bfe3-dac502259ad0.png

一般可以將 nodelaycompress 改為 delaycompress,這樣分割后對最新的序號為1的文件不會進行壓縮,對其他序號的文件進行壓縮,這樣可以方便我們查看最新的分割日志。

c8a18d38-aa8b-11ed-bfe3-dac502259ad0.png

2.3 按照時間分割

按照時間分割可以定時分割出一個日志,比如每天分割一次,配合其他參數可以完成保留最近 n 天日志的功能。以下配置可以實現每天分割一次日志,并且保留最近 30 天的分割日志。

/opt/logtest/*.log{
daily#每天分割一次
rotate30#保留最近30個分割后的日志文件
copytruncate
missingok
dateext#切割后的文件添加日期作為后綴
dateyesterday#配合dateext使用,添加前一天的日期作為分割后日志的后綴
}

還是先刪除原來的所有文件,重新創建。

touchtest{1,2}.log

再手動執行分割,此時生成的分割后的文件將不再以序號作為文件名結尾,而是以昨天的日期作為結尾。

c8b7f8ca-aa8b-11ed-bfe3-dac502259ad0.png

并且如果馬上再手動執行一次分割,由于日期相同,不會像原來一樣生成序號遞增的新日志文件,此時相當于沒有執行任何分割操作。即同一天只能分割一次,第二天再次執行才會分割出新的日期結尾的文件,所以此時設置 rotate 的值即為保留最近多少天日志的意思。

c8c9f110-aa8b-11ed-bfe3-dac502259ad0.png

此外,默認添加的日期后綴格式為 yyyyMMdd,可以用 dateformat 自定義。

/opt/logtest/*.log{
daily#每天分割一次
rotate30#保留最近30個分割后的日志文件
copytruncate
missingok
dateext#切割后的文件添加日期作為后綴
dateyesterday#配合dateext使用,添加前一天的日期作為分割后日志的后綴
dateformat-%Y-%m-%d#格式為2022-02-08
}

2.4 按照文件大小分割

我們可以利用 size 配置指定當日志文件達到多大體積時才進行分割。以下配置指定了每天執行分割,但是只有當日志文件大于 5M 時才真正執行分割操作。

/opt/logtest/*.log{
daily#每天分割一次
size5M#源文件小于5M時不分割
rotate30#保留最近30個分割后的日志文件
create
missingok
dateext#切割后的文件添加日期作為后綴
dateyesterday#配合dateext使用,添加前一天的日期作為分割后日志的后綴
}

?

注意:這個配置并不是說日志文件達到指定大小就自動執行分割,它還是要遵循定時任務。比如配置了daily只有到每天指定時間執行分割任務時,才會檢查文件大小,對超過指定大小的文件進行分割。

?

2.5 自定義每小時分割

logrotate 實現每日定時執行日志分割的原理是通過 cron 定時任務,默認在 /etc/cron.daily 中包含 logrotate 可執行命令,所以系統每天會定時啟動 logrotate,然后它會根據配置中具體分割頻率(daily、weekly 等)以及其他條件(比如 size)決定是否要真正執行分割操作。

c8df0758-aa8b-11ed-bfe3-dac502259ad0.png

如果我們想要實現每小時進行一次分割,需要如下步驟:

logrotate 配置文件中指定分割頻率為 hourly;

配置完以后,還需要在 cron 的每小時定時任務中加入 logrotate,因為默認情況下只有 /etc/cron.daily 中包含 logrotate 可執行命令,我們要將它往 /etc/cron.hourly 中也拷貝一份,這樣系統才會每小時調用一次 logrotate 去執行分割。

cp/etc/cron.daily/logrotate/etc/cron.hourly/

2.6 自定義分割執行時間

logrotate 是基于 cron 運行的,所以這個時間是由 cron 控制的,具體可以查詢 cron 的配置文件 /etc/crontab 。舊版 CentOS 的 cron 的配置文件是 /etc/crontab ,新版CentOS 改為 /etc/anacrontab。

c8f3b900-aa8b-11ed-bfe3-dac502259ad0.png

從上面的內容可以看出:

如果機器 沒有關機,默認 logrotate(配置文件里設置的是 cron.daily)一般會在每天的 3 點 05 分到 3 點 50 分之間執行, 真實的延遲時間是 RANDOM_DELAY + delay in minute;

如果在 3-22 這個時間段內服務器處于 關機狀態,則 logrotate 會在機器開機 5 分鐘后執行分割日志的操作。

如果我們覺得每天凌晨 3 點多執行日志分割不合適,那么可以自定義分割執行時間。實現方式可以是:

修改 /etc/anacrontab 中的定時執行時間,實際不推薦,可能會影響系統其他定時任務;

在 /etc/logrotate.d 以外的其他目錄創建 logrotate 配置文件,然后利用 crontab 自定義 cron 表達式來執行 logrotate 對該配置進行分割操作。

推薦采用 crontab 方式自定義執行時間,步驟如下:

在非 /etc/logrotate.d 目錄創建 logrotate 配置文件,這是為了避免被系統的定時任務掃描到該配置而導致重復執行分割。

添加 crontab 計劃任務,在 root 用戶下執行 crontab -e 進入 vim 模式,進行編輯。

crontab-e
#每天23點59分進行日志切割
5923***/usr/sbin/logrotate-f/etc/logrotate_mytime/nginx

重啟 crontab。

#centos6:
servicecrondrestart

#centos7:
systemctlrestartcrond

nginx 日志分割步驟

在 /etc/logrotate.d 中創建文件 nginx,作為 nginx 日志分割的配置文件。指定每天執行一次分割,并且當文件大于 5M 時才進行分割。同時指定 notifempty,當日志文件為空時不分割。

/opt/docker-ws/nginx/logs/*.log{
daily#每天分割一次
size5M#源文件小于5M時不分割
rotate30#保留最近30個分割后的日志文件
copytruncate
notifempty#當日志文件為空時不分割
missingok
dateext#切割后的文件添加日期作為后綴
}

查看結果發現提示權限不夠而分割失敗,這是因為開啟了 selinux 導致,解決方案有如下 2 種:

關閉 selinux

利用 semanage 修改待分割的日志文件所在目錄的權限

#開放/opt/logtest目錄的權限
semanagefcontext-a-tvar_log_t"/opt/logtest(/.*)?"
restorecon-Rv/opt/logtest

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209333
  • Linux系統
    +關注

    關注

    4

    文章

    593

    瀏覽量

    27392
  • 文件
    +關注

    關注

    1

    文章

    565

    瀏覽量

    24727
  • 日志
    +關注

    關注

    0

    文章

    138

    瀏覽量

    10639
  • nginx
    +關注

    關注

    0

    文章

    149

    瀏覽量

    12170

原文標題:最全的 Nginx 日志分割教程

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Nginx日志分割方案

    nginx 默認沒有提供對日志文件的分割功能,所以隨著時間的增長,access.log 和 error.log 文件會越來越大,尤其是 access.log,其日志記錄量比較大,更容易
    發表于 06-19 15:05 ?465次閱讀
    <b class='flag-5'>Nginx</b><b class='flag-5'>日志</b><b class='flag-5'>分割</b>方案

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx.conf syntax is ok
    發表于 07-10 16:40

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx.conf syntax is ok
    發表于 07-11 17:13

    2018上海云棲大會workshop-日志數據采集與分析對接

    名稱加上登陸賬號前綴進行區別創建logstore存儲訪問日志向導創建NGINX日志采集配置文件路徑(/var/log)和文件名稱(access_log),其中NGINX
    發表于 06-20 16:44

    Linux運維Nginx軟件優化之日志優化

    1. 配置Nginx服務相關日志操作1) 進行日志的切割[code][root@oldboy ~]# mkdir /server/scripts/ -p[root@oldboy ~]# cd
    發表于 12-18 15:17

    flume監控nginx日志的使用和提交

    使用flume監控nginx日志并且提交到kafka里面
    發表于 04-16 07:33

    提升日志管理的開源軟件

    開源日志管理最全對比
    發表于 04-26 16:59

    主要學習下nginx的安裝配置

    /nginxNginx日志輪轉,用于logrotate服務的日志切割,相當于java中的log4j和logback;/etc/nginx /etc/nginx/conf.d/etc/
    發表于 10-19 14:12

    基于python的ngxtop的安裝、監控nginx與用法解析

    ngxtop是用python開發的一款監控nginx訪問日志的工具, 它可以實時動態地查看訪問最多的請求。
    的頭像 發表于 02-01 11:44 ?5084次閱讀
    基于python的ngxtop的安裝、監控<b class='flag-5'>nginx</b>與用法解析

    可快速閱讀、查看Nginx日志的工具Rhit

    【導語】:一個格式化 Nginx 日志,可快速閱讀、查看 Nginx 日志的工具。 簡介 Rhit 可以從標準文件夾中讀取 Nginx
    的頭像 發表于 04-04 18:01 ?2608次閱讀
    可快速閱讀、查看<b class='flag-5'>Nginx</b><b class='flag-5'>日志</b>的工具Rhit

    配置Nginx訪問日志

    每當處理客戶請求時,Nginx都會在訪問日志中生成一個新記錄。每個事件記錄都包含一個時間戳,并包含有關客戶端和所請求資源的各種信息。訪問日志可以顯示訪問者的位置,訪問者的訪問的頁面等。
    的頭像 發表于 05-24 09:59 ?2315次閱讀

    如何將HTTP里面的Header信息記錄到訪問日志

    不得不承認Nginx用的非常廣泛,然而Nginx的訪問日志在分析問題時也有很大用途,那么Nginx日志要想增加一些自定義信息就尤為重要了。比
    的頭像 發表于 07-01 11:29 ?2919次閱讀

    Nginx如何監控

    搭建了Nginx集群后,需要繼續深入研究的就是日常Nginx監控。
    的頭像 發表于 08-22 10:03 ?1412次閱讀

    一款Web安服日志管理工具wLogger

    wLogger 是一款集合 日志采集,日志解析持久化存儲,web流量實時監控 。三位一體的web服務流量監控應用。三大功能模塊均可獨立部署啟用互不干擾。目前已內置 nginx 和 apache 的
    的頭像 發表于 02-15 11:46 ?707次閱讀

    nginx日志配置方法

    access_log用來定義日志級別,日志位置。
    的頭像 發表于 10-24 17:43 ?223次閱讀
    主站蜘蛛池模板: 亚洲国产成人精品久久久久 | 幼儿交1300部一区二区| 蜜臀AV久久国产午夜福利软件| 高hbl双性浪荡古代| 18禁止看的免费污网站| 天天操狠狠操夜夜操| 嗯啊…跟校草在教室里做h| 国产最新进精品视频| 超碰在线 视频| 1级午夜影院费免区| 亚洲乱亚洲乱妇13p| 婷婷午夜影院| 日本边添边摸边做边爱边| 久久久久毛片免费观看| 国产色综合久久无码有码| chinesevideos原创麻豆| 精品国产自在现线拍400部| bbw极度另类孕妇| 2012中文字幕在线动漫电影| 亚洲精品白色在线发布| 色综合久久中文色婷婷| 青青视频国产色偷偷| 嫩草影院一区| 久久亚洲精品成人综合| 国偷自产AV一区二区三区健身房| 国产超碰AV人人做人人爽| 超碰免费视频公开97| beeg xxx日本老师| 99热久久久无码国产精品性麻豆 | 粗壮挺进邻居人妻无码| 国产福利秒拍weipai.ee| 99精品免费在线观看| 2020最新无码国产在线视频| 一品道门在线视频| 伊人影院中文字幕| 伊人久久大香线蕉无码麻豆| 亚洲色图影院| 夜色帮首页| 综合色就爱涩涩涩综合婷婷| 樱桃熟了A级毛片| 真实国产乱子伦精品一区二区三区|