国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何用logrotate管理每日增長(zhǎng)的日志

瀏覽:5日期:2023-05-12 10:25:34
目錄
  • logrotate簡(jiǎn)介
  • 安裝logrotate
  • logrotate基本工作原理
  • logrotate的配置和使用
  • 總結(jié)

logrotate簡(jiǎn)介

logrotate is designed to ease administration of systems that generate large numbers of log files. It allows automatic rotation, compression, removal, and mailing of log files. Each log file may be handled daily, weekly, monthly, or when it grows too large.

這是logrotate文檔中對(duì)其自身的描述,其實(shí)logrotate功能很簡(jiǎn)單,正如其名,按一定周期自動(dòng)循環(huán)分割和保存日志防止無(wú)限增長(zhǎng),必要的時(shí)候進(jìn)行壓縮、刪除,還可以進(jìn)行郵件通知等功能。

很多服務(wù)器上總會(huì)運(yùn)行著一些會(huì)不停生成成噸日志的程序,最簡(jiǎn)單的比如nginx、httpd之類的web服務(wù)器的訪問(wèn)日志,為了保持這些日志的可檢索以及防止無(wú)限增長(zhǎng)把有限的硬盤都吃干凈了,就會(huì)有五花八門的cron腳本來(lái)處理這些日志,事實(shí)上這些事情都可以由logrotate代勞。

安裝logrotate

事實(shí)上大多數(shù)Linux發(fā)行版本都默認(rèn)安裝了logrotate,可以通過(guò)以下命令來(lái)判斷系統(tǒng)是否已經(jīng)預(yù)裝了logrotate:

rpm包管理器:

rpm -qa|grep logrotate

dpkg包管理器:

dpkg --list|grep logrotate

更簡(jiǎn)單粗暴的方法:

which logrotate

如果能看到有字符串返回的話,你的服務(wù)器就應(yīng)該預(yù)裝了logrotate,并且它已經(jīng)每天在默默地工作了,只不過(guò)你并沒(méi)有給他分配活兒。

如果沒(méi)有安裝的話,用正常的包管理工具都能安裝它:

yum install logrotateapt-get install logrotate

logrotate基本工作原理

作為一個(gè)定時(shí)處理的管理工具,logrotate本身是個(gè)命令行的工具,然而它需要定時(shí)處理你的日志,所以顯然logrotate還是得基于cron來(lái)工作的,否則就沒(méi)有人定時(shí)來(lái)喚醒它讓它干活了,正常情況下logrotate已經(jīng)作為cron.daily的一個(gè)任務(wù)每天被定時(shí)在執(zhí)行了,這個(gè)定時(shí)腳本位于/etc/cron.daily/logrotate

#!/bin/sh# Clean non existent log file entries from status filecd /var/lib/logrotatetest -e status || touch statushead -1 status > status.cleansed "s/"http://g" status | while read logfile datedo    [ -e "$logfile" ] && echo "\"$logfile\" $date"done >> status.cleanmv status.clean statustest -x /usr/sbin/logrotate || exit 0/usr/sbin/logrotate /etc/logrotate.conf

上面這段是Ubuntu中默認(rèn)的logrotate腳本,各個(gè)不同版本上的logrotate腳本會(huì)有細(xì)微的不同,但是核心都是使用/etc/logrotate.conf配置腳本來(lái)啟動(dòng)logrotate。

然而這段腳本只是位于這個(gè)目錄里,為什么會(huì)被每天調(diào)用呢,而且每天什么點(diǎn)調(diào)用呢?

可以查看CRON的默認(rèn)配置文件/etc/crontab(新版CentOS中其默認(rèn)配置文件位于/etc/anacrontab)的內(nèi)容:

# /etc/crontab: system-wide crontab# Unlike any other crontab you don"t have to run the `crontab"# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user  command17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

事實(shí)上CRON默認(rèn)會(huì)存在這4條指令,分別是每小時(shí)、每天、每周、每個(gè)月會(huì)執(zhí)行對(duì)應(yīng)目錄下的腳本,而不需要再通過(guò)日常常用的crontab去配置,可以看到cron.daily目錄下的腳本在每天的6點(diǎn)25分會(huì)被執(zhí)行,這也就意味著在這臺(tái)機(jī)器上每天6點(diǎn)25分會(huì)啟動(dòng)logrotate進(jìn)行日志的處理,各個(gè)系統(tǒng)的默認(rèn)配置也是各不相同的。

