HaProxy日志分割

文章首发站点:OpensGalaxy.com

默认情况下,Haproxy日志文件不会按天或按大小的分割日志,会将所有日志输出到一个haproxy.log文件中,这样随着时间的推移,这个文件会越来越大,非常不利于日志的管理和归档,本文将介绍通过logrotate工具对haproxy日志进行分割。

1、安装

如果没有安装logrotate、crontab的请先安装,大部分情况下默认系统已经安装了。
在Debian或Ubuntu上:

apt-get install logrotate cron 

在Fedora,CentOS或RHEL上:

yum install logrotate crontabs 

2、配置

添加一个配置文件 haproxy

vim /etc/logrotate.d/haproxy

/var/log/haproxy.log
{
    daily ## 按天分割
    compress ##亚索
    rotate 180  ##  保留180天
    dateext
    sharedscripts
    postrotate  ##执行的命令,重新加载haproxy 和rsyslog服务,生成新的haproxy.log,完成日志切换
        /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -p /usr/local/haproxy/haproxy.pid -sf $(cat /usr/local/haproxy/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。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。

[root@HAProxy01 log]# logrotate -d /etc/logrotate.d/haproxy
reading config file /etc/logrotate.d/haproxy
reading config info for /var/log/haproxy.log


Handling 1 logs

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

实际生产环境效果如下:

-rw-------. 1 root   root    68902772  8月 30 10:47 haproxy.log
-rw-------. 1 root   root   892607319  8月 16 03:27 haproxy.log-20160816.gz
-rw-------. 1 root   root    27004185  8月 17 03:15 haproxy.log-20160817.gz
-rw-------. 1 root   root    24386774  8月 18 03:22 haproxy.log-20160818.gz
-rw-------. 1 root   root    26812065  8月 19 03:42 haproxy.log-20160819.gz
-rw-------. 1 root   root    26750142  8月 20 03:45 haproxy.log-20160820.gz
-rw-------. 1 root   root    19538640  8月 21 03:30 haproxy.log-20160821.gz
-rw-------. 1 root   root    18614182  8月 22 03:34 haproxy.log-20160822.gz
-rw-------. 1 root   root    29703139  8月 23 03:35 haproxy.log-20160823.gz
-rw-------. 1 root   root    29240621  8月 24 03:41 haproxy.log-20160824.gz
-rw-------. 1 root   root    29211920  8月 25 03:23 haproxy.log-20160825.gz
-rw-------. 1 root   root    28427608  8月 26 03:22 haproxy.log-20160826.gz
-rw-------. 1 root   root    25666606  8月 27 03:43 haproxy.log-20160827.gz
-rw-------. 1 root   root    20015771  8月 28 03:48 haproxy.log-20160828.gz
-rw-------. 1 root   root    19563174  8月 29 04:07 haproxy.log-20160829.gz
-rw-------. 1 root   root    30653710  8月 30 03:11 haproxy.log-20160830.gz

配置非常的简单,但这么做有一个弊端,就是在分割日志时需要重载haproxy这样会造成丢流量,这对于高流量、高可靠的系统来说是不允许的,所以可以根据需求选择业务低峰的时间段来执行分割日志,也可以根据下边这篇文章来配置《真正零停机 HAProxy 重载》http://www.open-open.com/lib/view/open1430094706677.html

发表评论