欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux日志輪詢方案

 更新時間:2024年10月14日 10:50:50   作者:loveLifeLoveCoding  
Linux系統(tǒng)中的日志文件會隨時間增長,手動清理較為繁瑣,logrotate程序可自動執(zhí)行日志文件的輪換、壓縮、刪除和郵件發(fā)送,節(jié)省磁盤空間,logrotate基于crontab運行,調用配置文件/etc/logrotate.conf,用戶可在/etc/logrotate.d目錄放置自定義配置文件

logrotate 簡介

一般來說,日志是任何故障排除過程中非常重要的一部分,但這些日志會隨著時間增長。在這種情況下,我們需要手動執(zhí)行日志清理以回收空間,這是一件繁瑣的管理任務。為了解決這個問題,我們可以在 Linux 中配置 logrotate 程序,它可以自動執(zhí)行日志文件的輪換、壓縮、刪除和用郵件發(fā)出。

我們可以配置 logrotate 程序,以便每個日志文件可以在每天、每周、每月或當它變得太大時處理。

logrotate軟件是一個日志管理工具,用于 切割日志,刪除舊的日志文件,并創(chuàng)建新的日志文件,起到“轉儲作用”,可以為系統(tǒng)節(jié)省磁盤空間。一般centos系統(tǒng)已經自帶安裝好了。

logrotate是基于 crontab 運行的,運行時,logrotate 會調用配置文件 /etc/logrotate.conf 。可以在 /etc/logrotate.d 目錄里放置自定義好的配置文件,用來覆蓋 logrotate.conf 的缺省值。

logrotate 版本查看

root@test 10:14:51:/usr# logrotate --version
logrotate 3.11.0

logrotate 配置文件

  • 命令: /usr/sbin/logrotate
  • 配置文件: /etc/logrotate.conf

這是 logrotate 的主配置文件。logrotate 還在 /etc/logrotate.d/ 中存儲了特定服務的配置。