最后來(lái)看一下默認(rèn)的配置文件/etc/logrotate.conf:

# see "man logrotate" for details# rotate log files weeklyweekly# use the syslog group by default, since this is the owning group# of /var/log/syslog.su root syslog# keep 4 weeks worth of backlogsrotate 4# create new (empty) log files after rotating old onescreate# uncomment this if you want your log files compressed#compress# packages drop log rotation information into this directoryinclude /etc/logrotate.d# no packages own wtmp, or btmp -- we"ll rotate them here/var/log/wtmp {    missingok    monthly    create 0664 root utmp    rotate 1}/var/log/btmp {    missingok    monthly    create 0660 root utmp    rotate 1}# system-specific logs may be configured here

其實(shí)默認(rèn)配置文件中給出的是logrotate的一些默認(rèn)配置選項(xiàng),并給出了一些樣例的配置(如wtmp,btmp),這些配置的意義在后文中會(huì)予以闡述,而這個(gè)配置文件中還包含了include /etc/logrotate.d,這使得我們可以不用將所有的配置扎堆寫入這個(gè)默認(rèn)配置文件中,而是可以分散地管理在/etc/logrotate.d目錄下,事實(shí)上/etc/logrotate.d也已經(jīng)包含了一些樣例的配置文件供參考。

logrotate的配置和使用

如同剛才所說(shuō)的,logrotate會(huì)每日CRON啟動(dòng)并執(zhí)行,我們只需要在/etc/logrotate.d目錄中添加我們需要的配置,就可以利用logrotate來(lái)自動(dòng)管理我們需要的日志文件。

這里先來(lái)看一個(gè)目錄下已經(jīng)存在的樣例配置dpkg:

/var/log/dpkg.log {    monthly    rotate 12    compress    delaycompress    missingok    notifempty    create 644 root root}/var/log/alternatives.log {    monthly    rotate 12    compress    delaycompress    missingok    notifempty    create 644 root root}

正如其名稱dpkg,這個(gè)配置是用來(lái)處理包管理器dpkg的默認(rèn)日志的,處理的日志文件是/var/log/dpkg.log與/var/log/alternatives.log這兩個(gè)文件

其配置內(nèi)容如下:

  • monthly:按月處理日志
  • rotate 12:保留12份日志
  • compress:日志分割后會(huì)進(jìn)行g(shù)zip壓縮
  • delaycompress:日志壓縮會(huì)被延后到下次分割時(shí)進(jìn)行
  • missingok:目標(biāo)日志文件不存在程序也不會(huì)報(bào)錯(cuò)退出
  • notifempty:目標(biāo)日志文件為空時(shí)不進(jìn)行分割操作
  • create 644 root root:以644也就是rw-r–r–權(quán)限來(lái)建立分割出來(lái)的文件,同時(shí)該分割文件所屬用戶為root,用戶組為root

在/var/log下列出文件列表,可以看到dpkg的日志的確被分割并壓縮了:

仿照這個(gè)樣例文件,我們可以配置一個(gè)類似的處理任務(wù),這里處理一下nginx的log文件,一般web serve的access log文件都是日志重災(zāi)區(qū),建立一個(gè)/etc/logrotate.d/nginx配置文件,內(nèi)容如下:

