【转】如何利用logrotate工具自动切分滚动中的日志文件

FROM : http://www.2cto.com/os/201503/381812.html

在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或date切割)的日志库,则日志文件会很快增长到G级别。单机操作大文件对后续跟进日志来说非常不方便。

本文介绍如何利用logrotate这个工具来在应用程序外部切分日志。

1. logrotate是什么
logrotate是大多数linux系统自带的日志切割工具,在shell终端输入"man logrotate"可查看其简介(部分摘出如下):
logrotate is designed to ease administration of systems that generate large numbers of log files. It allows automatic rotation, compression, removal, and mailing of log files.Each log file may be handled daily, weekly, monthly, or when it grows too large.
更完整的简介可以在shell终端查看其man文档,这里不赘述。
总之,我们知道它可以用来切割仍在滚动的日志文件即可,这里的“仍在滚动”是指当前日志文件仍在被应用程序持续进行追加写操作。

2. logrotate的适用场景
如果文件是静态的(即当前没有应用程序对齐进行写操作),则split是更常用的静态文件切割工具,其用法简介见这里,此处略过。
logrotate常用来切割仍在被写的“动态”文件,它支持按时间间隔或文件大小来触发文件的自动切分(automatic rotation)。具体用法下面说明。

3. 如何使用logrotate
根据man logrotate的说明,logrotate用法很简单:

?


1

logrotate [-dv] [-f|--force] [-s|--state file] config_file+

其中[]中出现的option(s)均是可选项,我们只需提供一份配置文件即可,下面用示例对配置文件格式做说明。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

# sample logrotate configuration file

compress # 全局配置项,对切分后的文件做gzip压缩

      

# 一个配置文件中可以包含多个相互独立的sections

# 其中,待切分文件路径 + { xxx }构成了一个独立的section,每个section可以配置针对该类文件的切分行为

# 注意:全局配置项会作用于每个section,除非在该section配置中覆盖了全局配置项的行为

 

# 下面section的配置表明按时间间隔(weekly)触发日志的自动切分,历史数据只保存最近的5

# 切分完成后,通过发送-HUP信号来重启syslogd这个daemon进程。

/var/log/messages { 

    rotate 5

    weekly

    postrotate

        /sbin/killall -HUP syslogd

    endscript

}

       

# 下面的示例section表明按文件大小触发日志自动切分,大小单位除了上面所示的k外,还可以是M或G

# 待切分文件路径可以有多个,多个路径用空格隔开

"/var/log/httpd/access.log" /var/log/httpd/error.log {

    rotate 5

    mail www@my.org

    size=100k

    sharedscripts # 表明HUP信号只需在所有文件均切分完成后发送一次,若无该配置,则每完成一个文件的切分就会执行一次postrotate/endscript之间配置的命令

    postrotate

        /sbin/killall -HUP httpd

    endscript

}

       

# 下面的示例section表明按时间(monthly)触发切分

# 切分后的历史文件会被保存到olddir指定的目录下(该目录需要事先mkdir出来,否则会报错)

/var/log/news/news.crit {

    monthly

    rotate 2

    olddir /var/log/news/old

    missingok # 若section起始处指定的待切分文件不存在,也不会报错(默认会报错)

    postrotate

        kill -HUP ‘cat /var/run/inn.pid‘

    endscript

    nocompress # 切分时不做压缩,这里改写了配置文件第1行的全局配置

}

上述配置文件中,"#"表示后面是注释,它可以独占一行,也可以与配置项在同一行。
配置项"rotate 5"表明切分后的历史文件最多保存最近的5份,若触发本次切分时已有5份历史文件(默认为messages.1/messages.2/messages.3/messages.4/messages.5),则文件messages.5会被物理删除,剩余文件后缀序号依次加1。
切分的具体执行过程可以参考《鸟哥的Linux私房菜》在这里的说明。
上面的示例配置文件只是展示了logrotate配置文件的基本格式,该工具还支持其它众多配置项,具体可以参考man logrotate的说明。
下面的配置文件说明了在实际项目中如何按文件大小对不允许restart的应用程序进行日志自动切分。

?


1

2

3

4

5

6

7

8

9

# filename: logrotate.conf

 /home/work/running.log {

    copytruncate # 先copy running.log内容至历史文件,然后清空running.log的内容

    rotate 30    # 保存30份历史日志

    size=1G      # 若日志文件达到1G,则触发切分

    olddir /home/work/history # 指定历史日志存放目录

    notifempty   # 若/home/work/running.log是空文件,则不做切分

    missingok    # 若/home/work/running.log不存在,不报错

}

