如何在 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日志并进行多维度分析。
目录
相关文章
|
27天前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
386 87
|
25天前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
|
1月前
|
Ubuntu 网络协议 应用服务中间件
在 Ubuntu 上安装 Nginx
在 Ubuntu 上安装和配置 Nginx 非常简单。首先更新系统包,然后通过 `apt` 安装 Nginx,检查服务状态并配置防火墙规则。访问服务器 IP 测试是否成功显示默认页面。还可管理服务、创建虚拟主机及排查常见问题,适合新手快速上手部署高性能 Web 服务。
196 0
|
3月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
211 0
|
7天前
|
Ubuntu jenkins 机器人
在Jenkins上配置触发Ubuntu环境的图形用户界面(GUI)构建任务。
以上,这趟融合了技术与艺术的Jenkins配置之旅就告一段落了。记住,技术应当像艺术一样有趣和生动,这样才能激发出最大的创新和效率。
28 2
|
16天前
|
Ubuntu 安全 Linux
CentOS与Ubuntu中防火墙配置命令集汇
有了这些,你就能遨游在 CentOS 和 Ubuntu 的海洋中,频繁地改变你的防火墙设置,快速地应对各种安全威胁,同时也能保证你的系统可以正常工作。出发吧,勇敢的编程者,随着这些命令集的涌动,扬帆起航,走向安全的网络世界!
67 5
|
2月前
|
Ubuntu 关系型数据库 MySQL
在Ubuntu 22.04上配置和安装MySQL
以上就是在Ubuntu 22.04上配置和安装MySQL的步骤。这个过程可能看起来有点复杂,但只要按照步骤一步步来,你会发现其实并不难。记住,任何时候都不要急于求成,耐心是解决问题的关键。
230 30
|
2月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
101 23
|
2月前
|
Ubuntu 安全 网络安全
在Ubuntu系统下使用vsftpd配置FTP服务器的步骤
以上就是在Ubuntu系统下使用vsftpd配置FTP服务器的步骤。这些步骤都是基础的,但足够让你建立一个简单的FTP服务器。如果你需要更高级的功能,例如SSL加密、虚拟用户等,你可能需要进一步研究vsftpd的配置选项。
143 13
|
2月前
|
Ubuntu 网络协议
在Ubuntu 18.04服务器上配置双网口以接入互联网
总结一下,配置双网口在Ubuntu 18.04服务器就像一场冒险游戏,你小心翼翼地从查看网络布局开始,铺设新线路,最后得到了通往互联网的双重通道。祝你在网络世界的冒险旅程中更上一层楼!
88 11