<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux 日志管理經(jīng)驗(yàn)總結(jié)( crontab + logrotate )

          共 5551字,需瀏覽 12分鐘

           ·

          2024-07-16 08:00


                   

          鏈接:https://www.cnblogs.com/xiaoyaozhe/p/17671275.html

          日志管理目標(biāo)

          日志的管理,一般包括兩大部分

          1. 日志內(nèi)容,合理的日志內(nèi)容(日志錨點(diǎn),內(nèi)容格式,等)可以為應(yīng)用服務(wù)的執(zhí)行記錄、問(wèn)題排查提供最有力的幫助

          2. 日志存檔規(guī)則,包括日志分割方式(按日期、按文件大小,等),日志存檔數(shù)量,如只保存最近一個(gè)月,等

          對(duì)于自行開(kāi)發(fā)的應(yīng)用服務(wù),日志的管理可以由開(kāi)發(fā)人員通過(guò)日志組件定制化,如logback,log4j等,但對(duì)于安裝部署的第三方組件如MySQL、nginx、redis等,以及開(kāi)發(fā)引用的第三方組件如nacos,sentinel等,除非組件開(kāi)放了豐富的日志配置參數(shù),否則將無(wú)法按照開(kāi)發(fā)人員的要求管理日志文件。

           

          特殊日志場(chǎng)景

          一些特殊應(yīng)用服務(wù)或組件,如果沒(méi)有進(jìn)行特定的配置操作,默認(rèn)情況下將使日志文件不受控制,為后期清理造成麻煩,常見(jiàn)的有

          • nohup方式啟動(dòng)應(yīng)用服務(wù),如果未配置日志重定向,或者重定向到了單文件,則系統(tǒng)將日志持續(xù)輸出在nohup.out文件或重定向的單文件

          • mysql數(shù)據(jù)庫(kù)支持配置日志文件路徑,但無(wú)法自動(dòng)清理日志內(nèi)容

          • nginx支持配置日志內(nèi)容模板以及日志文件路徑(默認(rèn)access.log、error.log),但無(wú)法自動(dòng)清理日志內(nèi)容

          以上類(lèi)似情況下,日志將始終在單文件中持續(xù)輸出,過(guò)了一定時(shí)間后,日志文件將占用無(wú)限大的磁盤(pán)存儲(chǔ),對(duì)整個(gè)系統(tǒng)造成運(yùn)行故障。

           

          特殊工具 - 定時(shí)清理

          可以使用Linux自帶定時(shí)工具 crontab + 清理日志腳本的方式,實(shí)現(xiàn)定時(shí)清理,示例如下

          crontab -e# 定時(shí)清理日志,保留最近7天1 0 * * * find /logs.dir/ -mtime +7 | xargs rm -rf

          特別關(guān)注

          Linux系統(tǒng)下,有些應(yīng)用服務(wù)組件如nginx與MySQL,運(yùn)行過(guò)程中,對(duì)日志存儲(chǔ)文件將使用文件句柄跟蹤,如此會(huì)有以下問(wèn)題:

          1. 將日志文件重命名,同時(shí)新建一個(gè)同名的文件,組件依然會(huì)向原來(lái)的文件中輸出日志

          2. 將日志文件刪除(rm -f),也需要同時(shí)將應(yīng)用服務(wù)組件進(jìn)程重啟才行,否則刪除的文件也會(huì)由于被占用而無(wú)法釋放磁盤(pán)資源

          3. 刪除但被占用的文件將無(wú)法通過(guò) ls -l 命令查看,也無(wú)法通過(guò) du -sh 命令統(tǒng)計(jì)磁盤(pán)占用,但 df -h 命令會(huì)顯示真實(shí)磁盤(pán)占用,只能通過(guò) lsof 命令,查看打開(kāi)的文件描述符,對(duì)運(yùn)維造成很大麻煩

          針對(duì)這種情況

          1. 如果只是單次清理文件,可以使用清空文件的方式,如 echo > log.log,或其他清空的方式,但切記不能直接 rm -f 刪除

          2. 如果已經(jīng)執(zhí)行 rm -f 刪除,則可以使用 lsof | grep -i deleted 命令查看被刪除但無(wú)法回收的文件,然后將相應(yīng)的進(jìn)程重啟即可回收

          3. 如果要保留日志內(nèi)容,又要控制存儲(chǔ)容量,則需要使用logrotate的 拷貝+清空 方式,即只是將日志文件內(nèi)容拷貝一份存檔,然后清空當(dāng)前日志文件(而非刪除)

           

          特殊工具 - logrotate

          對(duì)于不方便進(jìn)行自定義日志管理的應(yīng)用服務(wù)組件,可以自定義腳本維護(hù),可以自行開(kāi)發(fā)應(yīng)用軟件維護(hù),但強(qiáng)聯(lián)推薦使用Linux系統(tǒng)集成的日志管理工具logrotate,該工具由Linux系統(tǒng)crontab定時(shí)調(diào)度,支持為相關(guān)日志文件(或其他文件)自定義存儲(chǔ)規(guī)則,但日志內(nèi)容只能按照應(yīng)用服務(wù)組件的實(shí)現(xiàn)輸出。

           

          logrotate提供的功能參數(shù)很多,比較常用的如下

          • 日志分割周期

          • 日志文件擴(kuò)展名

          • 日志文件分割方式,包括新建+刪除,拷貝+清空,等,適用不同應(yīng)用服務(wù)場(chǎng)景

          • 日志內(nèi)容壓縮

          • 日志文件存檔數(shù)量

           

          logrotate 命令格式:logrotate [OPTION...] <configfile>-d, --debug :debug模式,測(cè)試配置文件是否有錯(cuò)誤。-f, --force :強(qiáng)制轉(zhuǎn)儲(chǔ)文件。-m, --mail=command :壓縮日志后,發(fā)送日志到指定郵箱。-s, --state=statefile :使用指定的狀態(tài)文件。-v, --verbose :顯示轉(zhuǎn)儲(chǔ)過(guò)程。
          vi /etc/logrotate.d/nginx #在/etc/logrotate.d/目錄下新建nginx文件,內(nèi)容如下:/usr/share/nginx/log/*.log{dailymissingokrotate 7compressdelaycompressnotifemptycreate 644 root rootsharedscriptspostrotate[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`endscript}

          #調(diào)用方法logrotate -d /etc/logrotate.d/nginx#結(jié)合crontab定時(shí)執(zhí)行 echo "0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx > /dev/null 2>&1" >> /var/spool/cron/root


          #參數(shù)說(shuō)明:compress 通過(guò)gzip 壓縮轉(zhuǎn)儲(chǔ)以后的日志nocompress 不做gzip壓縮處理copytruncate 用于還在打開(kāi)中的日志文件,把當(dāng)前日志備份并截?cái)啵皇窍瓤截愒偾蹇盏姆绞剑截惡颓蹇罩g有一個(gè)時(shí)間差,可能會(huì)丟失部分日志數(shù)據(jù)。nocopytruncate 備份日志文件不過(guò)不截?cái)?/span>create mode owner group 輪轉(zhuǎn)時(shí)指定創(chuàng)建新文件的屬性,如create 0777 nobody nobodynocreate 不建立新的日志文件delaycompress 和compress 一起使用時(shí),轉(zhuǎn)儲(chǔ)的日志文件到下一次轉(zhuǎn)儲(chǔ)時(shí)才壓縮nodelaycompress 覆蓋 delaycompress 選項(xiàng),轉(zhuǎn)儲(chǔ)同時(shí)壓縮。missingok 如果日志丟失,不報(bào)錯(cuò)繼續(xù)滾動(dòng)下一個(gè)日志errors address 專(zhuān)儲(chǔ)時(shí)的錯(cuò)誤信息發(fā)送到指定的Email 地址ifempty 即使日志文件為空文件也做輪轉(zhuǎn),這個(gè)是logrotate的缺省選項(xiàng)。notifempty 當(dāng)日志文件為空時(shí),不進(jìn)行輪轉(zhuǎn)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è)目錄下sharedscripts 運(yùn)行postrotate腳本,作用是在所有日志都輪轉(zhuǎn)后統(tǒng)一執(zhí)行一次腳本。如果沒(méi)有配置這個(gè),那么每個(gè)日志輪轉(zhuǎn)后都會(huì)執(zhí)行一次腳本prerotate 在logrotate轉(zhuǎn)儲(chǔ)之前需要執(zhí)行的指令,例如修改文件的屬性等動(dòng)作;必須獨(dú)立成行postrotate 在logrotate轉(zhuǎn)儲(chǔ)之后需要執(zhí)行的指令,例如重新啟動(dòng) (kill -HUP) 某個(gè)服務(wù)!必須獨(dú)立成行daily 指定轉(zhuǎn)儲(chǔ)周期為每天weekly 指定轉(zhuǎn)儲(chǔ)周期為每周monthly 指定轉(zhuǎn)儲(chǔ)周期為每月rotate count 指定日志文件刪除之前轉(zhuǎn)儲(chǔ)的次數(shù),0 指沒(méi)有備份,5 指保留5 個(gè)備份dateext 使用當(dāng)期日期作為命名格式dateformat .%s 配合dateext使用,緊跟在下一行出現(xiàn),定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個(gè)參數(shù)size(或minsize) log-size 當(dāng)日志文件到達(dá)指定的大小時(shí)才轉(zhuǎn)儲(chǔ),log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
          #當(dāng)日志文件 >= log-size 的時(shí)候就轉(zhuǎn)儲(chǔ)。以下為合法格式:(其他格式的單位大小寫(xiě)沒(méi)有試過(guò))size = 5 或 size 5 (>= 5 個(gè)字節(jié)就轉(zhuǎn)儲(chǔ))size = 100k 或 size 100ksize = 100M 或 size 100M

          附錄:logrotate簡(jiǎn)易配置


          
            
          MySQL/data/mysql/log/mysqld.log{    daily    dateext    dateyesterday    copytruncate    notifempty    missingok    olddir backup    rotate 60        compress}
          nginx/usr/local/nginx/logs/access.log/usr/local/nginx/logs/error.log{ daily dateext dateyesterday copytruncate notifempty missingok olddir backup rotate 30 compress}
          
            


          附錄:關(guān)于常用組件運(yùn)行時(shí)日志管理

          1. nginx不支持自動(dòng)清理,默認(rèn)單文件持續(xù)寫(xiě)入,且不會(huì)自動(dòng)滾動(dòng)

          2. mysql不支持自動(dòng)清理,默認(rèn)單文件持續(xù)寫(xiě)入,且不會(huì)自動(dòng)滾動(dòng)

          3. zookeeper默認(rèn)支持自動(dòng)清理(限制文件大小和個(gè)數(shù)),log4j配置文件維護(hù)

          4. redis不支持自動(dòng)清理,只記錄少量核心日志,單文件持續(xù)寫(xiě)入,但默認(rèn)只記錄少量核心日志,可以不處理

          5. kafka的數(shù)據(jù)記錄日志(topic、offset等),支持自動(dòng)清理,配置文件維護(hù)

          6. kafka操作日志,默認(rèn)在安裝目錄logs目錄,支持自動(dòng)滾動(dòng),但不會(huì)自動(dòng)清理,log4j配置文件維護(hù)

          瀏覽 100
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品九九九九九九九九 | 成人激情站,开心五月天 | 亚洲欧美v在线视频 | 日本三级视频在线观看历史 | 青青草免费在线看视频 |