linux切割日志命令,linux日志切割脚本

Linux系统日志切割-Logrotate

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

公司主营业务:网站设计制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出南票免费做网站回馈大家。

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

在Debian或Ubuntu上:

在Fedora,CentOS或RHEL上:

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

参数详解:

上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

logrotate可以在任何时候从命令行手动调用。要调用为/etc/lograte.d/下配置的所有日志调用logrotate:

要为某个特定的配置调用logrotate,执行一次切割任务测试

即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。

防止访问日志文件过大

logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。

Linux下使用cronolog切割服务器日志文件的方法

Linux下运行的Web服务器Apache,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。

cronolog安装配置非常简单,下载后只需要输入几个命令即可完成。

1、下载(最新版本)

# wget

2、解压缩

# tar zxvf cronolog-1.6.2.tar.gz

3、进入cronolog安装文件所在目录

# cd cronolog-1.6.2

4、运行安装

# ./configure

# make

# make install

5、查看cronolog安装后所在目录(验证安装是否成功)

# which cronolog

一般情况下显示为:/usr/local/sbin/cronolog

整个安装过程结束,下面需要把日志的格式配置一下:

1、虚拟主机配置文件 httpd-vhosts.conf

将Web日志设置 CustomLog 修改为以下格式

CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined

当然,错误日志设置 ErrorLog 也可以利用 cronolog 分割,设置为

ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"

2、如果服务器上只有一个站点(当然这种情况比较少),直接按上面所说格式修改 httpd.conf 文件日志设置部分。

说明:

绿色部分 为 cronolog 安装后所在位置,系统版本不同可能位置不完全一样,以 which 命令查看到的位置为准;

蓝色部分 为设置的日志文件所在位置,根据需要修改;

红色部分 为设置的日志文件标识性字符,根据需要修改;

%Y%m%d 为日志文件分割方式,例子中为“年月日”,也可以修改成自己需要的。

修改httpd.conf文件:

这个文件在我的电脑上是在 /etc/httpd/conf/httpd.conf 不同的服务器 应该是不一样的

在最后加上

# ServerAdmin webmaster@dummy-host.example.com

# DocumentRoot /www/docs/dummy-host.example.com

# ServerName dummy-host.example.com

ErrorLog /data/logs/apache/webapps.wps.cn-error_log

CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%d/access_log.%H" combined

#这个保证了每天一个文件夹 文件夹下 每个小时产生一个log

#CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%%Hdaccess_log" combined

进入到 /etc/init.d/httpd configtest 这样验证你的配置文件是否正确

进入到 /etc/init.d/httpd restart 重启apache 服务器(不同的'系统应该是不一样 要自己找到)

用于Tomcat

第一步

if [ -z "$CATALINA_OUT" ] ; then

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

fi

修改为

if [ -z "$CATALINA_OUT" ] ; then

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d

fi

第二步

touch "$CATALINA_OUT"

改为

#touch "$CATALINA_OUT"

第三步

org.apache.catalina.startup.Bootstrap "$@" start

"$CATALINA_OUT" 21

修改为

org.apache.catalina.startup.Bootstrap "$@" start 21

| /usr/local/sbin/cronolog "$CATALINA_OUT" /dev/null

重新启动 Tomcat

service tomcat restart

可以在 Tomcat 的 logs 目录底下找到以系统日期为结尾的 catalina.out.yyyy-mm-dd 的档案,这样子就成功了。

后续就是持续观察看看是不是每天都有产生一个新的 catalina.out.yyyy-mm-dd 档案。然后再安排定期删除这些较旧的 log 档即可。

Linux日志管理神器之Logrotate日志分割,以及crontab定时轮询

有些服务,会自动产生大量的日志文件,如果不限制,会占用磁盘空间。

如果单纯的用定时任务crontab删除,又不太灵活,这时需要日志神器logrotate。

logrotate工具是系统自带为了方便进行日志管理而产生的一个工具。

系统会定时运行 logrotate,一般是每天一次。也是基于定时任务crontab运行的。

配置文件:

主配置文件的位置在 /etc/logrotate.conf,一般配置在 /etc/logrotate.d/子目录下。

如系统默认日志配置:

配置文件参数:

更多信息请参考man logrotate帮助文档

模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

在上面的配置文件中,我们只想要轮询一个日志文件,size=50M 指定日志文件大小可以增长到 50MB,dateext 指 示让旧日志文件以创建日期命名。

可自行参考/etc/logrotate.d/目录下系统默认的文件。

logrotate命令:

具体 logrotate 命令格式如下:

要为某个特定的配置调用 logrotate:

排障过程中的最佳选择是使用-d选项以预演方式运行 logrotate。要进行验证,不用实际轮循任何日志文件, 可以模拟演练日志轮循并显示其输出。

正如我们从上面的输出结果可以看到的,logrotate 判断该轮循是不必要的。如果文件的时间小于一天,就会发生了。

强制轮循即使轮循条件没有满足,我们也可以通过使用-f选项来强制 logrotate 轮循日志文件,-v参数提供了详细的输出。

个人项目配置:

项目每天可产生20G左右的日志,显示不能做每日轮询,所以额外需要添加定时任务做每小时,或者每隔多少分钟。

如果轮询日志异常报错如下:

error: skipping “” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.”

需要加 su root root 选项。

同时添加定时任务:

定时任务说明:

第一条,每隔40分钟轮询执行一次logrotate任务。

第二条,每天凌晨4点删除前一天的日志,原因如下:

由于项目系统产生日志格式的原因,会导致以下情况:

如果昨天的分割到4个后(或者1,2,3),时间到第二天后,没法转储递增,会一直停留在4,没法删除,每天会有,久而久之,也会占用磁盘空间。所以需要定时删除。

设置完成

开启定时任务日志,以便查看定时任务是否执行。后续可取消。

重启rsyslog

linux 按天压缩并切割日志

1、linux 自带的 logrotate 命令

2、定义切割文件相关信息

/var/log/nginx/*.log {

daily #按天打包

rotate 180 #保存周期为180以内的,超过180天的则删除

missingok

notifempty

dateext

compress

nodelaycompress

sharedscripts

postrotate

/etc/init.d/nginx reload

endscript

}

3、crontab 设置一个定时任务

59 23 * * * /usr/sbin/logrotate -f /var/logrotate/nginx /tmp/logrotate.log

Linux日志截取利器——sed命令(亲测可用)

在生产环境中,往往没有条件给我们去debug排查,更多时候我们是通过日志来看具体的报错日期。

但是日志往往是一直在实时更新,而且记录条数庞大,很难直接定位到错误信息。这个时候,就可以利用sed命令来截取指定时间段内的日志(也是网上大多数博主的做法)。

具体命令如下:

这条命令可以查询2020.10.13号当天9点到9点十分中间的所有的日志信息。

但是这条命令的使用有两个前提(很多网上的博主都没有提到)

第一,日志输出的日期格式是要满足命令中的格式 ,如果不是的话就跟着实际的格式改

第二,输入的日期必须要真实存在!!! ,比如说9点整刚好没有日志输出,那么这条命令就会失效

更加通配的命令可以是这样, 使用 号*

这样无论九点整的时候是否有日志产生,就都可以获取到9点整到现在的所有日志了

使用 ,将截取到的内容输出到指定的文件中,方便进一步查看

ps:在实际操作中,我们一般会在后面加grep命令做进一步的关键字过滤


当前标题:linux切割日志命令,linux日志切割脚本
新闻来源:http://ybzwz.com/article/hdseij.html