日志的切割有以下幾種方法:
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/
