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日志切割脚本
网页URL:http://myzitong.com/article/hdseij.html