Nginx - 日志格式及输出
1. 前言
在 Nginx 服务器中,如果想对日志输出进行控制还是很容易的。Nginx 服务器提供了一个 HttpLogModule 模块,可以通过它来设置日志的输出格式。
2. HttpLogModule 模块
2.1 示例
2.2 指令
指令名称:access_log
语法:access_log [format [buffer=size] ] | off
默认值:access_log logs/access.log combined;
使用环境:http, server, location, if in location, limit_except
指令名称:log_format
语法:log_format name [escape=default|json|none] string ...;
默认值:log_format combined "...";
使用环境:http
Nginx 日志格式中,有很多参数,总结如下:
参数 说明 示例
$remote_addr 客户端地址 14.116.133.170
$remote_user 客户端用户名称 --
$time_local 访问时间和时区 /Mar/::: +
$request 请求的URI和HTTP协议 "GET /city/static/js/illegals/vehicle-search.js HTTP/1.1"
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.super.com 192.168.118.15
$status HTTP请求状态
$upstream_status upstream状态
$body_bytes_sent 发送给客户端文件内容大小
$http_referer url跳转来源 https://www.baidu.com/
$http_user_agent 用户终端浏览器等信息 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/ Firefox/65.0
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 192.168.118.16:
$request_time 整个请求的总时间 0.205
$upstream_response_time 请求过程中,upstream响应时间 0.002
Nginx日志格式参数
指令名称:open_log_file_cache
语法:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; | open_log_file_cache off;
默认值:open_log_file_cache off;
使用环境:http、server、location
max - 该选项用来设置在缓存中可以存储的最大文件描述符数量。它通过最近最少使用(LRU)算法来移除缓存条目
inactive - 该选项用来设置一个时间间隔。在这个时间间隔之后,没有被命中的文件描述符将会被移除,默认值是10秒
min_uses - 该选项用来设置访问次数。在一定时间间隔内,一个文件描述符至少被访问多少次后就可以将该文件描述符放在缓存中,默认为 ,即访问一次便缓存
valid - 该选项用于设置检查同名文件存在的时间,默认为60秒
off - 关闭缓存 示例:
open_log_file_cache max= inactive=20s min_uses= valid=1m;
2.3 测试
首先,查看下 nginx 默认的日志格式:
测试访问,查看日志:
注意:这里有两个 '- -' 第一个 '-' 是 log_format 中定义的,第二个 '-' 是 $remote_user 变量为null时,返回的占位符。
这些变量通过上面表对比就能明白。
默认的日志格式可能不满足我们日常问题的排查,可以自行定义,这里通过是否需要转发后端服务器来分为 2类进行定义日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time"'; log_format remote_main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time" "$upstream_addr" "$upstream_status"';
为了能够尽快的通过日志查询到异常情况,这里建议取消 http 段的全局定义日志,改为每个location 中定义一个日志文件。这样除了异常,可以快速定位。
access_log xxx buffer = 32k flush =5s;
这里非常有必要说一下,如果这样设置了,日志是不会实时刷新的,buffer 满 32k 才写盘;假如 buffer 不满 5s 钟后强制写盘。
最后,别忘记加上日志缓存,有利于减少服务器资源消耗。
2.4 测试
通过访问:
curl http://10.0.10.158/ 返回的日志查看
最后一位是 $request_time 整个请求的总时间,我们这里只是很短的字符串测试,所以很快就处理完成。记录为 0.000
curl http://10.0.10.158/apache/index.html
通过这样一条日志,能够很清晰的看出来:
用户请求访问的uri:GET /apache/index.html
整个请求总耗时:0.002
后端处理耗时:0.002
后端处理请求主机socket:"10.0.10.159:8080"
后端处理返回状态:200
Nginx - 日志格式及输出的更多相关文章
- 运维技巧-Nginx日志格式
1.说一说 当你安装完nginx,输出的格式是比较乱的,这样我们就需要自己去定义一下,自己看着舒服的格式. 2.Nginx日志字段 $remote_addr 记录客户端IP,但她的值不是客户端提供的, ...
- Nginx 日志格式配置介绍
Nginx日志格式配置介绍 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 配置例子 log_format main '$ ...
- Nginx日志格式以及相关配置
一.Nginx日志格式以及参数说明log_format main '$remote_addr - $remote_user [$time_local] "$request" ' ...
- ELK 之三:Kibana 使用与Tomcat、Nginx 日志格式处理
一:kibana安装: kibana主要是搜索elasticsearch的数据,并进行数据可视化的展现,新版使用nodejs. 1.下载地址: https://www.elastic.co/downl ...
- rsyslog 日志格式和输出
日志格式: $EscapeControlCharactersOnReceive off #关闭rsyslog默认转译ASCII<32的所有怪异字符,包括换行符等 $template nginx- ...
- nginx日志格式字段
Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志 访问日志主要记录 ...
- nginx日志格式
日志格式 log_format main '$remote_addr - $remote_user [$time_local] $request ' '" ...
- Nginx日志格式log_format详解
PS:Nginx日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.类型.缓存大小等,一般放在Nginx的默认主配置文件/ ...
- nginx日志格式配置
我一向对日志这个东西有些许恐惧,因为在分析日志是需要记住不同服务器日志的格式,就拿提取ip这一项来说,有的服务器日志是在第一列,有的是第二列或则第三列等等.知道今天我才发现,日志格式是可以自定义配置的 ...
随机推荐
- Markdown中添加数学公式
平时写技术博客的时候数学公式还是用的挺多的,之前一直都是在本地写完数学公式之后做成图片添加到博客中,但是这样很不方便.所以现在介绍一种在Markdown中添加数学公式的方法. 使用MathJax引擎 ...
- 20135306 2.4 ELF文件格式分析
2.4 ELF文件格式分析 20135306 黄韧 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标 ...
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
转发方式:request.getRequestDispatcher().forward(); 重定向方式:response.sendRedirect(); 下面是HttpServletRespons ...
- 【bzoj4337】【Bjoi2015】树的同构
题解 无标号树的HASH: 找到树的重心,以重心为根求出括号序列: 由于树的重心最多只有两个,取字典序的最小括号序列HASH即可 树的括号序列$s_{u}="(s_{v_{1}},s_{v_ ...
- Linux日常维护命令
对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到.由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有 ...
- 数据科学的完整学习路径—Python版(转载)
时间 2015-01-29 14:14:11 数盟原文 http://dataunion.org/?p=9805 译者: Allen 从Python菜鸟到Python Kaggler的旅程(译注: ...
- MinGW安装设置
From:http://www.cnblogs.com/killerlegend/p/3746504.html Author:KillerLegend Date:2014.5.22 不得不吐槽一下学校 ...
- [USACO07NOV]挤奶的时间Milking Time
https://daniu.luogu.org/problemnew/show/2889 按右端点从小到大排序后DP dp[i] 到第i个时间段的最大产奶量 不能按左端点排序,第i段由第j段更新时,第 ...
- SQL语句(二十)—— 数据库安全性
数据库安全性 1. SQL Server 配置管理器 => 网络配置 MSSQLSERVER 协议,如果应用程序和SQL Server 在同一机器上,仅使用 Shared Memory (共享 ...
- Composer学习之————Ubuntu14.04下安装Composer
下载Composer: curl -sS https://getcomposer.org/installer | php 安装Composer: /usr/bin/php composer.phar ...