nginx之日志切割
方便查看nginx日志, 平常会将nginx日志进行每日切割处理. 这里介绍 平常比较常用的两种方式
1. logrotate
在linux上logrotate是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,它是默认随linux一起被安装的。
如果不存在的话, 可以进行手动安装
yum -y install logrotate
Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,内容如下:
[root@huanqiu_web1 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
1)日志轮询周期有这几种:
daily、weekly、monthly、yearly
默认是daily(即logrotate脚本放到了/etc/cron.daily下),具体执行时间可以查看 /etc/crontab 或者 /etc/anacrontab (CentOS)。
/etc/cron.daily/logrotate
注意点: logrotate是基于crontab运行的, 所以这个时间点是有crontab控制的, 具体可以查询crontab的配置文件/etc/anacrontab. 系统会按照计划的频率运行logrotate,通常是每天
2)手动执行:
如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;
# /usr/sbin/logrotate -f /etc/logrotate.d/nginx
不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要
logrotate [OPTION...] <configfile>
-d, --debug :debug模式,测试配置文件是否有错误,不真实执行。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。
默认日志保存在: cat /var/lib/logrotate/logrotate.status , 如果需要指定其他文件, 可以通过-s/--state参数指定
4)logrotate配置:
默认使用 /etc/logrotate.conf 文件,作为全局配置,而不同应用的具体配置则在 /etc/logrotate.d 目录下,通常以应用程序的名称命名,例如 nginx、mysql、syslog、yum 等配置。
例如:
/var/log/nginx/*.log /var/log/tomcat/*log { # 可以指定多个路径
daily # 日志轮询周期,weekly,monthly,yearly
rotate 30 # 保存30天数据,超过的则删除
size +100M # 超过100M时分割,单位K,M,G,优先级高于daily
compress # 切割后压缩,也可以为nocompress
delaycompress # 切割时对上次的日志文件进行压缩
dateext # 日志文件切割时添加日期后缀
missingok # 如果没有日志文件也不报错
notifempty # 日志为空时不进行切换,默认为ifempty
create 640 nginx nginx # 使用该模式创建日志文件
sharedscripts # 所有的文件切割之后只执行一次下面脚本
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
当配置完成后,可以通过如下方式进行测试。
----- 可直接手动执行
$ logrotate --force /etc/logrotate.d/nginx
----- 显示详细的信息;而且--debug/-d实际上不会操作具体文件(Dry Run)
$ logrotate --debug --verbose --force /etc/logrotate.d/nginx
常见配置参数:
daily :指定转储周期为天天
weekly :指定转储周期为每周
monthly :指定转储周期为每个月
rotate count :指定日志文件删除以前转储的次数,0指没有备份,5 指保留5 个备份
tabooext [+] list:让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,
v, 和 ~
missingok:在日志轮循期间,任何错误将被忽略,例如“文件没法找到”之类的错误。
size size:当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
compress: 经过gzip压缩转储之后的日志
nocompress: 不压缩
copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate: 备份日志文件可是不截断
create mode owner group : 转储文件,使用指定的文件模式建立新的日志文件
nocreate: 不创建新的日志文件
delaycompress: 和 compress 一块儿使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress: 覆盖 delaycompress选项,转储同时压缩。
errors address : 专储时的错误信息发送到指定的Email 地址 ifempty :即便是空文件也转储,这个是logrotate 的缺省选项。
notifempty :若是是空文件的话,不转储
mail address : 把转储的日志文件发送到指定的E-mail地址 nomail : 转储时不发送日志文件
olddir directory:储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir: 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript: 在转储之前须要执行的命令能够放入这个对,这两个关键字必须单独成行
2. 通过shell脚本定时执行切割
#!/bin/bash dat=`date +"%Y%m%d" `
mon=`date +"%Y%m"`
echo $dat nginx_path="/data/log/nginx/"
mondir=$nginx_path$mon /bin/echo $mondir
if [ ! -x "$mondir" ]; then
echo "开始创建日期文件夹"
mkdir "$mondir"
echo "创建日期文件夹结束"
fi
/bin/echo `date +"%Y-%m-%d %H:%M:%S"`
/bin/echo ` ls -al $mondir` # 声明需要分割的日志文件
logs=("access_xxx.com" "nginx_access" "nginx_error")
for log_name in ${logs[@]}
do
echo $log_name
mv $nginx_path$log_name".log" $mondir/$log_name-$dat".log"
done kill -USR1 `cat /var/run/nginx.pid`
/bin/echo "done "
nginx之日志切割的更多相关文章
- nginx 的日志切割
nginx的日志切割脚本 说明:在nginx的配置文件中nginx.conf并没有定义access_log的位置, 在/usr/local/nginx/conf/vhost/下的配置文件中定义了acc ...
- Nginx定时日志切割
Nginx定时日志切割 现有的日志都会存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维 人员查看,所以我们可以通过把这个大的日志文件切割为多份不 ...
- Nginx Java 日志切割脚本
Nginx日志切割脚本: #!/bin/bash ########################################################################### ...
- nginx的日志切割
nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析.以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的.下面来说说nginx日志切割. 如果我们使用的是yu ...
- Nginx log日志切割shell
#!/bin/bash#此脚本用于自动分割Nginx的日志,包括access.log和error.log#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx- ...
- 日志切割之Logrotate
1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...
- Linux日志切割logrotate服务配置
一.logrotate介绍 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.一般centos系统已经自带安装好 ...
- 日志切割logrotate和定时任务crontab详解
1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...
- Logrotate日志切割
日志切割Logrotate 关于日志切割 logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用. 可以节省磁盘空间 ...
- Nginx 访问日志轮询切割
Nginx 访问日志轮询切割脚本 #!/bin/sh Dateformat=`date +%Y%m%d` Basedir="/application/nginx" Nginxlog ...
随机推荐
- HttpContext.SignInAsync 失效(表面解决了问题,未深入到.net core 源码去找问题,记录一下,等有时间翻一下.net core 源码试试能不能找到根本原因)
今天在弄 identityServer4 项目的时候,发现好好的登录竟然没用了. 各种跟踪后发现是 HttpContext.SignInAsync 这个方法不写cookies了 原本经过这个方法后,会 ...
- KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 2024
动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能.然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的.这导致不能探索n>100的设置(比典型 ...
- 单个48TB大小SQL Server数据库备份导致日志文件无法截断
单个48TB大小SQL Server数据库备份导致日志文件无法截断 SQL Server 版本:SQL Server 2019背景在一个48T大小的单数据库环境中,采用简单恢复模式,日志文件大小限制为 ...
- Transforms的使用
Transform的作用 把图片经过Transforms的一些函数之后就会对图片进行一些变化.比如,resize就是改变其大小,totensor就是把图片PIL或者numpy类型转化为Tensor类型 ...
- WPF 实现一个吃豆豆的Loading加载动画
运行的效果如下 先引入一下我们需要的库 在nuget上面搜一下"expression.Drawing",安装一下这个包 我们再创建一个Window,引入一下这个包的命名空间 我们设 ...
- JavaScript – ES6-ES2023 大杂烩
前言 一年半没有写 JS 了, 今天开始来个大复习, 顺便把这么多年零零散散的知识点做成笔记. 练练字. ES 3, 5, 6, 2017, 2018... ES 6 等于 ES2015 ES 7 等 ...
- CSS & JS Effect – Show More
效果 show more 是很常被使用的效果, 因为空间总是不够的丫. 比起 scroll, show more 的体验通常会好一些, 尤其在手机, 它有更好的引导. 实现思路 1. 卡片需要一个 ...
- 使用 Flutter 3.19 更高效地开发
我们已隆重推出全新的 Flutter 版本--Flutter 3.19.此版本引入了专为 Gemini 设计的新 Dart SDK.一个能让开发者对 Widget 动画实现精细化控制的全新 Widge ...
- SqlEs-像使用数据库一样使用Elasticsearch
SqlEs SqlEs是Elasticsearch的客户端JDBC驱动程序,支持采用sql语法操作Elasticsearch.SqlEs构建在RestHighLevelClient,屏蔽了RestHi ...
- Unreal Engine4 GPU崩溃或3D设备丢失的解决方案
起因: Unreal Engine4 在渲染时报错GPU崩溃或3D设备丢失 解决办法: regedit 打开注册表 在以下2个路径下 新建 DWORD(32-bit) Value 命名为 TdrD ...