当前位置: 首页 > news >正文

Nginx 日志输出配置json格式

nginx日志输出配置json格式


nginx服务器日志相关指令主要有两条:

(1) 一条是log_format,用来设置日志格式

(2) 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。

log_format指令用来设置日志的记录格式,它的语法如下:
log_format name format {format ...} 其中name表示定义的格式名称,format表示定义的格式样

网上统一方法: 修改nginx.conf配置文件

http {include       mime.types;default_type  application/octet-stream;charset  utf-8;# 原有日志格式,不能注释或者去掉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';# json日志格式log_format log_json '{"@timestamp": "$time_local", ''"remote_addr": "$remote_addr", ''"referer": "$http_referer", ''"request": "$request", ''"status": $status, ''"bytes": $body_bytes_sent, ''"agent": "$http_user_agent", ''"x_forwarded": "$http_x_forwarded_for", ''"up_addr": "$upstream_addr",''"up_host": "$upstream_http_host",''"up_resp_time": "$upstream_response_time",''"request_time": "$request_time"'' }';access_log  logs/access.log log_json; # 引用日志格式名称(省略内容)
}

在 Nginx 的配置文件nginx.conf中,我们定义了两种的日志格式:main和log_json,其中main为普通的文本格式,log_json为 json 格式。

log_json其实就是手工构造一个 json 字符串。定义了 json 的日志格式后,便可以指定 access log 为 json 格式,修改 Nginx 的配置,重启 Nginx ,便可以看到 json 格式的日志,重启 Nginx。

附加:可能遇到的问题

