【Nginx】如何格式化日誌並推送到遠端伺服器?看完原來很簡單!!

冰河團隊發表於2020-07-16

寫在前面

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日誌進行統一儲存、維護和分析。

好了,今天就聊到這兒吧!別忘了點個贊,給個在看和轉發,讓更多的人看到,一起學習,一起進步!!

寫在最後

如果你覺得冰河寫的還不錯,請微信搜尋並關注「 冰河技術 」微信公眾號,跟冰河學習高併發、分散式、微服務、大資料、網際網路和雲原生技術,「 冰河技術 」微信公眾號更新了大量技術專題,每一篇技術文章乾貨滿滿!不少讀者已經通過閱讀「 冰河技術 」微信公眾號文章,吊打面試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨幹!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公眾號吧,每天更新超硬核技術乾貨,讓你對如何提升技術能力不再迷茫!

相關文章