1. 程式人生 > >logrotate 做日誌收集處理

logrotate 做日誌收集處理

logrotate是一個日誌檔案管理工具。用來把舊檔案輪轉、壓縮、刪除,並且建立新的日誌檔案。

用好logrotate,就不用專門去寫切割日誌的指令碼,去維護一個專門的crontab 了,方便實用。

1.logrotate的目錄結構

主目錄結構:

[[email protected] ~]# ll  /etc/|grep logrotate
-rw-r--r--.  1 root root     662 Aug 29  2007 logrotate.conf
drwxr-xr-x.  2 root root    4096 Sep 20 16:09 logrotate.d
[[email protected]
~]#

子目錄結構:

[[email protected] ~]# ll /etc/logrotate.d/
total 60
-rw-r--r--. 1 root root   71 Aug 17  2013 cups
-rw-r--r--. 1 root root  103 Dec  8  2011 dracut
-rw-r--r--. 1 root root  468 Aug 20 04:23 fail2ban
-rw-r--r--. 1 root root  307 Jul 10  2013 haproxy
-rw-r--r--. 1 root root  224 Sep 20 16:08 httpd
-rw-r--r--. 1 root root  871 Feb 13  2014 mysqld
-rw-r-----. 1 root named 170 Jan 21  2014 named
-rw-r--r--. 1 root root  256 Jun 10 05:08 puppet
-rw-r--r--. 1 root root  159 Mar 22  2013 puppet-dashboard
-rw-r--r--. 1 root root  131 Apr  1  2012 redis
-rwxr-xr-x. 1 root root  452 Jul 11 06:57 salt
-rw-r--r--. 1 root root   98 Apr 23  2007 supervisor
-rw-r--r--. 1 root root  210 Aug  3  2011 syslog
-rw-r--r--. 1 root root  100 Dec  9  2011 yum
-rw-r--r--. 1 root root  107 Jun 21 00:23 zabbix-server

logrotate.conf  通用的配置

1.rotate log files的時間間隔

2.backlogs 的儲存時間

3.是否壓縮檔案等

等等

具體如下:

[[email protected] ~]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

其中有一個配置項是:include /etc/logrotate.d 這裡面引入了一些常用自定義的子配置檔案,子配置檔案可以重寫主配置檔案的某些配置項。

子配置:

看一個Apache http例子預設的配置:

[[email protected] ~]# cat  /etc/logrotate.d/httpd 
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

Apache的日誌結構

[[email protected] httpd]# ll
total 756
-rw-r--r--. 1 root root      0 Sep 14 03:09 access_log
-rw-r--r--. 1 root root   9220 Jun 16 15:00 access_log.1
-rw-r--r--. 1 root root    286 Aug 31 03:18 access_log-20140829.gz
-rw-r--r--. 1 root root    532 Sep 10 04:38 access_log-20140831.gz
-rw-r--r--. 1 root root   2300 Sep 14 03:09 access_log-20140910.gz
-rw-r--r--. 1 root root 527385 Sep 12 13:38 access_log-20140914
-rw-r--r--. 1 root root  27361 Sep 14 21:20 error_log
-rw-r--r--. 1 root root    452 Jun 16 15:01 error_log.1
-rw-r--r--. 1 root root    237 Aug 31 03:18 error_log-20140824.gz
-rw-r--r--. 1 root root  71168 Sep  7 03:38 error_log-20140831.gz
-rw-r--r--. 1 root root    239 Sep 14 03:09 error_log-20140907.gz
-rw-r--r--. 1 root root  61331 Sep 14 03:09 error_log-20140914
-rw-r--r--. 1 root root    285 Jun 16 15:01 error_log.2.gz
-rw-r--r--. 1 root root      0 Jul 17 10:53 ssl_access_log
-rw-r--r--. 1 root root  10989 Sep 14 21:20 ssl_error_log
-rw-r--r--. 1 root root    118 Aug 31 03:18 ssl_error_log-20140824.gz
-rw-r--r--. 1 root root    135 Sep  7 03:38 ssl_error_log-20140831.gz
-rw-r--r--. 1 root root    118 Sep 14 03:09 ssl_error_log-20140907.gz
-rw-r--r--. 1 root root   1776 Sep 12 12:34 ssl_error_log-20140914
-rw-r--r--. 1 root root      0 Jul 17 10:53 ssl_request_log

