如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转

本文介绍了如何在Ubuntu22.04服务器上配置Nginx的日志记录,包括error_log和access_log的使用,记录级别设置,以及如何使用log_format和logrotate进行日志管理。旨在帮助用户更好地监控和维护服务器性能。

简介

为了避免在 Web 服务器上遇到麻烦,您可以配置日志记录。在服务器上记录信息可以让您访问数据,帮助您在出现问题时进行故障排除和评估情况。

在本教程中,您将了解 Nginx 的日志记录功能,并发现如何配置这些工具以最好地满足您的需求。我们将以 Ubuntu 22.04 虚拟专用服务器为例,但任何现代发行版都应该有类似的功能。

先决条件

要按照本教程操作,您需要:

  • 一个安装了防火墙的非root sudo-启用用户的 Ubuntu 22.04 服务器。请参考我们的《初始化服务器设置》进行开始。
  • 在服务器上安装了 Nginx。请参考我们的《如何在 Ubuntu 22.04 上安装 Nginx》教程进行安装。

在您的 Ubuntu 22.04 服务器上运行 Nginx 后,您就可以开始了。

理解 Error_log 指令

Nginx 使用几个不同的指令来控制系统日志记录。其中核心模块中包含的一个指令称为 error_log

error_log 语法

error_log 指令用于处理一般错误消息的记录。如果您熟悉 Apache,这与 Apache 的 ErrorLog 指令非常相似。

error_log 指令应用以下语法:

error_log log_file log_level

log_file 指定将记录写入的文件。log_level 指定您希望记录的最低日志级别。

记录级别

error_log 指令可以根据需要配置记录更多或更少的信息。记录级别可以是以下之一:

  • emerg:系统处于不可用状态的紧急情况。
  • alert:需要立即采取行动的严重情况。
  • crit:需要解决的重要问题。
  • error:发生错误,某些操作失败。
  • warn:发生了一些不寻常的情况,但不值得关注。
  • notice:正常的事情,但值得注意发生了什么。
  • info:可能值得了解的信息性消息。
  • debug:可以用于准确定位问题发生位置的调试信息。

列表中级别较高的级别被视为更高优先级。如果指定了级别,日志将捕获该级别及高于指定级别的任何级别的消息。

例如,如果指定了 error,日志将捕获标记为 errorcritalertemerg 的消息。

在主配置文件中使用此指令的示例位于以下位置。使用您喜欢的文本编辑器访问以下配置文件。此示例使用 nano

sudo nano /etc/nginx/nginx.conf

滚动文件到 # Logging Settings 部分,并注意以下指令:

. . .
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
. . .

如果您不希望 error_log 记录任何内容,您必须将输出发送到 /dev/null

. . .
error_log /dev/null crit;
. . .

另一个日志记录指令 access_log 将在以下部分讨论。

理解 HttpLogModule 日志记录指令

虽然 error_log 指令是核心模块的一部分,但 access_log 指令是 HttpLogModule 的一部分。这提供了自定义日志的能力。

此模块包含几个其他指令,可帮助配置自定义日志。

log_format 指令

log_format 指令用于使用纯文本和变量描述日志条目的格式。

Nginx 预定义了一个称为 combined 的格式。这是许多服务器使用的常见格式。

以下是一个示例,如果内部未定义并且需要使用 log_format 指令指定 combined 格式:

log_format combined '$remote_addr - $remote_user [$time_local]  '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent"';

此定义跨越多行,直到找到分号(;)。

以美元符号($)开头的行表示变量,而像 -[] 这样的字符被直接解释。

指令的一般语法是:

log_format format_name string_describing_formatting;

您可以使用核心模块支持的变量来构建您的日志字符串。

理解 access_log 指令

access_log 指令使用与 error_log 指令类似的语法,但更加灵活。它用于配置自定义日志。

access_log 指令使用以下语法:

access_log /path/to/log/location [ format_of_log buffer_size ];

access_log 的默认值是 log_format 部分提到的 combined 格式。您可以使用任何由 log_format 定义定义的格式。

缓冲区大小是 Nginx 在将所有数据写入日志之前将保存的数据的最大大小。您还可以通过将 gzip 添加到定义中指定对日志文件进行压缩:

access_log /path/to/log/location format_of_log gzip;

error_log 指令不同,如果您不希望记录日志,可以通过在配置文件中更新它来关闭它:

. . .
##
# 日志设置
##
access_log off;
error_log /var/log/nginx/error.log;
. . .

在这种情况下,不需要写入 /dev/null

管理日志轮转

随着日志文件的增长,有必要管理日志机制,以避免填满磁盘空间。日志轮转 是切换日志文件并可能对旧文件进行一定时间的归档的过程。

Nginx 不提供管理日志文件的工具,但它包括辅助日志轮转的机制。

手动日志轮转

要手动轮转日志,可以创建一个脚本来轮转它们。例如,将当前日志移动到新文件进行归档。一个常见的方案是将最近的日志文件命名为 .0 的后缀,然后将较旧的文件命名为 .1,依此类推:

mv /path/to/access.log /path/to/access.log.0

实际执行日志轮转的命令是 kill -USR1 /var/run/nginx.pid。这不会终止 Nginx 进程,而是向其发送一个信号,使其重新加载其日志文件。这将导致新请求被记录到刷新后的日志文件中:

kill -USR1 `cat /var/run/nginx.pid`

/var/run/nginx.pid 文件是 Nginx 存储主进程 PID 的位置。它在 /etc/nginx/nginx.conf 配置文件的顶部用 pid 开头的行中指定:

sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
...

轮转后,执行 sleep 1 以允许进程完成传输。然后可以对旧文件进行压缩或执行任何其他轮转后的处理:

sleep 1
[ 对旧日志文件进行轮转后处理 ]

使用 logrotate 进行日志轮转

logrotate 应用程序是用于轮转日志的程序。它默认安装在 Ubuntu 上,而 Ubuntu 上的 Nginx 自带一个自定义的 logrotate 脚本。

使用您喜欢的文本编辑器访问轮转脚本。此示例使用 nano

sudo nano /etc/logrotate.d/nginx

文件的第一行指定了后续行将应用的位置。如果您在 Nginx 配置文件中切换日志位置,请记住这一点。

文件的其余部分指定日志将每天轮转一次,并保留 52 个旧副本。

请注意,postrotate 部分包含类似于先前使用的手动轮转机制的命令:

. . .
postrotate
  [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
. . .

此部分告诉 Nginx 在轮转完成后重新加载日志文件。

结论

适当的日志配置和管理可以在服务器出现问题时节省您的时间和精力。拥有帮助您诊断问题的信息可能是解决问题的关键,也可能是一个持续的头痛。

重要的是要密切关注服务器日志,以维护一个功能正常的站点,并确保您没有暴露敏感信息。本指南仅作为日志记录经验的介绍。您可以在我们的教程《如何排除常见的 Nginx 错误》中了解更多一般提示。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2天前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
148 90
|
2月前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
74 4
|
4月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
257 61
|
4月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
266 60
|
4月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
356 60
|
3月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
140 5
|
4月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
3月前
|
SQL
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO
|
3月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
268 3
|
3月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
112 5