1. 程式人生 > 實用技巧 >es 的叢集介紹以及叢集優化

es 的叢集介紹以及叢集優化

日誌切割之Logrotate

posted @2018-05-18 09:54慘綠少年 閱讀(39425) 評論(3)編輯收藏 分類:其他,日常,運維基本功 undefined

1、關於日誌切割

  日誌檔案包含了關於系統中發生的事件的有用資訊,在排障過程中或者系統性能分析時經常被用到。對於忙碌的伺服器,日誌檔案大小會增長極快,伺服器會很快消耗磁碟空間,這成了個問題。除此之外,處理一個單個的龐大日誌檔案也常常是件十分棘手的事。
  logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌檔案。例如,你可以設定logrotate,讓/var/log/foo日誌檔案每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為干預。

2、安裝logrotate

系統版本說明

[root@clsn6 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@clsn6 ~]# uname -r 
2.6.32-696.el6.x86_64

  預設centos系統安裝自帶logrotate,安裝方法如下

yum -y install logrotate crontabs 

軟體包資訊說明

[root@clsn6 ~]# rpm -ql  logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf  # 主配置檔案
/etc/logrotate.d   # 配置目錄

  logrotate的配置檔案是/etc/logrotate.conf,通常不需要對它進行修改。日誌檔案的輪循設定在獨立的配置檔案中,它(們)放在/etc/logrotate.d/目錄下。

3、實踐配置logrotate

3.1 測試logrotate如何管理日誌

  這裡我們將建立一個10MB的日誌檔案/var/log/log-file。我們將展示怎樣使用logrotate來管理該日誌檔案。

我們從建立一個日誌檔案開始吧,然後在其中填入一個10MB的隨機位元流資料檔案。

[root@clsn6 ~]# touch /var/log/log-file
[root@clsn6 ~]# head -c 10M < /dev/urandom > /var/log/log-file 

  由於現在日誌檔案已經準備好,我們將配置logrotate來輪循該日誌檔案。讓我們為該檔案建立一個配置檔案。

[root@clsn6 ~]# vim /etc/logrotate.d/log-file 
/var/log/log-file {
    monthly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}
  上面的模板是通用的,而配置引數則根據你的需求進行調整,不是所有的引數都是必要的。也可以通過man手冊中的例子進行配置。

3.2配置檔案說明

配置引數

說明

monthly

日誌檔案將按月輪循。其它可用值為'daily','weekly'或者'yearly'。

rotate 5

一次將儲存5個歸檔日誌。對於第六個歸檔,時間最久的歸檔將被刪除。

compress

在輪循任務完成後,已輪循的歸檔將使用gzip進行壓縮。

delaycompress

總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循週期進行。這在你或任何軟體仍然需要讀取最新歸檔時很有用。

missingok

在日誌輪循期間,任何錯誤將被忽略,例如“檔案無法找到”之類的錯誤。

notifempty

如果日誌檔案為空,輪循不會進行。

create 644 root root

以指定的許可權建立全新的日誌檔案,同時logrotate也會重新命名原始日誌檔案。

postrotate/endscript

在所有其它指令完成後,postrotate和endscript裡面指定的命令將被執行。在這種情況下,rsyslogd程序將立即再次讀取其配置並繼續執行。

以上資訊來源"man logrotate"

3.3手動執行logrotate

  logrotate可以在任何時候從命令列手動呼叫。要呼叫為/etc/lograte.d/下配置的所有日誌呼叫logrotate:

[root@clsn6 ~]# logrotate /etc/logrotate.conf

要為某個特定的配置呼叫logrotate,執行一次切割任務測試

[root@clsn6 ~]# ll /var/log/log-file 
-rw-r--r-- 1 root root 10485760 Feb  7 18:50 /var/log/log-file
[root@clsn6 ~]# logrotate -vf /etc/logrotate.d/log-file 
[root@clsn6 ~]# ll /var/log/log-file* 
-rw-r--r-- 1 root root        0 Feb  7 19:17 /var/log/log-file
-rw-r--r-- 1 root root 10485760 Feb  7 18:50 /var/log/log-file.1

  即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項來強制logrotate輪循日誌檔案,‘-v’引數提供了詳細的輸出。

3.4Logrotate的記錄日誌

  logrotate自身的日誌通常存放於/var/lib/logrotate/status目錄。如果處於排障目的,我們想要logrotate記錄到任何指定的檔案,我們可以指定像下面這樣從命令列指定。

