Nginx之日志模块解读

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx之日志模块解读

基本介绍

Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。Nginx日志主要记录以下信息:

  • 记录Nginx服务启动和停止的信息。
  • 记录客户端访问Nginx服务的信息,包括客户端IP、客户端浏览器、访问时间、访问状态等等。
  • 记录Nginx运行的异常情情况及错误信息。

如果你不进行任何配置的话,这 2 个日志将会使用默认的日志配置,这个日志将会位于

/var/log/nginx 目录中。

配置指令

access_log(访问日志)

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志

  • access_log off; # 关闭访问日志
  • path 指定日志的存放位置。
  • format 指定日志的格式。默认使用预定义的combined。
  • buffer 用来指定日志写入时的缓存大小。默认是64k。
  • gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。
  • flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。
  • if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。

记录客户端请求的信息。

access_log off; #关闭当前作用域下的所有日志
access_log log_file log_format;#设置日志文件的位置和使用的格式

第二条指令中log_file是日志文件的绝对路径,log_format是日志文件记录的格式。可以在http、server、location等指令的上下文中启用访问日志。Nginx默认开启了访问日志的功能,且log_format指令的配置仅可用在http模块内,否则会出现警告信息

http {
  access_log  /nginx/access.log;
......
  server {
    server_name test.com
    access_log /nginx/domain.access.log;
    ......
  }
}

如果没有指定log_format,会自动使用系统默认名为combined的:

access_log /var/logs/nginx-access.log
该例子指定日志的写入路径为/var/logs/nginx-access.log,日志格式使用默认的combined。
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
该例子指定日志的写入路径为/var/logs/nginx-access.log,
日志格式使用默认的combined,指定日志的缓存大小为32k,
日志写入前启用gzip进行压缩,压缩比使用默认值1,缓存数据有效时间为1分钟。
log_format combined '$remote_addr - $remote_user [$time_local]'
                    '"$request" $status $body_bytes_sent'
                    '"$http_referer" "$http_user_agent"';

变量

含义

$bytes_sent

发送给客户端的总字节数

$body_bytes_sent

发送给客户端的字节数,不包括响应头的大小

$connection

连接序列号

$connection_requests

当前通过连接发出的请求数量

$msec

日志写入时间,单位为秒,精度是毫秒

$pipe

如果请求是通过http流水线发送,则其值为"p",否则为“."

$request_length

请求长度(包括请求行,请求头和请求体)

$request_time

请求处理时长,单位为秒,精度为毫秒,从读入客户端的第一个字节开始,直到把最后一个字符发送张客户端进行日志写入为止

$status

响应状态码

$time_iso8601

标准格式的本地时间,形如“2017-05-24T18:31:27+08:00”

$time_local

通用日志格式下的本地时间,如"24/May/2017:18:31:27 +0800"

$http_referer

请求的referer地址。

$http_user_agent

客户端浏览器信息。

$remote_addr

客户端IP

$http_x_forwarded_for

当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。

$request

完整的原始请求行,如 "GET / HTTP/1.1"

$remote_user

客户端用户名称,针对启用了用户认证的请求

$request_uri

完整的请求地址,如 "https://daojia.com/"

error_log( 错误日志)

它也是在http,server或location指令的上下文中设置,一般写法如下:

error_log path(存放路径) level(日志等级)

其中log_file为错误日志存放的绝对路径。

path含义同access_log,level表示日志等级,日志等级分为[ debug | info | notice | warn | error | crit ],从左至右,日志详细程度逐级递减,即debug最详细,crit最少。

一般情况下每个server都会有自己单独的,在server中配置后,其优先级比http下的高。

http {
  error_log  /home/sdc/public/app/nginx/error.log;
......
  server {
    server_name test.com
    error_log /home/sdc/public/app/nginx/test_error.log debug;
    ......
  }
}
error_log  logs/error.log  info;

需要注意的是:error_log off并不能关闭错误日志,而是会将错误日志记录到一个文件名为off的文件中。正确的关闭错误日志记录功能的方法如下:

error_log /dev/null;    表示将存储日志的路径设置为“垃圾桶”。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
3月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
78 3
Golang语言之Prometheus的日志模块使用案例
|
2月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
45 0
|
4月前
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
373 6
|
3月前
|
Shell Python
salt自定义模块内使用日志例子
salt自定义模块内使用日志例子
logging 日志 模块
logging 日志 模块
|
4月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
222 1
|
4月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
4月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
4月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
下一篇
DataWorks