欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Nginx 日志改成 JSON 格式的方法

程序员文章站 2022-09-25 23:14:32
nginx 日志默认为普通文本的格式,例如,下面是 nginx 的一行访问日志: 10.88.122.105 - - [02/dec/2017:09:15:04...

nginx 日志默认为普通文本的格式,例如,下面是 nginx 的一行访问日志:

10.88.122.105 - - [02/dec/2017:09:15:04 +0800] "get /js/pagination.js http/1.1" 304 0 "http://10.88.105.20:8063/stockrecommand.html" "mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/7.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)" "-" 0.000

为了便于利用 elastic stack 日志平台收集展示 nginx 的日志,可以将 nginx 的日志改成 json 的格式。修改后的 json 日志格式如下所示:

{ "@timestamp": "12/dec/2017:14:30:40 +0800", "remote_addr": "10.88.122.108", "referer": "-", "request": "get / http/1.1", "status": 304, "bytes":0, "agent": "mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/63.0.3239.84 safari/537.36", "x_forwarded": "-", "up_addr": "-","up_host": "-","up_resp_time": "-","request_time": "0.000" }

为了修改 nginx 的日志格式改成 json,需要修改 nginx 的配置文件,笔者 nginx 的配置文件为 /usr/local/nginx/conf/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';
  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 格式:

access_log logs/access.log log_json;

修改 nginx 的配置,重启 nginx ,便可以看到 json 格式的日志,重启 nginx:

nginx -s reload

以上这篇nginx 日志改成 json 格式的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。