Logstash收集json格式的Nginx日志3 min read

  • A+
所属分类:ELKstack

  

我们将 Nginx 日志转成 json 格式进行收集,这样在 kibana 界面可以更好的查看日志的详细信息,json格式每个值对应一个key,这样通过某个key,在kibana就可以更方便的查到自己想要的值了。

  

配置Nginx日志格式

  

在 Nginx 配置中我们定义的日志格式一般是这样的:

  1. # cat /usr/local/nginx/conf/nginx.conf  
  2. ......  
  3.    ......  
  4. http {  
  5. ......  
  6.    ......  
  7.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  8.                                  '$status $body_bytes_sent "$http_referer" '  
  9.                                 '"$http_user_agent" "$http_x_forwarded_for"';  
  10.   
  11.     access_log  logs/access.log  main;  
  12. ......  
  13.    ......  
  14. }  

 

现在我们修改一下 Nginx 的日志格式,将以上日志格式替换成如下的 json 格式:

  1. # 配置位置:http标签  
  2.     log_format access_json '{ "@timestamp""$time_local", '  
  3.         '"host""$server_addr",'  
  4.         '"clientip":"$remote_addr",'  
  5.         '"size":"$body_bytes_sent",'  
  6.         '"responsetime":$request_time,'  
  7.         '"upstreamtime":"$upstream_response_time",'  
  8.         '"upstreamhost":"$upstream_addr",'  
  9.         '"http_host":"$host",'  
  10.         '"url":"$uri",'  
  11.         '"domain":"$host",'  
  12.         '"xff":"$http_x_forwarded_for",'  
  13.         '"referer":"$http_referer",'  
  14.         '"status":"$status",'  
  15.   
  16.     access_log  /var/log/nginx/access_json.log  json;    # 日志路径根据需求定义  

 

解释:在以上的 Nginx 日志格式中,如:'"host": "$server_addr",' ,其中第一个双引号中的 “host”是一个key,key是自定义的,第二个双引号中的"$server_addr"是 Nginx 中自己支持的变量。以上只是部分key,如果还需要看更多的输出直接添加即可。

 

配置Logstash

   

配置的 logstash 日志收集和推送到 elasticsearch(以es地址为 192.168.56.31:9200 为例) 配置文件如下:

  1. input {  
  2.     file {  
  3.         path => "/var/log/nginx/access_json.log"  
  4.         type => "logstash-nginx-log-node3"  
  5.         start_position => "beginning"  
  6.         stat_interval => "2"  
  7.         codec => "json"      # 日志如果是json格式的话需要配置对json解析的编码  
  8.     }  
  9. }  
  10.   
  11. output {  
  12.     elasticsearch {  
  13.         hosts => ["192.168.56.31:9200"]  
  14.         index => "logstash-nginx-log-node3-%{+YYYY.MM.dd}"  
  15.     }  
  16. }  

 

配置好之后重启 logstash ,在 kibana 中添加索引即可。

 

zhaoyulin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: