【Nginx】如何格式化日志并推送到远程服务器?看完原来很简单!!

1,218 阅读3分钟

写在前面

Nginx作为最常用的反向代理和负载均衡服务器,被广泛的应用在众多互联网项目的前置服务中,很多互联网项目直接将Nginx服务器作为整个项目的流量入口。这就使得我们可以通过对Nginx服务器日志的分析,就可以分析出整个网站的访问总量、PV、UV、VV等信息。实际上,企业的业务线众多,很难使用一台Nginx服务器来代理所有的线上服务,这就导致企业会在线上部署多台Nginx服务器。而我们如果想分析所有Nginx服务器的总流量信息时,如果分别对每个Nginx服务器进行分析,再汇总所有的信息,一方面增加了分析的复杂度,另一方面也不好维护这些日志信息。所以,大部分企业会将这些日志信息统一汇总到某个数据存储集群中,以方便的进行数据存储、维护与分析统计。那么如何对Nginx的日志进行格式化并推送到远程的服务器呢?今天,我们就一起来探讨下这个问题。

配置Nginx

格式化Nginx日志并推送到远程服务器,其实很简单,我们只需要在Nginx服务器的配置文件nginx.conf中进行简单的配置即可。例如,我们可以在nginx.conf文件中添加如下配置。

log_format common "$remote_addr,$http_ip,$http_mac,$time_local,$status,$request_length,$bytes_sent,$body_bytes_sent,$http_user_agent,$http_referer,$request_method,$request_time,$request_uri,$server_protocol,$request_body,$http_token";
 
log_format main "$remote_addr,$http_ip,$http_mac,$time_local,$status,$request_length,$bytes_sent,$body_bytes_sent,$http_user_agent,$http_referer,$request_method,$request_time,$request_uri,$server_protocol,$request_body,$http_token";
	 
access_log  logs/access.log  common;
 
access_log syslog:server=192.168.1.100:9999,facility=local7,tag=nginx,severity=info main;
  map $http_upgrade $connection_upgrade {
	default upgrade;
	''      close;
 } 

上述配置是将Nginx的日志各项参数以逗号分隔的形式进行输出,同时将Nginx日志实时推送到192.168.1.100:9999上。

此时,我们只需要在192.168.1.100服务器上部署一个TCP或UDP服务,监听端口为9999,并在192.168.1.100服务器的防火墙开放9999端口。我们写的TCP或UDP服务就会实时接收到Nginx服务器发送过来的日志。

通过这种方式,我们就可以将Nginx日志实时收集到某个存储集群中,对Nginx日志进行统一存储、维护和分析。

好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!!

写在最后

如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!