/home/wwwlogs/*.log {    daily    rotate 7    dateext    compress    delaycompress        missingok    notifempty    create 644 root root    sharedscripts    postrotatekill -USR1 `cat /usr/local/nginx/logs/nginx.pid`    endscript}

與之前的樣例配置類似,注意到聲明日志文件位置時(shí)使用了*通配符,這意味著/home/wwwlogs/下的所有.log文件都會(huì)被logrotate處理,這里多出了幾行配置

說(shuō)明如下:

  • daily:每天處理日志
  • dateext:備份的日志文件的后綴不再是默認(rèn)的.1 .2 .3的遞增格式,而是.YYYYMMDD的日期格式
  • sharedscripts:配置該選項(xiàng)時(shí),prerotate和postrotate段的腳本會(huì)在所有文件被處理結(jié)束(被處理前)統(tǒng)一執(zhí)行,而不是每個(gè)文件前后分別執(zhí)行一次
  • postrotate:處理日志后鉤子,postrotate和endscript構(gòu)成一個(gè)shell語(yǔ)句塊,在日志文件被處理后這部分語(yǔ)句會(huì)被執(zhí)行,對(duì)應(yīng)的還有prerotate語(yǔ)句塊

這樣nginx的log文件的處理配置就完成了,但是我們可能還需要確認(rèn)一下配置的內(nèi)容到底是否正確呢,這時(shí)候可以利用logrotate命令行的debug選項(xiàng)來(lái)進(jìn)行測(cè)試

命令如下:

logrotate -d -f /etc/logrotate.d/nginx

開啟了debug選項(xiàng)時(shí),logrotate會(huì)詳細(xì)地給出處理日志過(guò)程中的處理信息,但是并不會(huì)真正地去處理日志文件,所以可以用來(lái)測(cè)試配置文件處理的是否正確

這行命令的輸出如下:

reading config file /etc/logrotate.d/nginxHandling 1 logsrotating pattern: /home/wwwlogs/*.log  forced from command line (7 rotations)empty log files are not rotated, old logs are removedconsidering log /home/wwwlogs/access.log  log needs rotatingconsidering log /home/wwwlogs/jp01.sanaecon.com.log  log needs rotatingconsidering log /home/wwwlogs/nginx_error.log  log needs rotatingrotating log /home/wwwlogs/access.log, log->rotateCount is 7dateext suffix "-20151108"glob pattern "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"glob finding logs to compress failedglob finding old rotated logs failedrotating log /home/wwwlogs/jp01.sanaecon.com.log, log->rotateCount is 7dateext suffix "-20151108"glob pattern "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"glob finding logs to compress failedglob finding old rotated logs failedrotating log /home/wwwlogs/nginx_error.log, log->rotateCount is 7dateext suffix "-20151108"glob pattern "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"glob finding logs to compress failedglob finding old rotated logs failedrenaming /home/wwwlogs/access.log to /home/wwwlogs/access.log-20151108creating new /home/wwwlogs/access.log mode = 0644 uid = 0 gid = 0renaming /home/wwwlogs/jp01.sanaecon.com.log to /home/wwwlogs/jp01.sanaecon.com.log-20151108creating new /home/wwwlogs/jp01.sanaecon.com.log mode = 0644 uid = 0 gid = 0renaming /home/wwwlogs/nginx_error.log to /home/wwwlogs/nginx_error.log-20151108creating new /home/wwwlogs/nginx_error.log mode = 0644 uid = 0 gid = 0running postrotate scriptrunning script with arg /home/wwwlogs/*.log : "kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`"

可以看到logrotate如我們?cè)O(shè)想的那樣在正常處理日志文件,至此一個(gè)logrotate配置就完成了。

logrotate命令行除了可以用來(lái)展示配置文件配置是否正確以外,還可以用來(lái)手動(dòng)執(zhí)行日志分割,使用以下命令行:

logrotate -f /etc/logrotate.d/nginx

就會(huì)脫離CRON手動(dòng)運(yùn)行一次日志分割和處理任務(wù),事實(shí)上通過(guò)這個(gè)方式也可以用第三方的其他程序來(lái)管理日志分割的頻率。

本文中給出了一些常見的配置文件中的配置參數(shù)的含義,更多其他的配置參數(shù)的含義和功能可以參考官方的配置文檔:http://linuxconfig.org/logrotate-8-manual-page

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持。

標(biāo)簽: Linux
主站蜘蛛池模板: 龙山县| 横峰县| 原平市| 安康市| 宁武县| 于都县| 岳西县| 隆子县| 江孜县| 新干县| 福建省| 朔州市| 北海市| 墨玉县| 沅陵县| 深州市| 南雄市| 富裕县| 茶陵县| 贺州市| 勐海县| 青浦区| 梅河口市| 台中县| 静乐县| 册亨县| 营口市| 娱乐| 东乌| 乐安县| 博乐市| 南漳县| 扎赉特旗| 通州区| 丰顺县| 浦北县| 昔阳县| 泊头市| 孝义市| 凤阳县| 泰和县|