[root@clsn6 ~]# logrotate -vf -s /var/log/logrotate-status /etc/logrotate.d/log-file
reading config file /etc/logrotate.d/log-file
reading config info for /var/log/log-file 

Handling 1 logs

rotating pattern: /var/log/log-file  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/log-file
  log does not need rotating
not running postrotate script, since no logs were rotated

3.5 Logrotate定時任務

  logrotate需要的cron任務應該在安裝時就自動建立了,我把cron檔案的內容貼出來,以供大家參考。

[root@clsn6 ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

4、logrotate生產應用

4.1為nginx設定日誌切割

  防止訪問日誌檔案過大

[root@clsn nginx]# cat /etc/logrotate.d/nginx 
/var/log/nginx/*.log {
    daily
    rotate 5
    missingok
    notifempty
    create 644 www www
    postrotate
      if [ -f /application/nginx/logs/nginx.pid ]; then
          kill -USR1 `cat /application/nginx/logs/nginx.pid`
      fi
endscript
}

  logrotate工具對於防止因龐大的日誌檔案而耗盡儲存空間是十分有用的。配置完畢後,程序是全自動的,可以長時間在不需要人為干預下執行。本教程重點關注幾個使用logrotate的幾個基本樣例,你也可以定製它以滿足你的需求。

  對於其他服務日誌切割後續補充

5、附錄

5.1關於USR1訊號解釋

  摘自: http://www.xuebuyuan.com/323422.html

USR1亦通常被用來告知應用程式過載配置檔案;例如,向Apache HTTP伺服器傳送一個USR1訊號將導致以下步驟的發生:停止接受新的連線,等待當前連線停止,重新載入配置檔案,重新開啟日誌檔案,重啟伺服器,從而實現相對平滑的不關機的更改。內容摘自wiki:http://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2  

  對於USR1和2都可以使用者自定義的,在POSIX相容的平臺上,SIGUSR1和SIGUSR2是傳送給一個程序的訊號,它表示了使用者定義的情況。它們的符號常量在標頭檔案signal.h中定義。在不同的平臺上,訊號的編號可能發生變化,因此需要使用符號名稱。

kill -HUP pid 或者 killall -HUP pName:

  其中pid是程序標識,pName是程序的名稱。
  如果想要更改配置而不需停止並重新啟動服務,可以使用上面兩個命令。在對配置檔案作必要的更改後,發出該命令以動態更新服務配置。根據約定,當你傳送一個掛起訊號(訊號1或HUP)時,大多數伺服器程序(所有常用的程序)都會進行復位操作並重新載入它們的配置檔案。

5.2常見配置引數小結

配置引數

說明

compress

通過gzip壓縮轉儲以後的日誌

nocompress

不壓縮

copytruncate

用於還在開啟中的日誌檔案,把當前日誌備份並截斷

nocopytruncate

備份日誌檔案但是不截斷

createmode owner group

轉儲檔案,使用指定的檔案模式建立新的日誌檔案

nocreate

不建立新的日誌檔案

delaycompress

和compress一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮

nodelaycompress

覆蓋delaycompress選項,轉儲同時壓縮。

errors address

專儲時的錯誤資訊傳送到指定的Email地址

ifempty

即使是空檔案也轉儲,這個是logrotate的預設選項。

notifempty

如果是空檔案的話,不轉儲

mailaddress

把轉儲的日誌檔案傳送到指定的E-mail地址

nomail

轉儲時不傳送日誌檔案

olddirdirectory

轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統

noolddir

轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下

prerotate/endscript

在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行

daily

指定轉儲週期為每天

weekly

指定轉儲週期為每週

monthly

指定轉儲週期為每月

rotate count

指定日誌檔案刪除之前轉儲的次數,0指沒有備份,5指保留5個備份

tabooext [+] list

讓logrotate不轉儲指定副檔名的檔案,預設的副檔名是:.rpm-orig, .rpmsave, v,和~

size size

當日志文件到達指定的大小時才轉儲,bytes(預設)及KB(sizek)或MB(sizem)

missingok

在日誌輪循期間,任何錯誤將被忽略,例如“檔案無法找到”之類的錯誤。

6、參考文獻

[1]https://linux.cn/article-4126-1.html
[2]http://xmodulo.com/2014/09/logrotate-manage-log-files-linux.html
[3]http://blog.csdn.net/fuming0210sc/article/details/50906372
[4]http://blog.csdn.net/forthemyth/article/details/44062529