温馨提示×

Ubuntu中Nginx日志如何管理

小樊
33
2025-10-25 13:01:27
栏目: 智能运维

Ubuntu中Nginx日志管理指南

Nginx日志是监控服务器运行状态、排查问题的核心工具,主要包括访问日志(access.log)(记录客户端请求详情)和错误日志(error.log)(记录服务器处理请求时的错误信息)。合理管理日志(配置、轮转、清理、分析)能有效释放磁盘空间、提升运维效率。

一、日志文件位置

Ubuntu系统中,Nginx默认日志文件集中存储在/var/log/nginx/目录下,常见文件及用途如下:

  • /var/log/nginx/access.log:记录所有客户端请求(如IP地址、请求时间、请求方法、响应状态码等);
  • /var/log/nginx/error.log:记录Nginx运行时的错误信息(如配置错误、权限问题、连接超时等);
  • /var/log/nginx/other_vhosts_access.log:若配置了多个虚拟主机,此文件记录非默认主机的访问日志(需手动开启)。

二、日志轮转配置(自动归档与清理)

日志轮转是避免日志文件无限增长的关键手段,Ubuntu推荐使用logrotate工具(系统自带)实现自动轮转。以下是具体配置步骤:

1. 确认logrotate安装

Ubuntu默认已安装logrotate,可通过以下命令验证:

which logrotate 

若未安装,执行以下命令安装:

sudo apt-get install logrotate 

2. 创建/编辑Nginx专用logrotate配置文件

/etc/logrotate.d/目录下创建nginx文件(若已存在则直接编辑):

sudo nano /etc/logrotate.d/nginx 

添加以下配置(可根据需求调整):

/var/log/nginx/*.log { daily # 每天轮转一次(可选:weekly/monthly) missingok # 若日志文件不存在,不报错 rotate 14 # 保留最近14天的日志(可根据磁盘空间调整) compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如rotate 14时,第14天的日志不压缩,第15天压缩第14天的) notifempty # 若日志为空,不轮转 create 0640 www-data adm # 轮转后创建新日志文件,权限640,所有者www-data(Nginx用户),组adm sharedscripts # 所有日志轮转完成后,统一执行postrotate脚本 postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` # 向Nginx主进程发送信号,重新打开日志文件 fi endscript } 

配置说明

  • daily:轮转频率(也可改为weekly/monthly);
  • rotate 14:保留14天的日志(超过的自动删除);
  • compress:使用gzip压缩旧日志(如access.log.1.gz);
  • postrotate:轮转后执行的脚本,用于通知Nginx切换日志文件(避免日志丢失)。

3. 测试logrotate配置

手动运行以下命令,模拟日志轮转(无错误则配置正确):

sudo logrotate -d /etc/logrotate.d/nginx # 调试模式(不实际执行) sudo logrotate -f /etc/logrotate.d/nginx # 强制立即执行 

4. 验证自动轮转

logrotate默认通过系统cron任务(/etc/cron.daily/logrotate)每天自动执行,无需额外配置。可通过查看/var/lib/logrotate/status文件,确认Nginx日志的轮转记录。

三、手动清理旧日志

若需临时清理旧日志(如磁盘空间不足),可使用以下命令:

1. 删除30天前的旧日志

sudo find /var/log/nginx/ -type f -name "*.log" -mtime +30 -exec rm -f {} \; 

说明

  • -mtime +30:匹配30天前修改的文件;
  • -exec rm -f {} \;:删除匹配的文件。

2. 压缩30天前的旧日志(保留原文件)

sudo find /var/log/nginx/ -type f -name "*.log" -mtime +30 -exec gzip {} \; 

压缩后的文件会以.gz结尾(如access.log.1.gz),节省磁盘空间。

四、日志分析与监控

日志分析能帮助快速定位问题(如404错误、500错误、高频访问IP等),以下是常用工具:

1. 实时查看日志

  • 查看访问日志:
    sudo tail -f /var/log/nginx/access.log 
  • 查看错误日志:
    sudo tail -f /var/log/nginx/error.log 

2. 过滤特定日志

  • 查看404错误的请求:
    sudo tail -f /var/log/nginx/access.log | grep " 404 " 
  • 查看500错误的请求:
    sudo tail -f /var/log/nginx/access.log | grep " 500 " 

3. 使用高级工具

  • ELK Stack(Elasticsearch+Logstash+Kibana):可视化分析日志(适合大规模日志);
  • GoAccess:实时分析Nginx访问日志(命令行工具,轻量级):
    sudo apt-get install goaccess sudo goaccess /var/log/nginx/access.log --log-format=COMBINED 

4. 日志监控与警报

  • 使用Prometheus+Grafana监控Nginx日志中的错误率、请求量等指标,设置异常警报(如错误日志激增时发送邮件/短信通知)。

五、注意事项

  1. 日志权限:确保/var/log/nginx/目录及日志文件的权限正确(通常为root:rootwww-data:adm),避免未经授权的访问;
  2. 磁盘空间:定期检查/var/log目录的磁盘使用情况(df -h /var/log),避免日志占满磁盘;
  3. 配置备份:修改Nginx或logrotate配置前,建议备份原文件(如sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak);
  4. 自定义日志格式:若需记录更多信息(如请求时间、上游响应时间),可修改Nginx的log_format指令(参考Nginx官方文档)。

0