特别注意copytruncate这个配置项,根据其文档说明(见下面的摘录),它可能会导致部分数据丢失,在不允许日志数据丢失的应用场景下,不应该使用该配置(若日志不允许丢失,则最好在应用程序代码中支持HUP信号来实现优雅重启,这样就可以避免使用copytruncate;当然,也可以用logrotate支持的create配置来达到目的)。
copytruncate
Truncate the original log file in place after creating a copy, instead of moving the old log file and optionally creating a new one, It can be used when some program can not be told to close its logfile and thus might continue writing (appending) to the previous log file forever. Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost. When this option is used, the create option will have no effect, as the old log file stays in place.=

时间: 2024-10-11 10:45:14

【转】如何利用logrotate工具自动切分滚动中的日志文件的相关文章

【Linux笔记】如何利用logrotate工具自动切分滚动中的日志文件

在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或date切割)的日志库,则日志文件会很快增长到G级别.单机操作大文件对后续跟进日志来说非常不方便. 本文介绍如何利用logrotate这个工具来在应用程序外部切分日志. 1. logrotate是什么 logrotate是大多数linux系统自带的日志切割工具,在shell终端输入"man logrotate"可查看其简介(部分摘出如下): logrotate is designed to

Mysql DBA 高级运维学习笔记-Mysql数据库中的日志文件

1.MySQL 引擎概述 1.1 什么是存储引擎 我们在录制一个视频文件的时候,可以转换成不同的格式如mp4,avi,wmv等,而且在电脑的磁盘上也会存在于不同类型的文件系统windows里常见的ntfs,fat32,存在于linux操作系统里常见的ext3,ext4,xfs.但是跟我们呈现的内容都是一样的,直观的区别是占用系统空间的大小与清晰程度不一样.那么数据库存储引擎也有很多种存储方式.无论用什么存储引擎来存储,用户看到的数据都是一样的.不同的引擎存储,引擎功能,占用的空间的大小,读取性能

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件. 千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件.因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪. 为了生成测

D语言中使用日志文件

D语言标准库中已经有比较好的日志文件实现,默认是把日志输出到标准输入输出,如果需要输入到文件,设置如下: stdThreadLocalLog = new FileLogger("log.txt"); 在执行上面语句后, 使用error,log等函数,都会将日志输出到log.txt文件中.

oracle中的日志文件模式

在oracle数据库中有两种日志模式,分别是:非归档日志模式和归档日志模式. 在oracle数据库系统中,为了避免日志文件中的内容在循环使用时被覆盖,oracle系统 将已经写满的日志文件通过文件复制保存到指定的地方,这个过程叫做"归档",复制保存下来 的日志文件叫做"归档日志".在归档日志文件中记录了用户对数据库的所有的修改操作,通过 归档日志文件,数据库管理员可以对数据库进行恢复操作. 日志文件的归档操作主要由后台进程ARCn自动完成.在必要的情况下,数据库管理

[转]如何禁止 IIS 在 C:\Windows\System32\LogFiles\HTTPERR 中生成日志文件

1. 在注册表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 中新建 dword 值:EnableErrorLogging,设置值为 0. 2. 在命令行中分别运行以下命令运行: net stop http net start http iisreset 3. 可改变日志文件的存储位置,同样在 Parameters 中新建字符串值:ErrorLoggingDir,设置值为新的存储路径,同样需要重启 HTT

消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)

第一步:数据源 手写程序实现自动生成如下格式的日志文件: 15837312345,13737312345,2017-01-09 08:09:10,0360 打包放到服务器,使用如下命令执行,模拟持续不断的日志文件: java -cp ct_producter-1.0-SNAPSHOT.jar producter.ProductLog ./awen.tsv 第二步:监听log.tsv日志 使用Flume监控滚动的awen.tsv日志,编写flume # Name the components on

Linux中常见日志文件的介绍

/var / log / cron:记录crond计划任务相关的时间信息: 一.内核及系统日志分析 /var / log / messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动.I/O错误.网络错误.程序故障等.对于未使用独立日志文件的应用程序或服务,一般都可以在该日志文件中获得相关信息. /var /log /dmesg:记录Linux操作系统在引导过程中的各种事件信息: /var / log / maillog:记录进入或发出系统的电子邮件活动: /var / l

利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)-- 解决IIS短文件名漏洞

IIS短文件名漏洞在windows服务器上面非常常见,也就是利用“~”字符猜解暴露短文件/文件夹名,比如,采用这种方式构造URL:http://aaa.com/abc~1/.aspx,根据IIS返回的错误信息,猜测该路径或文件是否存在,具体可参考这篇文章:http://www.freebuf.com/articles/4908.html. 就单纯的解决这个问题来说,微软的URLScan工具是最适合的一个轻量级工具,关键它是免费的,而且安装.配置非常简单.安装过程就不说了,傻瓜式的. 安装完毕之后