修改下預設的配置:

[[email protected] ~]# cat /etc/logrotate.d/httpd 
/var/log/httpd/*log {
    rotate 2 
    missingok
    notifempty
    compress
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null && touch /tmp/hello
    endscript
}
[[email protected] ~]#

然後手動執行下 logrotate

[[email protected] httpd]# logrotate -f  /etc/logrotate.conf 
[[email protected] httpd]# ll
total 576
-rw-r--r--. 1 root root      0 Sep 14 03:09 access_log
-rw-r--r--. 1 root root   9220 Jun 16 15:00 access_log.1
-rw-r--r--. 1 root root    286 Aug 31 03:18 access_log-20140829.gz
-rw-r--r--. 1 root root    532 Sep 10 04:38 access_log-20140831.gz
-rw-r--r--. 1 root root   2300 Sep 14 03:09 access_log-20140910.gz
-rw-r--r--. 1 root root 527385 Sep 12 13:38 access_log-20140914
-rw-r--r--. 1 root root    290 Sep 20 16:09 error_log
-rw-r--r--. 1 root root    452 Jun 16 15:01 error_log.1
-rw-r--r--. 1 root root   2582 Sep 20 16:09 error_log-20140914.gz
-rw-r--r--. 1 root root   1736 Sep 20 16:14 error_log-20140920.gz
-rw-r--r--. 1 root root    285 Jun 16 15:01 error_log.2.gz
-rw-r--r--. 1 root root      0 Jul 17 10:53 ssl_access_log
-rw-r--r--. 1 root root    111 Sep 20 16:09 ssl_error_log
-rw-r--r--. 1 root root    197 Sep 20 16:09 ssl_error_log-20140914.gz
-rw-r--r--. 1 root root    433 Sep 20 16:14 ssl_error_log-20140920.gz
-rw-r--r--. 1 root root      0 Jul 17 10:53 ssl_request_log

之前的rotate引數是4 預設儲存4份,且是weekly,子配置項是compresss,所以有.gz的間隔是7天,然後我在子配置檔案,重寫了rotate 引數,變成了2個,手動執行之後,多餘的被刪除了。如果你足夠細心的話,你會發現acess_log 沒有變化,因為在http配置項中有一個notifyempty
notifempty
              Do not rotate the log if it is empty (this overrides the ifempty option).
訪問下website 然後重新執行下:
[[email protected] httpd]# logrotate -f  /etc/logrotate.conf 
[[email protected] httpd]# ll
total 68
-rw-r--r--. 1 root root   816 Sep 20 16:15 access_log
-rw-r--r--. 1 root root  9220 Jun 16 15:00 access_log.1
-rw-r--r--. 1 root root  2300 Sep 14 03:09 access_log-20140910.gz
-rw-r--r--. 1 root root 13015 Sep 20 16:15 access_log-20140914.gz
-rw-r--r--. 1 root root   516 Sep 20 16:15 error_log
-rw-r--r--. 1 root root   452 Jun 16 15:01 error_log.1
-rw-r--r--. 1 root root  2582 Sep 20 16:09 error_log-20140914.gz
-rw-r--r--. 1 root root  1736 Sep 20 16:14 error_log-20140920.gz
-rw-r--r--. 1 root root   285 Jun 16 15:01 error_log.2.gz
-rw-r--r--. 1 root root     0 Jul 17 10:53 ssl_access_log
-rw-r--r--. 1 root root   111 Sep 20 16:09 ssl_error_log
-rw-r--r--. 1 root root   197 Sep 20 16:09 ssl_error_log-20140914.gz
-rw-r--r--. 1 root root   433 Sep 20 16:14 ssl_error_log-20140920.gz
-rw-r--r--. 1 root root     0 Jul 17 10:53 ssl_request_log
[[email protected] httpd]# 

一些常用的配置說明:

compress通過gzip 壓縮轉儲以後的日誌
nocompress不需要壓縮時,用這個引數
copytruncate 用於還在開啟中的日誌檔案,把當前日誌備份並截斷
nocopytruncate 備份日誌檔案但是不截斷
create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日誌檔案
nocreate 不建立新的日誌檔案
delaycompress 和 compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。
errors address 專儲時的錯誤資訊傳送到指定的Email 地址
ifempty 即使是空檔案也轉儲,這個是 logrotate 的預設選項。
notifempty 如果是空檔案的話,不轉儲
mail address 把轉儲的日誌檔案傳送到指定的E-mail 地址
nomail 轉儲時不傳送日誌檔案
olddir directory 轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統
noolddir 轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲週期為每天
weekly 指定轉儲週期為每週
monthly 指定轉儲週期為每月
rotate count 指定日誌檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
tabootext [+] list 讓logrotate 不轉儲指定副檔名的檔案,預設的副檔名是:.rpm-orig, .rpmsave, v, 和 ~
size size 當日志文件到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及KB (sizek)或者MB (sizem).

如何設定logrotate的間隔

應該很容易理解

[[email protected] httpd]# ll /etc/|grep  cron
-rw-r--r--.  1 root root     541 Jul 19  2011 anacrontab
drwxr-xr-x.  2 root root    4096 Sep 18 10:36 cron.d
drwxr-xr-x.  2 root root    4096 Sep 20 15:57 cron.daily
-rw-r--r--.  1 root root       0 Jul 19  2011 cron.deny
drwxr-xr-x.  2 root root    4096 Sep 20 15:57 cron.hourly
drwxr-xr-x.  2 root root    4096 Sep 27  2011 cron.monthly
-rw-r--r--.  1 root root     457 Sep 27  2011 crontab
drwxr-xr-x.  2 root root    4096 Sep 27  2011 cron.weekly

解釋一個特殊的東西
[[email protected] httpd]# sudo su xluren
cd[[email protected] httpd]$ cd ~
[[email protected] ~]$ crontab 
You (xluren) are not allowed to use this program (crontab)
See crontab(1) for more information
[[email protected] ~]$ crontab -e
You (xluren) are not allowed to use this program (crontab)
See crontab(1) for more information
[[email protected] ~]$ exit
exit
[[email protected] httpd]# cat /etc/cron.
cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ cron.weekly/  
[[email protected] httpd]# cat /etc/cron.deny 
xluren
[[email protected] httpd]# 
文件http://linuxcommand.org/man_pages/logrotate8.html

相關推薦

logrotate 日誌收集處理

logrotate是一個日誌檔案管理工具。用來把舊檔案輪轉、壓縮、刪除,並且建立新的日誌檔案。 用好logrotate,就不用專門去寫切割日誌的指令碼,去維護一個專門的crontab 了,方便實用。 1.logrotate的目錄結構 主目錄結構: [[email 

使用elasticsearch和filebeat日誌收集

hosts 處理 如何 emp 51cto -h host beat 日誌收集 在存儲數據之前,elasticsearch可以使用Ingest Node對數據做預處理。https://www.elastic.co/guide/en/beats/filebeat/curren

微服務下,使用ELK日誌收集及分析

一、使用背景   目前專案中,採用的是微服務框架,對於日誌,採用的是logback的配置,每個微服務的日誌,都是通過File的方式儲存在部署的機器上,但是由於日誌比較分散,想要檢查各個微服務是否有報錯資訊,需要挨個服務去排查,比較麻煩。所以希望通過對日誌進行聚合,然後通過監控,能夠快速的找到各個微服務的報錯資

老生常談SpringAop日誌收集處理的工具包

#### AopLog是基於Spring Aop 和ThreadLocal實現的一個專門對請求方法內容日誌的攔截與處理的日誌工具包。 ![](https://img.shields.io/static/v1?label=release&message=2.1&color=green)![](

ELK+syslog+nginx訪問日誌收集+分詞處理

elk nginx syslog mapping 一、nginx訪問日誌配置:1、日誌格式配置:log_format json ‘{"@timestamp":"$time_iso8601",‘ ‘"host":"$server_addr",‘

ELK nginx系統日誌收集+微服務日誌集中處理實戰

ELK 系統 ELK Elastic stack is a popular open-source solution for analyzing weblogs,ELK stack will reside on a server separate from y

filebeat + ELK 日誌分析 配置 logstash 正則匹配處理message 時間的讀取 時區處理 反斜槓 ip 處理

利用 Filebeat 去讀取日誌傳送到 Logstash ,再由 Logstash 對日誌分析處理,提取我們需要的項後傳送給 Elasticsearch 儲存起來, 然後利用 Kibana 去分析獲得

elk通過kafka收集處理Tomcat日誌

環境說明 server 安裝軟體 10.16.0.15 elasticsearch+logstash+kibana+kafka 10.16.0.14 tomcat+logstash+mysql

filebeat和logstash收集處理java多行日誌

2017-11-15 08:04:23:889 ERROR com.weconex.pay.callback.gateway.service.mq.receive.MerchantCallbackReceiver 173 send - 商戶回撥閘道器-- 傳送HTTP異常!引數:requestNo=1012

日誌收集處理

日誌的出現是為了彌補使用System.out.println()進行除錯的不足. 因為列印語句需要我們一條一條手動控制. 日誌的管理分為兩大部分: 日誌記錄器 日誌處理器 日誌記錄器負責按設定級別對日誌進行記錄和向上傳遞, 日誌處理器負責按設定級別對日

linux日誌分割處理工具logrotate

logrotate 程式是一個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做“轉儲”。我們可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。 logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定

Linux 之rsyslog+LogAnalyzer 日誌收集系統

windows 服務器 應用程序 數據庫 規劃圖 一、LogAnalyzer介紹  LogAnalyzer工具提供了一個易於使用,功能強大的前端,用於搜索,查看和分析網絡活動數據,包括系統日誌,事件日誌和其他許多日誌源。由於它只是將數據展示到我們用戶的面前,所以數據本身需要由另一個程序收集

logrotate切割日誌後,新的日誌還是寫入到老的日誌文件中

logrotate線上生產環境中,安裝了dnsmasq,並記錄日誌。由於每一次dns查詢都會生產日誌,考慮到日誌量越來越大,就用logrotate做日誌輪轉。配置如下:/var/log/dnsmasq/dnsmasq.log { daily //按天輪轉日誌 rotat

Laravel之加密解密/日誌/異常處理及自定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

簡單記錄一次REDO文件損壞報錯 ORA-00333重日誌讀取塊出錯

clas 後者 利用 實例恢復 poi cancel true cover html 一.故障描寫敘述 首先是實例恢復須要用到的REDO文件損壞 二、解決方法 1.對於非當前REDO或者當前REDO可是無活動事務使用下面CLEAR命令: 用CLEAR命令重建該日誌

通過 rsync 日誌log備份

rsync 日誌備份 log rsyslog1、拓撲如下:2、通過rsync日誌備份1>ssh 免密鑰登陸確定發起方,從log-back-server_10.1.1.1 為中心發起方。因此,要實現從log-server到各主機之前的 免密登陸。在log-server 主機上,cd ~ &&a

我感覺prometheus這種日誌收集模式不錯

ima 報警 tin bsp intro 思想 tar 分享 安裝 思想可以,可推可拉,可自己寫接入點。。。還有報警。。。 按官方文檔試一下安裝 https://prometheus.io/docs/introduction/getting_started/

Oracle Logminer 分析重日誌RedoLog和歸檔日誌ArchiveLog

cti data 格式 保存 命令 重啟 msl dba object 在實際開發過程中,有時我們很有可能需要某個表的操作痕跡,或通過記錄的SQL語句進行有目的性的數據恢復(此時POINT-IN-TIME恢復已經滿足不了更細的粒度)、或僅僅是查看;

日誌異常處理-spring aop註解

get target public ring -s row imp for method spring aop 可以在不破壞我們程序代碼的前提下很好的對程序異常進行打印,網上也有很多這樣的例子,我這裏寫的比較簡單,只是針對程序出異常時進行見到的日誌打印,代碼比較簡單。

Flume日誌收集系統架構詳解--轉

with 指定 mwl 裏程碑 工程 生命 數據接收 dba -i 2017-09-06 朱潔 大數據和雲計算技術 任何一個生產系統在運行過程中都會產生大量的日誌,日誌往往隱藏了很多有價值的信息。在沒有分析方法之前,這些日誌存儲一段時間後就會被清理。隨著技術的發展和