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 - 日志格式及输出的更多相关文章

  1. 运维技巧-Nginx日志格式

    1.说一说 当你安装完nginx,输出的格式是比较乱的,这样我们就需要自己去定义一下,自己看着舒服的格式. 2.Nginx日志字段 $remote_addr 记录客户端IP,但她的值不是客户端提供的, ...

  2. Nginx 日志格式配置介绍

    Nginx日志格式配置介绍   by:授客  QQ:1033553122   测试环境 CentOS 6.5-x86_64 nginx-1.10.0 配置例子 log_format  main  '$ ...

  3. Nginx日志格式以及相关配置

    一.Nginx日志格式以及参数说明log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' ...

  4. ELK 之三:Kibana 使用与Tomcat、Nginx 日志格式处理

    一:kibana安装: kibana主要是搜索elasticsearch的数据,并进行数据可视化的展现,新版使用nodejs. 1.下载地址: https://www.elastic.co/downl ...

  5. rsyslog 日志格式和输出

    日志格式: $EscapeControlCharactersOnReceive off #关闭rsyslog默认转译ASCII<32的所有怪异字符,包括换行符等 $template nginx- ...

  6. nginx日志格式字段

    Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志 访问日志主要记录 ...

  7. nginx日志格式

    日志格式 log_format main '$remote_addr - $remote_user [$time_local] $request '                    '" ...

  8. Nginx日志格式log_format详解

    PS:Nginx日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.类型.缓存大小等,一般放在Nginx的默认主配置文件/ ...

  9. nginx日志格式配置

    我一向对日志这个东西有些许恐惧,因为在分析日志是需要记住不同服务器日志的格式,就拿提取ip这一项来说,有的服务器日志是在第一列,有的是第二列或则第三列等等.知道今天我才发现,日志格式是可以自定义配置的 ...

随机推荐

  1. 第五周linux学习笔记

    第五章 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个. 它为用户空间提供了一种硬件的抽象接口. 系统调用保 证了系统的毡定和安全. 在第 3 ...

  2. kibana使用(ELK)、Lucene 查询语法

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

  3. android:onClick="xxx"

    一般监听OnClickListener事件,我们都是通过Button button = (Button)findViewById(....); button.setOClickLisener....这 ...

  4. bzoj2300【HAOI2011】防线修建

    题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...

  5. ASP.NET MVC3 入门指南之数据验证[源码RAR下载]

    http://www.cnblogs.com/BingoLee/archive/2011/12/23/2298822.html 前言: 无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...

  6. 【Asp.net入门5-02】创建数据模型和存储库

  7. Nginx+Tomcat+Memcache实现负载均衡及Session共享

    第一部分 环境介绍 部署环境: Host1:Nginx.Memcached.Tomcat1 Host2:Tomcat2 Tomcat_version:8.0.38 第二部分 Nginx+Tomcat实 ...

  8. day6 方法

    1.方法是一段可重复调用的代码段,今天学习的方法可以由主方法直接调用,所以加入public static关键字修饰. 2.方法的重载为方法名相同,参数的类型或个数不同.

  9. 重定向(Redirect)相关的几个问题

    转载自:http://hi.baidu.com/fboosjgvuvckore/item/405a1cd7be2c36e3795daa8b 此次挂接用户中心,交互大都通过重定向(Redirect)实现 ...

  10. 科学计算三维可视化---Mlab基础(改变物体的外观颜色)

    import numpy as np from mayavi import mlab #建立数据 x,y = np.mgrid[-::200j,-::200j] z = *np.sin(x*y)/(x ...