0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

馬哥Linux運(yùn)維 ? 來源:博客園xiaoyaozhe ? 2024-10-24 17:36 ? 次閱讀

日志管理目標(biāo)

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

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

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

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

特殊日志場景

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

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

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

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

以上類似情況下,日志將始終在單文件中持續(xù)輸出,過了一定時(shí)間后,日志文件將占用無限大的磁盤存儲(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)行過程中,對(duì)日志存儲(chǔ)文件將使用文件句柄跟蹤,如此會(huì)有以下問題:

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

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

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

針對(duì)這種情況

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

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

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

特殊工具 - logrotate

對(duì)于不方便進(jìn)行自定義日志管理的應(yīng)用服務(wù)組件,可以自定義腳本維護(hù),可以自行開發(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ù)場景

日志內(nèi)容壓縮

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

logrotate 命令格式:
logrotate [OPTION...] 
-d, --debug :debug模式,測試配置文件是否有錯(cuò)誤。
-f, --force :強(qiáng)制轉(zhuǎn)儲(chǔ)文件。
-m, --mail=command :壓縮日志后,發(fā)送日志到指定郵箱。
-s, --state=statefile :使用指定的狀態(tài)文件。
-v, --verbose :顯示轉(zhuǎn)儲(chǔ)過程。


vi /etc/logrotate.d/nginx     #在/etc/logrotate.d/目錄下新建nginx文件,內(nèi)容如下:
/usr/share/nginx/log/*.log{
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
    sharedscripts
    postrotate
        [ ! -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ù)說明:
compress                                  通過gzip 壓縮轉(zhuǎn)儲(chǔ)以后的日志
nocompress                                不做gzip壓縮處理
copytruncate                              用于還在打開中的日志文件,把當(dāng)前日志備份并截?cái)?;是先拷貝再清空的方式,拷貝和清空之間有一個(gè)時(shí)間差,可能會(huì)丟失部分日志數(shù)據(jù)。
nocopytruncate                            備份日志文件不過不截?cái)?create mode owner group                   輪轉(zhuǎn)時(shí)指定創(chuàng)建新文件的屬性,如create 0777 nobody nobody
nocreate                                  不建立新的日志文件
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                            專儲(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í)行一次腳本。如果沒有配置這個(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 指沒有備份,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ǔ)。以下為合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個(gè)字節(jié)就轉(zhuǎn)儲(chǔ))
size = 100k 或 size 100k
size = 100M 或 size 100M

附錄:logrotate簡易配置


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í)日志管理

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

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

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

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11399

    瀏覽量

    212018
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    575

    瀏覽量

    25058
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    838

    瀏覽量

    27230
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    140

    瀏覽量

    10777

原文標(biāo)題:Linux日志管理經(jīng)驗(yàn)總結(jié)(crontab+logrotate)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Altera SOPC專題競賽-經(jīng)驗(yàn)總結(jié)

    Altera SOPC專題競賽-經(jīng)驗(yàn)總結(jié)Altera SOPC專題競賽-經(jīng)驗(yàn)總結(jié).docx
    發(fā)表于 08-10 18:19

    電源制作高手經(jīng)驗(yàn)總結(jié)

    電源制作高手經(jīng)驗(yàn)總結(jié)電源制作高手經(jīng)驗(yàn)總結(jié) 28頁.pdf (2.9 MB )
    發(fā)表于 06-05 02:05

    SOPC Builder/Nios 學(xué)習(xí)經(jīng)驗(yàn)總結(jié)

    SOPC Builder/Nios 學(xué)習(xí)經(jīng)驗(yàn)總結(jié)
    發(fā)表于 07-22 15:32 ?0次下載
    SOPC Builder/Nios 學(xué)習(xí)<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    線圈天線設(shè)計(jì)經(jīng)驗(yàn)總結(jié)

    線圈天線設(shè)計(jì)經(jīng)驗(yàn)總結(jié)
    發(fā)表于 09-12 17:21 ?224次下載

    做四軸飛行器的經(jīng)驗(yàn)總結(jié)

    做四軸飛行器的經(jīng)驗(yàn)總結(jié),請(qǐng)各位大神共同學(xué)習(xí),里面是一位大神做四軸飛行器的經(jīng)驗(yàn)總結(jié)
    發(fā)表于 11-11 16:52 ?0次下載

    電池管理經(jīng)驗(yàn)之談

    電池管理經(jīng)驗(yàn)之談,有需要的下來看看
    發(fā)表于 08-24 16:30 ?40次下載

    開關(guān)電源測量的經(jīng)驗(yàn)總結(jié)

    開關(guān)電源測量的經(jīng)驗(yàn)總結(jié),感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:34 ?0次下載

    模擬電路設(shè)計(jì)經(jīng)驗(yàn)總結(jié)

    模擬電子的相關(guān)知識(shí)學(xué)習(xí)教材資料——模擬電路設(shè)計(jì)經(jīng)驗(yàn)總結(jié)
    發(fā)表于 09-27 15:19 ?0次下載

    指針經(jīng)驗(yàn)總結(jié)

    指針經(jīng)驗(yàn)總結(jié)
    發(fā)表于 10-27 15:44 ?19次下載
    指針<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    TD-LTE網(wǎng)絡(luò)優(yōu)化經(jīng)驗(yàn)總結(jié)解析

    TD-LTE網(wǎng)絡(luò)優(yōu)化經(jīng)驗(yàn)總結(jié)解析說明。
    發(fā)表于 04-27 10:30 ?23次下載

    電路設(shè)計(jì)的一些經(jīng)驗(yàn)總結(jié)

    電路設(shè)計(jì)的一些經(jīng)驗(yàn)總結(jié)
    發(fā)表于 12-02 13:57 ?45次下載

    EMI整改經(jīng)驗(yàn)總結(jié)

    EMI整改經(jīng)驗(yàn)總結(jié)
    發(fā)表于 12-20 15:55 ?45次下載

    富士變頻器維修經(jīng)驗(yàn)總結(jié)

    富士變頻器維修經(jīng)驗(yàn)總結(jié)
    發(fā)表于 10-07 10:55 ?0次下載

    選擇燒結(jié)銀的經(jīng)驗(yàn)總結(jié)

    選擇燒結(jié)銀的經(jīng)驗(yàn)總結(jié)
    的頭像 發(fā)表于 12-17 15:46 ?1582次閱讀
    選擇燒結(jié)銀的<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)

    GaN E-HEMTs的PCB布局經(jīng)驗(yàn)總結(jié)
    的頭像 發(fā)表于 03-13 15:52 ?331次閱讀
    GaN E-HEMTs的PCB布局<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品