如何使用Nginx日志流模块?

Nginx

1 基础知识

1.1 模块的作用

ngx_stream_log_module用户向日志输出特定的自定义格式

1.2 使用范例

log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';

access_log /spool/logs/nginx-access.log basic buffer=32k;

1.3 支持的指令

1.3.1 指定日志的路径

1.3.1.1 语法

access_log path format [buffer=size] [gzip[=level]] [if=condition];
access_log off;

– path,参数定义日志的写入路径
– format,参数定义日志的格式
– 其他参数,format后面的参数定义指定的配置
– buffer和gzip参数,则将缓冲写入日志
– gzip参数将在写入前压缩缓冲的数据,压缩级别1-9,1最快,压缩最少,9最慢,最佳压缩(依赖zlib库)
– 缓冲区默认大小为64K字节,压缩级别默认为1
– if参数为条件记录,如果计算结果为0或者空字符串,则不产生记录
1.3.1.2 默认值

access_log off;

注:该默认值为关闭
1.3.1.3 上下文

stream,server

1.3.2 指定日志格式

1.3.2.1 语法

log_format name [escape=default|json|none] string ...;

– escape的参数有default,json,none
– 设置default参数,忽略功能被启动
– 设置none参数,忽略功能被禁用
1.3.2.2 默认值

-

1.3.2.3 上下文

stream

1.3.2.4 使用范例

log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

1.3.3 定义缓冲

1.3.3.1 语法

open_log_file_cache max=N [inactive=itme] [min_uses=N] [valid=time];
open_log_file_cache off;

– 定义缓存,用于存储名称中包含变量的常用日志文件描述符
– max,参数设置缓存中最大描述符数,如果缓存满,则最近最少使用的描述符将被关闭
– inactive,参数如果期间没有访问权限,则关闭缓存描述符的舌尖,默认10秒
– min_uses,参数定义inactive参数定义的时间内最少文件的使用次数,使缓存保持打开状态,默认1
– valid,参数设置应检查文件是否存在同名的时间,默认60秒
– off,参数禁用缓存功能
1.3.3.2 默认值

open_log_file_cache off;

1.3.3.3 上下文

stream, server

1.3.3.4 使用范例

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

2 最佳实践

2.1 环境配置

请参阅以下链接配置Nginx带用户唯一标识的反向代理环境,
https://www.cmdschool.org/archives/2117
注:以上环境不是必须的,任意的nginx都可以定义特定的变量,请根据模块查询特定的变量。

2.2 自定义Nginx日志

2.2.1 加入特定的变量

vim /etc/nginx/nginx.conf

加入如下定义:

http {
    [...]
    log_format  main  '$remote_addr - $remote_user $uid_got [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    [...]
}

注:留意变量$uid_got,以上变量只是一个范例,请根据实际的情况定义变量。

2.2.2 重载服务使配置生效

systemctl reload nginx

2.2.3 验证配置

tail -f /var/log/nginx/access.log

可见如下提示:

14.30.4.14 - - uid=45CCA8C0DFFB4E5BFC193D5A02070203 [18/Jul/2018:16:36:17 +0800] "GET /favicon.ico HTTP/1.1" 404 564 "https://www.cmdschool.org/archives/2117" "Mozilla/5.0 (Linux; Android 6.0; DIG-AL00 Build/HUAWEIDIG-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36" "-"

注:留意输出的“uid=45CCA8C0DFFB4E5BFC193D5A02070203”

参阅文档:
=============

模块的官方文档
————-
http://nginx.org/en/docs/stream/ngx_stream_log_module.html
http://nginx.org/en/docs/http/ngx_http_log_module.html

模块参考的变量
————-
http://nginx.org/en/docs/stream/ngx_stream_core_module.html#var_protocol

没有评论

发表评论

Nginx
如何解决Nginx代理传大文件不同步问题?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到用户透过反向代理上传大文件提示用户已经完成 …

Nginx
如何实现Nginx根据路径分配代理?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境遇到需要根据URI路径选择走哪个代理服务器的案 …

Nginx
如何实现Nginx返回字符串或变量值?

1 前言 一个问题,一篇文章,一出故事。 笔者测试环境中经常需要返回Nginx变量的具体值,于是整理 …