Nginx日志管理

nginx日志管理

  • Nginx日志主要分为两种:

access_log访问日志:通过访问日志可以得到用户的IP地址,浏览器的信息,请求的处理时间等信息。

error_log错误日志:错误日志记录了访问出错的信息,可以用来定位错误的原因。

Nginx访问日志

1 设置访问日志

访问日志主要记录客户端的请求,客户端向Nginx服务器发起的每一次请求都记录在这里。

具体要记录哪些信息可以通过log_format指令定义。

语法:

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

// 语法说明
path:  指定日志的存放位置。
format:指定日志的格式。
buffer:指定日志写入时的缓存大小。
gzip:  日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。
flush: 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。
if :   条件判断,如果指定的条件计算为0或空字符串,那么该请求不会写入日志。

作用域:

1access_log指令的作用域分别有http,server,location,limit_except

用法:

access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.log main buffer=32k gzip flush=1m;

// 说明
指定日志的写入路径为/var/logs/nginx-access.log
日志格式使用默认的main
指定日志的缓存大小为32k
日志写入前启用gzip进行压缩
压缩比使用默认值1
缓存数据有效时间为1分钟。 

2 使用log_format自定义访问日志格式

log_format语法:

Syntax:	log_format name [escape=default|json|none] string ...;
Default:	log_format combined "...";
Context:	http
  • name :格式名称。在access_log指令中引用。
  • escape :设置变量中的字符编码方式是json还是default,默认是default
  • string :要定义的日志格式内容,该参数可以有多个。参数中可以使用Nginx变量。

默认日志格式:

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                      
10.0.0.1 - - [27/Aug/2021:01:13:52 -0400] "GET /favicon.ico HTTP/1.1" 404 3971 "http://10.0.0.4/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"

默认日志格式说明:

字段含义
$remote_addr客户端地址
$remote_user验证的用户名
$time_local访问时间和时区
$request请求的URI和HTTP协议
$statusHTTP请求状态
$body_bytes_sent发送给客户端文件内容大小
$http_refererurl跳转来源
$http_user_agent用户终端浏览器等信息
$http_x_forwarded_for简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,第一个值为真实的ip

日志格式常用变量:

$remote_addr           # 记录客户端IP地址(只记录上一个客户端IP)
$remote_user           # 记录客户端用户名
$time_local            # 通用日志格式下的本地时间,如"27/Aug/2021:01:13:52 -0400"
$time_iso8601          # 标准格式的本地时间,形如“2021-08-27T02:08:22-04:00”
$request               # 记录请求的方法以及请求的http协议
$request_uri           # 完整的请求地址,如 "https://daojia.com/"
$status                # 记录请求状态码(用于定位错误信息)
$body_bytes_sent       # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent            # 发送给客户端的总字节数
$msec                  # 日志写入时间。单位为秒,精度是毫秒。
$http_referer          # 记录从哪个页面链接访问过来的
$http_user_agent       # 记录客户端浏览器相关信息
$http_x_forwarded_for  #记录经过的所有服务器的客户端IP地址
$X-Real-IP		       # 记录起始的客户端IP地址和上一层客户端的IP地址
$request_length        # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time          # 请求花费的时间,单位为秒,精度毫秒
$connection            # 连接序列号
$connection_requests   # 当前通过连接发出的请求数量

自定义日志格式main格式:

// 修改默认日志格式
# vim /etc/nginx/nginx.conf
    log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$msec" ';
// 查看显示日志
# tail -f /var/log/nginx/access.log
10.0.0.1 - - [2021-08-27T01:58:29-04:00] "GET /favicon.ico HTTP/1.1" 404 3971 "http://10.0.0.4/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" "-" "1630043909.257" 

自定义日志格式json格式:

// 修改格式
log_format json '{"@timestamp":"$time_iso8601",'
                '"host": "$server_addr",'
                '"client": "$remote_addr",'
                '"size": $body_bytes_sent,'
                '"responsetime": $request_time,'
                '"domain": "$host",'
                '"url":"$request_uri",'
                '"referer": "$http_referer",'
                '"agent": "$http_user_agent",'
                '"status":"$status",'
                '"x_forwarded_for":"$http_x_forwarded_for"}';

// 指定使用json日志格式    
# access_log  /var/log/nginx/access.log  json;

// 查看json格式访问日志
{"@timestamp":"2021-08-27T02:08:22-04:00","host": "10.0.0.4","client": "10.0.0.1","size": 4057,"responsetime": 0.000,"domain": "10.0.0.4","url":"/","referer": "-","agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36","status":"200","x_forwarded_for":"-"}

Nginx错误日志

语法:

error_log file [level];
default:error_log  /var/log/nginx/error.log notice;
        
// 语法说明:
第一个参数指定日志的写入位置。
第二个参数指定日志的级别。
level可以是:debug , info , notice , warn , error , crit , alert , emerg 中的任意值。
可以看到其取值范围是按紧急程度从低到高排列的。
只有日志的错误级别等于或高于level指定的值才会写入错误日志中。

用法:

error_log /var/log/nginx/error.log error;

// 指定了错误日志的路径为:/var/log/nginx/error.log,日志级别使用error。

作用域:

它可以配置在:main,http , mail , stream , server , location 作用域。

Nginx日志切割

# vim /etc/logrotate.d/nginx 
/var/log/nginx/*log {
    create 0664 nginx root
    #每天切割日志
    daily
    #日志保留时间 10天
    rotate 10
    #忽略日志丢失
    missingok
    notifempty
    #日志压缩
    compress
    #开始执行脚本
    sharedscripts
    #标注脚本内容
    postrotate
        #判断nginx启动
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    #脚本执行完毕
    endscript
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值