背景:
  因为我这边是通过nginx去代理了很多域名,所以会有很多平台访问的日志,通过在nginx.conf主配置文件增加  include vhosts/*.conf; 导入主机配置,所以会存在一个server段中只能有一个名称的问题。 

正确操作:

修改nginx.conf配置文件

[root@elk-nginx-01 conf]# cd /data/services/nginx/conf/
[root@elk-nginx-01 conf]# pwd
/data/services/nginx/conf
[root@elk-nginx-01 conf]# ll
总用量 72
-rw-r--r-- 1 root root 1077 9月   3 09:45 fastcgi.conf
-rw-r--r-- 1 root root 1077 9月   3 09:45 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 9月   3 09:45 fastcgi_params
-rw-r--r-- 1 root root 1007 9月   3 09:45 fastcgi_params.default
-rw-r--r-- 1 root root 2837 9月   3 09:45 koi-utf
-rw-r--r-- 1 root root 2223 9月   3 09:45 koi-win
-rw-r--r-- 1 root root 5231 9月   3 09:45 mime.types
-rw-r--r-- 1 root root 5231 9月   3 09:45 mime.types.default
-rw-r--r-- 1 root root 3729 9月   3 15:49 nginx.conf
-rw-r--r-- 1 root root 2656 9月   3 13:59 nginx.conf-bak0903
-rw-r--r-- 1 root root 2656 9月   3 09:45 nginx.conf.default
-rw-r--r-- 1 root root  636 9月   3 09:45 scgi_params
-rw-r--r-- 1 root root  636 9月   3 09:45 scgi_params.default
drwxr-xr-x 2 root root  134 9月   3 11:34 sslkeys
-rw-r--r-- 1 root root  664 9月   3 09:45 uwsgi_params
-rw-r--r-- 1 root root  664 9月   3 09:45 uwsgi_params.default
drwxr-xr-x 2 root root   87 9月   3 16:53 vhosts
-rw-r--r-- 1 root root 3610 9月   3 09:45 win-utf
[root@elk-nginx-01 conf]# vim nginx.confhttp {include       mime.types;default_type  application/octet-stream;charset  utf-8;# 原有日志格式,不能注释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';# json日志格式log_format json '{"@timestamp": "$time_local", ''"remote_addr": "$remote_addr", ''"referer": "$http_referer", ''"request": "$request", ''"status": $status, ''"bytes": $body_bytes_sent, ''"agent": "$http_user_agent", ''"x_forwarded": "$http_x_forwarded_for", ''"up_addr": "$upstream_addr",''"up_host": "$upstream_http_host",''"up_resp_time": "$upstream_response_time",''"request_time": "$request_time"'' }';#导入主机配置include vhosts/*.conf;(省略内容)
}
保存退出![root@elk-nginx-01 conf]# pwd
/data/services/nginx/conf
[root@elk-nginx-01 conf]# cd vhosts/
[root@elk-nginx-01 vhosts]# ll
总用量 12
-rw-r--r-- 1 yfbkf yfbkf  921 9月   3 15:37 gonggao.conf
-rw-r--r-- 1 yfbkf yfbkf 1482 9月   3 16:50 gongdan.conf
-rw-r--r-- 1 yfbkf yfbkf 1151 9月   3 14:42 gongmo.conf

然后重启nginx

总结:
1、原有的日志格式不能注释或者去掉,只能新增一个log_format
2、新增自定义一份日志记录格式,需要注意,log_format指令设置的名称在配置文件中是不能重复的(比如我json日志格式名称 json)
3、原有的日志格式如果调整了,需要在log后加上名称才生效

Nginx日志常用参数详解


    log_format json '{"@timestamp":"$time_iso8601",''"scheme":"$scheme",''"http_referer":"$http_referer",''"args":"$args",''"http_user_agent":"$http_user_agent",''"remote_addr":"$remote_addr",''"hoste":"$host",''"server_name":"$server_name",''"server_protocol":"$server_protocol",''"request_method":"$request_method",''"request_uri":"$request_uri",''"uri":"$uri",''"request_length":"$request_length",''"body_byte_sent": "$body_bytes_sent",''"request_time":"$request_time",''"server_addr":"$server_addr",''"status": $status,''"bytes_sent":"$bytes_sent",''"upstream_addr":"$upstream_addr",''"upstream_status":"$upstream_status",''"upstream_connect_time":"$upstream_connect_time",''"upstream_response_time":"$upstream_response_time",''"request_id":"$request_id"''}';可以加上这些:
$request_filename:当前请求的文件路径,由root或alias指令与URI请求生成。
$http_cookie:客户端cookie信息
$http_host #请求地址,即浏览器中你输入的地址(IP或域名)
$server_port:请求到达服务器的端口号。
$connection_requests 当前通过一个连接获得的请求数量。
  • $remote_addr:记录访问网站的客户端地址

$remote_user:远程客户端用户名称
$time_local:记录访问时间与时区
$request:表示request请求头的行

  • $status:http状态码,记录请求返回的状态,例如:200、404、301等
  • $body_bytes_sent:服务器发送给客户端的响应body字节数,发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。


$http_referer:记录此次请求是从哪个链接访问过来的,可以根据refer进行防盗链设置
$http_user_agent:记录客户端访问信息,例如:浏览器,手机客户端等

  • $http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

$http_host 请求地址,即浏览器中你输入的地址(IP或域名)
$ssl_protocol:SSL协议版本
$ssl_cipher:交换数据中的算法
$upstream_status:upstream状态,比如成功是200
$upstream_addr:当ngnix做负载均衡时,可以查看后台提供真实服务的设备
$upstream_response_time:请求过程中,upstream响应时间

  • $request_time:整个请求的总时间,请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

$args:这个变量等于请求行中的参数,同$query_string
$content_length:请求头中的Content-length字段。
$content_type:请求头中的Content-Type字段。
$document_root:当前请求在root指令中指定的值。
$host:请求主机头字段,否则为服务器名称。
$http_user_agent:客户端agent信息
$http_cookie:客户端cookie信息
$limit_rate:这个变量可以限制连接速率。
$request_method:客户端请求的动作,通常为GET或POST。
$remote_addr:客户端的IP地址。
$remote_port:客户端的端口。
$remote_user:已经经过Auth Basic Module验证的用户名。
$request_filename:当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme:HTTP方法(如http,https)。
$server_protocol:请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr:服务器地址,在完成一次系统调用后可以确定这个值。
$server_name:服务器名称。
$server_port:请求到达服务器的端口号。
$request_uri:包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri:不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri:与$uri相同。 

相关文章:

  • ⾃定义类型:联合和枚举
  • 【Web】记录Polar靶场<简单>难度题一遍过(全)
  • 电脑分辨率怎么调,电脑分辨率怎么调整
  • 【面试题】RocketMQ怎么处理消息积压?
  • JavaScript是如何实现页面渲染的
  • ChatGPT技巧分享:如何用AI提升学术写作水平
  • sftp相关
  • Open CASCADE学习|将双曲线转换为B样条曲线
  • git仓库太大只下载单个文件或文件夹
  • 突破编程_前端_JS编程实例(分割窗体组件)
  • HarmonyOS 应用开发之RelationalStore开发
  • NoSQL之 Redis配置
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
  • 在Windows的Docker上部署Mysql服务
  • Python数据结构与算法——数据结构(栈、队列)
  • 网络传输文件的问题
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • Apache的基本使用
  • Git初体验
  • HTTP--网络协议分层,http历史(二)
  • node学习系列之简单文件上传
  • PHP变量
  • React 快速上手 - 07 前端路由 react-router
  • redis学习笔记(三):列表、集合、有序集合
  • spring boot下thymeleaf全局静态变量配置
  • Spring核心 Bean的高级装配
  • SQLServer插入数据
  • 阿里云Kubernetes容器服务上体验Knative
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 试着探索高并发下的系统架构面貌
  • 怎么把视频里的音乐提取出来
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #include<初见C语言之指针(5)>
  • #pragma预处理命令
  • $.ajax中的eval及dataType
  • (003)SlickEdit Unity的补全
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .net mvc部分视图
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET开源快速、强大、免费的电子表格组件
  • .net中调用windows performance记录性能信息