切割haproxy的日志


日志的切割有以下幾種方法:

1.寫個定時任務,每天某個時間點把舊的日志重命名,並對服務重啟使其重新打開日志並寫入。

2.通過管道的方式把新產生的日志寫到另外一個日志文件里。

3.通過logrotate來切割日志,logrotate是系統自帶的服務,可以切割任何日志,不僅僅是nginx。

因為我這里的haproxy是yum 安裝的。所以logrotate目錄下本身就有haproxy的日志切割,這時我們只要改一些haproxy.log的路徑就行了

/data/logs/haproxy/haproxy.log {
    daily
    rotate 10
    missingok
    notifempty
    dateext
    compress
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
	service haproxy restart
    endscript
}

 我們可以在測試環境下試一下

logrotate -f /etc/logrotate.d/haproxy

我發現我這里是成功的

默認情況下,Haproxy日志文件不會按天或按大小的分割日志,會將所有日志輸出到一個haproxy.log文件中,這樣隨着時間的推移,這個文件會越來越大,非常不利於日志的管理和歸檔,本文將介紹通過logrotate工具對haproxy日志進行分割。

 

 

/etc/haproxy/haproxy.log {
    daily
    rotate 200
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid);service rsyslog reload
    endscript
}
  • 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 進程將立即再次讀取其配置並繼續運行。

注意:如果沒有啟動 crontab 需要啟動一下,這樣任務計划才會執行。

service crond start  

3、驗證

手動運行logrotate

logrotate可以在任何時候從命令行手動調用,要調用為/etc/lograte.d/下配置的所有日志調用logrotate:

logrotate /etc/logrotate.conf 

排障過程中的最佳選擇是使用‘-d’選項以預演方式運行logrotate。要進行驗證,不用實際輪循任何日志文件,可以模擬演練日志輪循並顯示其輸出。

logrotate -d /etc/logrotate.d/haproxy

[root@LB1_Redis1-live ~]# man logrotate
[root@LB1_Redis1-live ~]# logrotate -d /etc/logrotate.d/haproxy 
reading config file /etc/logrotate.d/haproxy
reading config info for /etc/haproxy/haproxy.log 

Handling 1 logs

rotating pattern: /etc/haproxy/haproxy.log  after 1 days (15 rotations)
empty log files are not rotated, old logs are removed
considering log /etc/haproxy/haproxy.log
  log does not need rotating
not running postrotate script, since no logs were rotated

 

 

配置非常的簡單,但這么做有一個弊端,就是在分割日志時需要重載haproxy這樣會造成丟流量,這對於高流量、高可靠的系統來說是不允許的,所以可以根據需求選擇業務低峰的時間段來執行分割日志,也可以根據下邊這篇文章來配置《真正零停機 HAProxy 重載》http://www.open-open.com/lib/view/open1430094706677.html

這里我們根據業務的低峰期來重啟haproxy

我看了一下,我這里也的低峰期是凌晨5點

所以,我這里配置一個定時任務

[root@LB1_Redis1-live ~]# crontab -l
*/30 * * * * /usr/sbin/ntpdate cn.pool.ntp.org >/dev/null 2>&1
0 5 * * * /usr/sbin/logrotate -f /etc/logrotate.d/haproxy

 

文章摘自:

http://www.tuicool.com/articles/yym6nub

http://opensgalaxy.com/2016/08/30/haproxy%E6%97%A5%E5%BF%97%E5%88%86%E5%89%B2/

http://hao360.blog.51cto.com/5820068/1342986/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM