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请求生成。
$upstream_response_time:请求过程中,upstream响应时间
$http_cookie:客户端cookie信息
$http_host #请求地址,即浏览器中你输入的地址(IP或域名)
$server_port:请求到达服务器的端口号。
$remote_addr:记录访问网站的客户端地址
$remote_user:远程客户端用户名称
$time_local:记录访问时间与时区
$request:表示request请求头的行
$status:http状态码,记录请求返回的状态,例如:200、404、301等
$body_bytes_sent:服务器发送给客户端的响应body字节数
$http_referer:记录此次请求是从哪个链接访问过来的,可以根据refer进行防盗链设置
$http_user_agent:记录客户端访问信息,例如:浏览器,手机客户端等
$http_x_forwarded_for:当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了相关的http_x_forwarded_for设置
$http_host #请求地址,即浏览器中你输入的地址(IP或域名)
$ssl_protocol:SSL协议版本
$ssl_cipher:交换数据中的算法
$upstream_status:upstream状态
$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相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS移动应用实时查看运行日志的最佳实践

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 📝 摘要: 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具,我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

目标检测——工业安全生产环境违规使用手机的识别

一、重要性及意义 首先,工业安全生产环境涉及到许多复杂的工艺和设备,这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机,不仅可能分散其注意力,降低工作效率,更可能因操作失误导致…

云原生技术赋能AI绘图:Stable Diffusion在腾讯云的部署与应用新篇章

摘要 随着信息技术的飞速发展和数字化转型的深入推进,云原生架构已成为企业数字化转型的重要基石。Docker容器、Serverless和微服务等技术作为云原生的核心组成部分,正在不断推动着企业应用架构的革新与升级。本文旨在总结近期在云原生实践、容器技术、…

混合现实(MR)开发工具

混合现实(MR)开发工具是一系列软件和框架,它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法(FCFS) 二、短作业优先调度算法(SJF) 三、高响应比优先调度算法(HRRN) 四、轮转调度算法(RR) 五、最早截至时间优先算法(EDF&#…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 (1)关于CPU (2)关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件,广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面,3ds Max 2025也提供了丰富的增强功能,以满足用户在不同制作需求中的要求。 3ds Max 2025…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1)POSIX信号量和System V信号量区别 常用的是POSIX信号量,使用起来更加方便,而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的,而System V标准的信号量并不是,Posix通过sem_…

外包干了25天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL,如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…

机器学习: 绪论(基础概念)

文章目录 一、机器学习做什么二、机器学习的基本术语2.1、数据相关2.1.1、数据集2.1.2、特征(Feature)2.1.3、样本空间(Sample Space) 2.2、任务相关2.2.1、分类2.2.2、回归2.2.3、聚类2.2.4、监督学习和无监督学习 三、机器学习思…

智乃想考一道鸽巢原理

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

VSCode 设置vue2模板

点击设置 > 用户代码片段 > 输入Vue &#xff08;打开vue.json&#xff09;> 将代码复制内 "Print to console": {"prefix": "<","body": ["<template>"," <div class$1></div>"…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

【随笔】Git -- 高级命令(中篇)(七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

文本直接生成2分钟视频,即将开源模型StreamingT2V

Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但在高速运…

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

深入剖析Xen与KVM虚拟化技术及其架构特点

引言 在现代数据中心与云计算领域中&#xff0c;虚拟化技术已经成为提升资源利用率、增强灵活性与可扩展性的重要基石。其中&#xff0c;Xen与KVM作为两种备受瞩目的开源虚拟化解决方案&#xff0c;分别以其独特的设计理念与技术创新引领着行业的进步与发展。Xen源自剑桥大学的…

基于深度学习的停车场车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 上图测试结果如下图所示&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分核心程序 image imread(image_test\test.jpg); image2 image;%图…

第21章-直连路由和静态路由

1. 直连路由 1&#xff09;定义&#xff1a;指路由器接口直接相连的网段的路由&#xff1b; 2&#xff09;特点&#xff1a; ① 不需要特别的配置&#xff0c;双UP(物理层数据链路层)&#xff1b; ② 在路由器的接口上配置IP地址即可&#xff1b; ③ 开机自动产生&#xff1b; …