Nginx 日志滚动配置
在linux下配置日志滚动一般都用系统自带的logrotate,但是在之前的使用中发现,如果一个daemon只打开一个日志文件写日志,在logroate的配置文件中使用copytruncate,会有少部分日志丢失。在对日志要求不是特别严格的情况下这是可行的,但有时候这丢失的几行日志很重要,就需要一个比较严格的日志滚动方法。
通过搜索找到一种不错的方法,不用kill nginx,而是使用apache的rotatelogs
[1] 安装apache,rotatelogs是apache自带的工具,配置日志目录mkdir -p /opt/nginx_logs
cp rotatelogs /opt/nginx_logs/
chmod +x /opt/nginx_logs/rotatelogs
[2] 创建命名管道mkdir /opt/nginx_logs/abc_www/
mkfifo /opt/nginx_logs/abc_www/access_log
[3] 配置nginx.conf,将access_log 指向命名管道access_log /opt/nginx_logs/abc_www/access_log main;
[4] 创建切割日志目录mkdir /opt/nginx_logs/abc_www/log/
[5] 日志切割脚本rotate.sh,用rotatelogs实现
#!/bin/sh
baselogdir=/opt/nginx_logs/abc_www
rotatelogs=/opt/nginx_logs/rotatelogs
while [ 1 ]
do
echo `date +"%F %T"`" rotatelogs access start"
$rotatelogs $baselogdir/log/access_%Y%m%d-%H%M%S.log 5M 480 < $baselogdir/access_log
echo `date +"%F %T"`" rotatelogs access stop"
sleep 1;
done
按照5M的大小切割文件
在实际应用中这个值应该设置得比较大,如果需要一天一个日志文件的话5M 改为 86400 = 24 * 60 * 60,也就是一天的秒数
[6] 启动脚本run.sh#!/bin/sh
sh /opt/nginx_logs/abc_www/rotate.sh >> /opt/nginx_logs/abc_www/log/access-rotate.log 2>&1 &
[7] 测试,使用ab工具测试ab -n 100000 -c 1000 "http://localhost/"
##############################
-rw-r--r--. 1 root root 5245560 Apr 11 22:54 access_20150411-225410.log
-rw-r--r--. 1 root root 4251582 Apr 11 22:54 access_20150411-225427.log
-rw-r--r--. 1 root root 5245615 Apr 11 23:10 access_20150411-231035.log
-rw-r--r--. 1 root root 4254385 Apr 11 23:11 access_20150411-231048.log
nginx配置错误检查
另外在测试过程中发现error.log也在不断的增大,都是“Too many open files”错误
进行如下检查:
1. 检查nginx能打开的文件数
引用
ps ax | grep nginx
36756 ? Ss 0:00 nginx: master process nginx
36757 ? S 0:08 nginx: worker process
列出nginx的worker进程,然后 cat /proc/XXX/limits,其中XXX是worker进程的进程号,找到如下是行:
引用
Max open files 1024 4096 files
2. 检查系统打开文件数
引用
sysctl -a | grep file-max
fs.file-max = 98684
系统默认值,这个值比较大暂时不修改
通过检查发现系统能打开的文件数很大,但每个进程的文件数只有1024,这个可以用
ulimit -n来确认
错误修复
因此需要修改配置来实现nginx的文件打开数
1. 在nginx.conf中增加如下行
引用
worker_rlimit_nofile 15360;
2. 修改/etc/security/limits.conf,增加如下两行
引用
* soft nofile 10240
* hard nofile 15360
3. 重启nginx,需要将master也停掉,不能时候用
kill -HUP,然后再查看worker进程的Max open files
引用
Max open files 15360 15360 files
修改成功,在测试时没有再报“Too many open files”
参考:
nginx日志按照天进行分割
分享到:
相关推荐
在 Docker 中运行的 Nginx 服务由于其自身并不具备日志滚动功能,因此需要借助外部工具或自定义脚本来实现日志的自动滚动。在本文中,我们将探讨如何处理这个问题,主要关注如何在 Docker 容器中滚动 Nginx 的日志...
**Nginx日志文件切割**是Web服务器管理中的一个重要环节,主要目的是为了定期归档、管理和优化存储空间。在高访问量的网站环境中,Nginx的日志文件可能会迅速增长,如果不进行适当的切割,可能会导致硬盘空间耗尽,...
2. **错误配置**:Nginx的日志配置可能存在错误,例如,未正确配置日志切割,导致所有日志都写入同一个文件,而不是按日期或大小滚动。确保`logrotate`配置正确,定期清理和归档旧日志,防止单个日志文件过大。 3. ...
- **热部署**:支持在线更新配置、日志滚动和程序升级,不中断服务。 - **高并发支持**:利用libevent库的事件通知机制,单个工作线程可响应多个请求,官方测试能支持5万并发连接。 **2. 功能介绍** Nginx的基本...
6. **日志管理**:可以配置 Nginx 的日志文件位置、格式和滚动策略,便于监控和分析服务器活动。 7. **模块管理**:可以添加或移除 Nginx 的第三方模块,增强 Nginx 的功能,例如访问限制、缓存管理和负载均衡等。 ...
2. **日志管理**: 配置日志滚动和日志级别,以便监控和分析服务器状态。 3. **内存池**: Nginx使用内存池技术管理内存,减少内存碎片,提高效率。 4. **缓存设置**: 根据服务器资源和需求调整静态文件的缓存策略。 5...
6. **日志轮换**:配合外部工具如logrotate实现日志的定期滚动。 了解这些基本概念和配置选项后,我们可以根据实际需求调整Nginx的日志模块,以便更好地监控系统运行状况,及时发现和解决潜在问题。对于大型的高...
主进程负责读取和验证配置,创建和管理工作进程,以及实现无中断的服务升级和日志文件滚动。工作进程则负责接收和处理客户端请求,提供反向代理功能。 Nginx的特性包括: 1. 高并发支持:Nginx采用事件驱动模型,如...
10. **监控和日志**:在生产环境中,还需要配置日志收集和监控系统,如Prometheus和Grafana,以便实时了解Nginx服务的性能和异常情况。 通过以上步骤,我们可以实现Kubernetes v1.12环境下的高可用Nginx部署,确保...
使用`nginx -s reopen`命令,Nginx会关闭现有的日志文件并重新打开它们,这对于解决日志文件权限问题或滚动日志文件非常有用。这有助于确保Nginx可以继续记录新的日志信息。 3. **测试配置文件**: 在对配置文件...
* **日志滚动**:当rename Nginx日志文件,并reload Nginx的时候,需要在*读尽*旧的日志文件之后,从头开始处理新的日志文件 * **并发计算**:解析日志的时候,需要消耗大量的CPU资源,因此使用进程池,降低因复杂...
6. Nginx日志配置:Nginx提供丰富的日志管理功能,包括访问日志、错误日志、日志切割等,可以通过相关指令配置日志的输出格式、日志文件的存储位置和滚动策略。 7. Apache和Nginx支持SSI配置:SSI(服务器端包含)...
8. `/var/log/httpd/*` 或 `/var/log/nginx/*`:针对Web服务器(如Apache或Nginx)的日志,包含访问、错误和访问统计信息。 二、日志管理命令 1. `less`:这是一个查看文本文件的命令,常用来阅读日志文件,支持...
例如,`cat /var/log/nginx/access.log` 将会打印出 Nginx 访问日志的全部内容。 3. `more` 命令: 当文件内容较多,不适合一次性全部显示时,`more` 命令就派上用场了。它可以分页显示文件内容,用户可以通过按...
- **资源监控**和**日志访问**:监控容器性能并收集日志。 - **认证与授权**:控制对集群资源的访问。 Nginx 在 Kubernetes 中常用于提供反向代理、负载均衡和静态内容服务。配置 Nginx Ingress 控制器,可以实现...
4. 考虑到日志文件的大小和存储,可以设置日志切割或者使用日志滚动策略。 综上所述,ngx_log_if模块是Nginx运维中的一个实用工具,能够帮助我们更精确地控制日志记录,优化资源利用,提高运维效率。在Linux环境中...
2. **Nginx日志切割**:通过配置Nginx的日志模块来实现日志的自动分割,通常会结合使用cron定时任务来实现日志的定期切割。 以上就是在Linux服务器上安装和配置常用WEB应用环境的过程,包括JDK、MySQL、Nginx、...