Skip to content

日志管理

本节介绍Nginx日志的管理。

查看日志

查看访问日志

bash
sudo tail -f /var/log/nginx/access.log

查看错误日志

bash
sudo tail -f /var/log/nginx/error.log

查看最近的日志

bash
sudo tail -100 /var/log/nginx/access.log

清空日志

清空访问日志

bash
sudo truncate -s 0 /var/log/nginx/access.log

清空错误日志

bash
sudo truncate -s 0 /var/log/nginx/error.log

日志轮转

配置日志轮转

bash
sudo vi /etc/logrotate.d/nginx

添加以下内容:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

手动轮转

bash
sudo logrotate -f /etc/logrotate.d/nginx

完整示例

日志管理脚本

bash
#!/bin/bash
# Nginx日志管理脚本

LOG_DIR="/var/log/nginx"
BACKUP_DIR="/backup/nginx/logs"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份访问日志
sudo cp $LOG_DIR/access.log $BACKUP_DIR/access.log.$DATE

# 备份错误日志
sudo cp $LOG_DIR/error.log $BACKUP_DIR/error.log.$DATE

# 清空日志
sudo truncate -s 0 $LOG_DIR/access.log
sudo truncate -s 0 $LOG_DIR/error.log

echo "日志备份和清空完成"

日志分析脚本

bash
#!/bin/bash
# Nginx日志分析脚本

LOG_FILE="/var/log/nginx/access.log"

echo "访问量前10的IP:"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10

echo -e "\n访问量前10的URL:"
awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -nr | head -10

echo -e "\n状态码统计:"
awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -nr

echo -e "\n错误日志统计:"
grep "error" /var/log/nginx/error.log | wc -l

常见问题

日志文件过大

原因: 日志记录过多

解决: 配置日志轮转

bash
sudo vi /etc/logrotate.d/nginx

日志未记录

原因: 日志配置错误

解决: 检查日志配置

nginx
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

总结

日志管理的关键点:

  • 查看日志:使用tail命令查看日志
  • 清空日志:使用truncate命令清空日志
  • 日志轮转:配置logrotate自动轮转日志
  • 备份日志:定期备份日志文件
  • 分析日志:分析日志获取有用信息

掌握Nginx日志管理方法,管理Nginx日志。