確保下面的那行包含在 /etc/logrotate.conf 中,以讀取特定服務日志配置。
include  /etc/logrotate.d`

logrotate 歷史:

/var/lib/logrotate/logrotate.status

日志回滾原理

當日志達到某個特定的大小,我們將日志分類,之前的日志保留一個備份,再產生的日志創(chuàng)建一個同名的文件保存新的日志.

重要的 logrotate 選項:

compress                                   通過gzip 壓縮轉儲以后的日志
nocompress                                不做gzip壓縮處理
copytruncate                              用于還在打開中的日志文件,把當前日志備份并截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數(shù)據(jù)。
nocopytruncate                           備份日志文件不過不截斷
create mode owner group             輪轉時指定創(chuàng)建新文件的屬性,如create 0777 nobody nobody
nocreate                                    不建立新的日志文件
delaycompress                           和compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮
nodelaycompress                        覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok                                 如果日志丟失,不報錯繼續(xù)滾動下一個日志
errors address                           專儲時的錯誤信息發(fā)送到指定的Email 地址
ifempty                                    即使日志文件為空文件也做輪轉,這個是logrotate的缺省選項。
notifempty                               當日志文件為空時,不進行輪轉
mail address                             把轉儲的日志文件發(fā)送到指定的E-mail 地址
nomail                                     轉儲時不發(fā)送日志文件
olddir directory                         轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統(tǒng)
noolddir                                   轉儲后的日志文件和當前日志文件放在同一個目錄下
sharedscripts                           運行postrotate腳本,作用是在所有日志都輪轉后統(tǒng)一執(zhí)行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執(zhí)行一次腳本
prerotate                                 在logrotate轉儲之前需要執(zhí)行的指令,例如修改文件的屬性等動作;必須獨立成行
postrotate                               在logrotate轉儲之后需要執(zhí)行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行
daily                                       指定轉儲周期為每天
weekly                                    指定轉儲周期為每周
monthly                                  指定轉儲周期為每月
rotate count                            指定日志文件刪除之前轉儲的次數(shù),0 指沒有備份,5 指保留5 個備份
dateext                                  使用當期日期作為命名格式
dateformat .%s                       配合dateext使用,緊跟在下一行出現(xiàn),定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數(shù)
size(或minsize) log-size            當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
當日志文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個字節(jié)就轉儲)
size = 100k 或 size 100k
size = 100M 或 size 100M

sshd 日志回滾實戰(zhàn)

修改配置文件

[root@ localhost cron.daily]# vim /etc/logrotate.conf
/var/log/sshd.log {         #  指定的是要切割的日志文件
    missingok               # 如果文件丟失不報錯
    monthly                 # 每月輪換一次
    create 0664 root utmp   # 設置sshd.log這個文件的屬主和屬組
    minsize 10M             # 文件超過10M進行回滾
    rotate 2                # 日志進行分割后,保留兩份歷史數(shù)據(jù)
}

重啟rsyslog

[root@ localhost cron.daily]# systemctl restart rsyslog

強制切割

[root@ localhost cron.daily]# logrotate –vf /etc/logrotate.conf
[root@ localhost cron.daily]# cd /var/log/
[root@ localhost log]# ll sshd.log 
-rw------- 1 root root 0 2019-11-29 14:00 sshd.log
# 切割完之后,源文件大小變?yōu)?

日志切割,是可以按照文件的大小和時間來進行切割

以系統(tǒng)日志/var/log/message做切割來簡單說明下:

  • 第一次執(zhí)行完rotate(輪轉)之后,原本的messages會變成messages.1,而且會制造一個空的messages給系統(tǒng)來儲存日志;
  • 第二次執(zhí)行之后,messages.1會變成messages.2,而messages會變成messages.1,又造成一個空的messages來儲存日志!
  • 如果僅設定保留三個日志(即輪轉3次)的話,那么執(zhí)行第三次時,則 messages.3這個檔案就會被刪除,并由后面的較新的保存日志所取代!也就是會保存最新的幾個日志。
  • 日志究竟輪換幾次,這個是根據(jù)配置文件中的rotate參數(shù)來判定的。

測試和運行 logrotate

如果等不及cron自動執(zhí)行日志輪轉,想手動強制切割日志,需要加-f參數(shù);不過正式執(zhí)行前最好通過Debug選項來驗證一下(-d參數(shù)),這對調試也很重要

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

具體 logrotate 命令格式如下:

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

debug 模式

并不會真正進行 rotate 或者 compress 操作,但是會打印出整個執(zhí)行的流程,和調用的腳本等詳細信息。

logrotate -d <configfile>

verbose 模式

會真正執(zhí)行操作,打印出詳細信息。

logrotate -v <configfile>

force 強制執(zhí)行

如果時間不符合要求,logrotate 也不會真正執(zhí)行時,如果想要立即執(zhí)行,查看結果,就使用到了 強制執(zhí)行模式。

logrotate -f <configfile>

添加 crontab 計劃任務

執(zhí)行 crontab -e 進入 vim 模式,進行編輯。

[root@root local]# crontab -e

#每天 23點59分進行日志切割
59 23 * * * /usr/sbin/logrotate -s /tmp/logrotate.status /etc/logrotate.d/tomcat

解釋:

59 23 * * * cron表達式
/usr/sbin/logrotate 啟動logrotate
-s /tmp/logrotate.status 保存執(zhí)行狀態(tài)
/etc/logrotate.d/tomcat 定時任務 ,前提是有 tomcat 文件

tomcat 文件內容:

/soft/tomcat/logs/catalina.out{
    minsize 50M
    rotate 20
    compress
    copytruncate
    notifempty
}

crontab 常用命令

查看所有的定時任務 crontab -l

[root@root local]# crontab -l
.....(省略)
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate
.....(省略)

編輯定時任務 crontab -e

[root@root local]# crontab -e   # 進入vim 模式
.....(省略)
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate
.....(省略)

常見應用的 logrotate 配置

/var/log/nginx/*.log {   # 可以指定多個路徑
    daily                      # 日志輪詢周期,weekly,monthly,yearly
    rotate 30                  # 保存30天數(shù)據(jù),超過的則刪除
    size 100M                 # 超過100M時分割,單位K,M,G,優(yōu)先級高于daily
    
    compress                   # 切割后壓縮,也可以為nocompress
    delaycompress              # 切割時對上次的日志文件進行壓縮
    
    dateext                    # 日志文件切割時添加日期后綴
    dateformat -%Y-%m-%d
    
    missingok                  # 如果沒有日志文件也不報錯
    notifempty                 # 日志為空時不進行切換,默認為ifempty
    create 640 nginx nginx     # 使用該模式創(chuàng)建日志文件
    
    sharedscripts              # 所有的文件切割之后只執(zhí)行一次下面腳本
    postrotate
        if [ -f /run/nginx.pid ]; then
            kill -USR1 `cat /run/nginx.pid`
        fi
    endscript
}

logrotate 默認運行時間

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

舊版CentOS 的cron 的配置文件是 /etc/crontab ,新版CentOS 改為 /etc/anacrontab 。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論