💡 CloudPicked 是独立作者。我们从某些供应商获得联盟佣金 · 了解更多

服务器日志分析完整指南

服务器日志分析指南

服务器日志是服务器上发生的所有活动的永久记录。从访问者的 HTTP 请求、PHP 错误,到潜在的安全威胁 — 一切都被记录。当您在共享主机或虚拟专用服务器 (VPS) 上托管网站时,了解如何读取和分析这些日志对于调试错误、监控性能、检测黑客攻击和确保站点正常运行至关重要。在本完整指南中,我们将教您有关服务器日志分析的所有知识。

什么是日志文件?主机记录什么?

日志文件是记录服务器上发生的事件的文本文件,每个条目都有时间戳以供精确追踪。每个主机提供商和虚拟专用服务器都保存多种类型的日志:

通过学习读取日志,您可以立即诊断问题,而不是进行猜测。当您的网站出现故障时,错误日志通常包含确切的答案。这就是为什么经验丰富的开发人员首先检查日志。

Linux 服务器上的日志文件位置和 SSH 访问

如果您的主机提供商提供图形文件管理器 (cPanel 或 DirectAdmin),您可以轻松下载日志。但如果您需要 SSH 访问日志,您需要了解它们在 Linux 上的标准位置:

# Apache 访问日志
/var/log/apache2/access.log
/var/log/httpd/access_log

# Apache 错误日志
/var/log/apache2/error.log
/var/log/httpd/error_log

# Nginx 访问日志
/var/log/nginx/access.log

# Nginx 错误日志
/var/log/nginx/error.log

# PHP 错误日志(因配置而异)
/var/log/php-errors.log
/var/log/php.log
/home/username/public_html/error_log

# 邮件日志
/var/log/maillog
/var/log/mail.log

通过 SSH 进入服务器后,您可以使用标准 Unix 命令读取日志:

# 查看整个日志文件
cat /var/log/apache2/access.log

# 查看最后 20 行(最新的)
tail -20 /var/log/apache2/access.log

# 查看前 20 行
head -20 /var/log/apache2/access.log

# 逐页查看日志(按空格键滚动)
less /var/log/apache2/access.log

或者,通过您主机的文件管理器下载日志文件并在本地计算机上查看,这样往往更方便。

Apache/Nginx 访问日志和组合日志格式

访问日志记录对您网站的每个 HTTP 请求。它们遵循称为"组合日志格式"的标准格式:

203.0.113.5 - - [29/Jun/2026:10:23:14 +0700] "GET /index.php HTTP/1.1" 200 2326 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"

此日志条目的每个部分含义如下:

从此信息中,您可以看到访问者来自何处、使用哪种浏览器、访问了哪些页面以及请求是否成功。许多 404 可能表示损坏的链接;许多 500 可能表示应用程序中存在服务器端错误。

PHP 错误日志:查找导致网站崩溃的错误

当您基于 PHP 的网站遇到错误时(语法错误、未定义的函数、未定义的变量),该信息会进入 PHP 错误日志。此文件通常在 php.ini 中配置,因主机提供商而异:

/var/log/php-errors.log
/var/log/php.log
/home/username/public_html/error_log

PHP 错误日志条目示例:

[29-Jun-2026 10:25:31 Asia/Bangkok] PHP Fatal error: Call to undefined function mysql_connect() in /home/user/public_html/db.php on line 15

[29-Jun-2026 10:26:45 Asia/Bangkok] PHP Warning: Undefined variable: $username in /home/user/public_html/login.php on line 42

[29-Jun-2026 10:27:12 Asia/Bangkok] PHP Parse error: syntax error, unexpected '}' in /home/user/public_html/config.php on line 23

每个错误条目都显示确切的文件、行号和错误类型。这使开发人员能够立即修复问题。即使出现警告,也应该解决,因为它们通常会导致更大的失败。

使用 Grep 和 Awk 在命令行中分析日志

当日志文件增长到数百万行时,手动读取变得不切实际。使用 shell 命令提取您需要的内容。最有用的命令是 grep(过滤)、awk(解析)、sortuniq

# 计算 404 错误数量
grep " 404 " /var/log/apache2/access.log | wc -l

# 计算 500 错误数量
grep " 500 " /var/log/apache2/access.log | wc -l

# 按请求数列出前 20 个 IP
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20

# 导致 404 错误最多的顶部 URL
grep " 404 " /var/log/apache2/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10

# 访问者的浏览器分布
awk -F'"' '{print $6}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -10

# 计算特定日期上的请求
grep "29/Jun/2026" /var/log/apache2/access.log | wc -l

# 查找来自特定 IP 的所有错误
grep "203.0.113.5" /var/log/apache2/access.log | grep " 404 "

awk 命令用于解析结构化日志数据非常强大。通过指定字段(列),您可以准确提取所需的内容。例如,awk '{print $1}' 仅打印每个访问日志行的第一个字段(IP 地址)。

AWStats 和 GoAccess:免费日志分析工具

对于分析非常大的日志,有两个免费工具很受欢迎:AWStats 和 GoAccess。

