如何在 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日志并进行多维度分析。
目录
相关文章
|
9天前
|
应用服务中间件 Linux nginx
Jetson 环境安装(四):jetson nano配置ffmpeg和nginx(亲测)之编译错误汇总
这篇文章是关于在Jetson Nano上配置FFmpeg和Nginx时遇到的编译错误及其解决方案的汇总。
46 4
|
5天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
108 0
|
9天前
|
网络协议 Ubuntu 网络安全
|
3天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
8天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
30 7
|
10天前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
46 7
|
6天前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
51 1
|
9天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
111 3
|
5天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
35 0
|
7天前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
48 0