如何在 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日志并进行多维度分析。
目录
相关文章
|
19天前
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
215 84
终极 Nginx 配置指南(全网最详细)
|
8天前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
20 4
|
8天前
|
缓存 应用服务中间件 nginx
nginx如何配置?配置项都是什么意思?
nginx如何配置?配置项都是什么意思?
24 1
|
11天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
23天前
|
存储 Prometheus 监控
在Ubuntu系统上安装与配置Prometheus的步骤
通过以上步骤,您应该已经成功在Ubuntu系统上安装并配置了Prometheus。您现在可以开始使用Prometheus收集和分析您的系统和应用程序的指标数据了。
46 1
|
1天前
|
Ubuntu 网络协议 Linux
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
|
1月前
|
应用服务中间件 nginx
一文搞定Nginx配置RTMP!
一文搞定Nginx配置RTMP!
67 3
|
1月前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
63 2
|
1月前
|
Ubuntu Oracle 关系型数据库
Oracle VM VirtualBox之Ubuntu 22.04LTS双网卡网络模式配置
这篇文章是关于如何在Oracle VM VirtualBox中配置Ubuntu 22.04LTS虚拟机双网卡网络模式的详细指南,包括VirtualBox网络概述、双网卡网络模式的配置步骤以及Ubuntu系统网络配置。
56 3
|
11天前
|
应用服务中间件 nginx 索引
7-15|Nginx配置
7-15|Nginx配置