AWStats 是一个较旧但仍然流行的日志分析工具。大多数带有 cPanel 的主机都包含它。AWStats 分析您的访问日志并生成 HTML 报告,显示:

GoAccess 是一个具有实时功能和更好灵活性的较新工具。如果您有虚拟专用服务器控制权,您可以安装和使用 GoAccess:

# 安装 GoAccess
sudo apt-get install goaccess

# 分析访问日志
goaccess /var/log/apache2/access.log -a

# 生成 HTML 报告
goaccess /var/log/apache2/access.log -a -o html > report.html

GoAccess 显示一个实时仪表板,显示点击量、访问者、带宽、顶级页面、顶级 IP、浏览器分布等。这种视觉呈现使您可以一目了然地了解您的流量。

大型日志文件:当它们变得太大时该怎么办

日志文件增长很快。高流量网站的访问日志每天可能增长数百 MB,消耗宝贵的磁盘空间。三种方法有助于管理这一点:

1. Logrotate — Linux 自动使用 logrotate 轮换日志,它存档旧日志并仅保留最近的日志。配置示例:

/var/log/apache2/*.log {
  daily
  missingok
  rotate 14
  compress
  delaycompress
  notifempty
  create 0640 www-data adm
  sharedscripts
  postrotate
    if [ -f "var/run/apache2.pid" ]; then
      /etc/init.d/apache2 reload > /dev/null
    fi
  endscript
}

2. 截断日志 — 如果磁盘空间紧张,您可以清除日志内容以立即释放空间:

# 截断 Apache 访问日志
> /var/log/apache2/access.log

# 截断 PHP 错误日志
> /var/log/php-errors.log

3. 删除旧日志 — 删除超过特定天数的日志:

# 删除 30 天以前的日志
find /var/log -name "*.log" -mtime +30 -delete

许多主机提供商会自动管理日志轮换,但如果磁盘空间成为问题,请联系支持 — 他们通常可以扩展日志保留期或设置自定义轮换策略。

从访问日志检测黑客攻击尝试

除了故障排除之外,访问日志还会显示安全威胁。注意以下模式:

# 按请求数列出顶部 IP(可能显示机器人活动)
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -10

# 生成最多 404 错误的 IP(漏洞扫描)
grep " 404 " /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# 搜索 SQL 注入模式
grep -E "union|select|where|and|or|drop|insert|update|delete" /var/log/apache2/access.log

# 查找路径遍历尝试
grep "\.\.\/" /var/log/apache2/access.log

如果您发现可疑的 IP,请使用防火墙规则(.htaccess、iptables 或 WAF)阻止它们以防止进一步的攻击。安装安全插件或 WAF 以获得额外保护。

使用 Tail -f 进行实时日志监控

要查看日志事件实时发生(实时),请使用 tail -f 命令:

# 实时监控访问日志
tail -f /var/log/apache2/access.log

# 实时监控 PHP 错误日志
tail -f /var/log/php-errors.log

# 实时监控 Web 服务器错误日志
tail -f /var/log/apache2/error.log

此命令在新日志条目写入时流式传输它们,允许实时调试。按 Ctrl+C 停止。

tail -fgrep 结合使用来仅监控您关心的事件:

# 仅监控 404 和 500 错误
tail -f /var/log/apache2/access.log | grep -E " (404|500) "

# 监控来自特定 IP 的请求
tail -f /var/log/apache2/access.log | grep "203.0.113.5"
推荐AsiaGB.com — 我们使用和推荐的网络主机和虚拟专用服务器。泰国和新加坡的服务器、SSD 存储、DirectAdmin 控制面板、24 小时泰语支持、99% 正常运行时间。

AsiaGB.com — hosting & VPS we recommend. TH/SG servers, SSD storage, DirectAdmin, 24/7 Thai support, 99% uptime.

访问 AsiaGB →

常见问题

日志应该保存多长时间?
大多数主机根据磁盘空间和提供商政策将日志保存 7-30 天。如需更长保留期,请从支持部门请求或设置自定义日志归档。出于合规原因,某些企业需要 90 天以上的保留期。
日志中的 .gz 文件是什么?
这些是 gzip 压缩的日志。要查看它们,首先使用 gunzipzcat 命令进行解压缩。压缩可以节省已存档日志的磁盘空间。
我如何知道我的网站是否被黑客入侵?
检查访问日志是否存在来自单个 IP 的 404 风暴、URL 中的 SQL 注入模式或路径遍历尝试。检查错误日志是否存在未授权访问错误。安装安全插件或 Web 应用程序防火墙 (WAF) 以获得保护。定期监控并迅速对可疑活动做出反应。
PHP 错误日志未出现。我该怎么办?
您的主机可能在 php.ini 中禁用了错误日志记录。要求支持启用它,或通过 .htaccess 使用指令(如 php_flag log_errors onphp_value error_log /path/to/error_log)自己配置。
我可以从我的主机下载日志吗?
可以。大多数主机都提供文件管理器 (cPanel 或 DirectAdmin),您可以在其中下载日志。您也可以使用 SSH 或 FTP 将日志文件下载到计算机进行分析。