,http {, log_format json_combined escape=json '{ "@timestamp": "$time_iso8601", "host": "$remote_addr", "clientip": "$remote_addr", "size": $body_bytes_sent, "responsetime": "$request_time", "upstreamtime": "$upstream_response_time", "url": "$uri", "method": "$request_method", "status": "$status", "http_referer": "$http_referer", "http_user_agent": "$http_user_agent"}';, access_log /var/log/nginx/access.log json_combined;,},
“nginx中用JSON格式记录日志的配置示例
在Nginx中,使用JSON格式记录日志可以通过配置log_format
和access_log
指令来实现,以下是具体的配置示例:
1. 修改nginx.conf配置文件
http { include mime.types; default_type application/octetstream; charset utf8; # 原有日志格式,不能注释或者去掉 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; # 引用日志格式名称 (省略内容) }
2. 解释配置项
配置项 | 解释 |
log_format log_json | 定义一个新的日志格式名称为log_json ,并设置其格式为JSON字符串。 |
"@timestamp": "$time_local" | 添加时间戳字段。$time_local 表示本地时间。 |
"remote_addr": "$remote_addr" | 记录客户端IP地址。$remote_addr 表示客户端的IP地址。 |
"referer": "$http_referer" | 记录引用页面。$http_referer 表示从哪个页面链接访问过来的。 |
"request": "$request" | 记录请求行。$request 表示请求的URL和方法。 |
"status": $status | 记录HTTP状态码。$status 表示HTTP响应状态码。 |
"bytes": $body_bytes_sent | 记录发送给客户端的字节数。$body_bytes_sent 表示发送给客户端的字节数(不包括响应头的大小)。 |
"agent": "$http_user_agent" | 记录用户代理信息。$http_user_agent 表示客户端浏览器的相关信息。 |
"x_forwarded": "$http_x_forwarded_for" | 记录通过代理服务器的客户端IP地址。$http_x_forwarded_for 表示通过代理服务器的客户端IP地址。 |
"up_addr": "$upstream_addr" | 记录上游服务器地址。$upstream_addr 表示上游服务器的地址。 |
"up_host": "$upstream_http_host" | 记录上游服务器的主机名。$upstream_http_host 表示上游服务器的主机名。 |
"up_resp_time": "$upstream_response_time" | 记录上游服务器的响应时间。$upstream_response_time 表示上游服务器的响应时间。 |
"request_time": "$request_time" | 记录请求处理时间。$request_time 表示请求处理时间。 |
3. 配置完成后的操作
完成上述配置后,需要重启Nginx服务以使更改生效:
sudo systemctl restart nginx
FAQs
问题1: JSON格式的日志有什么优点?
答:JSON格式的日志具有结构化的特点,便于解析和处理,通过将日志记录为JSON格式,可以方便地使用各种日志分析工具(如ELK Stack)进行集中收集、存储和分析,提高日志管理的效率和效果,JSON格式的日志也更易于与其他系统进行数据交换和集成。
问题2: 如何在Nginx中同时记录多种格式的日志?
答:在Nginx中,可以通过定义多个log_format
指令来指定不同的日志格式,然后在access_log
指令中使用这些格式名称来分别记录不同格式的日志,除了上述的JSON格式日志外,还可以定义一个名为combined
的日志格式,并在access_log
指令中同时使用这两种格式:
log_format combined '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time'; access_log logs/access.log combined; access_log logs/access.json log_json;
http { # 日志格式定义 log_format json_log '{"@timestamp":"$time_iso8601","remote_addr":"$remote_addr","remote_user":"$remote_user","request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","http_referer":"$http_referer","http_user_agent":"$http_user_agent","request_time":"$request_time","upstream_response_time":"$upstream_response_time","upstream_status":"$upstream_status","upstream_host":"$upstream_host","upstream_port":"$upstream_port","upstream_certificate":"$upstream_certificate","upstream_negotiated_headers":"$upstream_negotiated_headers","upstream_response_headers":"$upstream_response_headers","upstream_connect_time":"$upstream_connect_time","upstream_start_time":"$upstream_start_time","upstream_end_time":"$upstream_end_time","error":"$error","http_x_forwarded_for":"$http_x_forwarded_for","server_addr":"$server_addr","server_port":"$server_port","server_name":"$server_name","referral":"$referral","request_length":"$request_length","response_length":"$response_length","ssl_cipher":"$ssl_cipher","ssl_session_reused":"$ssl_session_reused","x_forwarded_for":"$x_forwarded_for","client_port":"$client_port","client_max_body_size":"$client_max_body_size","http_cookie":"$http_cookie","request_id":"$request_id","server_signature":"$server_signature","connection":"$connection","http_host":"$http_host","x_real_ip":"$x_real_ip","x_forwarded_proto":"$x_forwarded_proto","server_tokens":"$server_tokens","gzip_ratio":"$gzip_ratio","geoip_country_code":"$geoip_country_code","geoip_country_name":"$geoip_country_name","geoip_region_code":"$geoip_region_code","geoip_region_name":"$geoip_region_name","geoip_city_name":"$geoip_city_name","geoip_postal_code":"$geoip_postal_code","geoip_latitude":"$geoip_latitude","geoip_longitude":"$geoip_longitude","geoip_city_confidence":"$geoip_city_confidence","geoip_region_confidence":"$geoip_region_confidence","geoip_country_confidence":"$geoip_country_confidence","geoip_ip_version":"$geoip_ip_version","geoip_asn":"$geoip_asn","geoip_as":"$geoip_as","geoip_domain":"$geoip_domain","geoip_is_anonymous":"$geoip_is_anonymous","geoip_is_private":"$geoip_is_private","geoip_org":"$geoip_org","geoip_continent_code":"$geoip_continent_code","geoip_continent_name":"$geoip_continent_name"}'; # 配置监听端口 server { listen 80; server_name localhost; # 配置日志记录 access_log /var/log/nginx/access.log json_log; # 其他配置... } }
是一个使用JSON格式记录日志的Nginx配置示例,在这个配置中,我们定义了一个名为json_log
的日志格式,其中包含了多种日志字段,如请求时间、客户端地址、用户代理、状态码等,然后在server
块中,我们通过access_log
指令指定了日志文件的路径和格式。
这个JSON格式是一个示例,你可能需要根据实际需求调整字段和值,Nginx的版本和配置可能需要你安装额外的模块来支持JSON格式的日志。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1170510.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复