1. 程式人生 > >【本人禿頂程式設計師】Nginx學習之自定義訪問日誌

【本人禿頂程式設計師】Nginx學習之自定義訪問日誌

←←←←←←←←←←←← 快,點關注!

寫在開始

日誌的重要性不言而喻,一般來說我們開發過程中會為每個專案定義自己的日誌格式以及儲存路徑。

就我們普通的JAVAWEB專案來說,重要的日誌一般輸出並存放在Tomcat的log目錄下,並區分日誌輸出級別。用於區分,查閱並統計相關日誌資訊。

當然,這不是重點,重點是很多公司,對於日誌的重要性似乎並不是那麼重視,當然這可能跟平臺本身有一定的關係。

日誌配置

其實分析Nginx日誌,可以得到很多有用的資料,響應耗時的url、請求時間,各個時間段的請求量,併發量。配合使用ELK日誌系統可以很好的呈現系統使用情況。

一般來說,常見的懶人通用日誌配置,多個專案公用一個access.log或者error.log,導致執行一段時間後日志文件特別大,幾G甚至幾十G的都有。

下面,主要來講一下Nginx日誌的正確配置方式。

日誌輸出格式:

#這個要配置在http中
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

專案配置:

limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;#查詢
#報告
server {
        listen       80;
        server_name  report.52itstyle.com;
        index login.jsp;
        access_log     /usr/local/nginx/logs/report.52itstyle.com.access.log access;
        #關閉靜態檔案的日誌列印
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|ico)?$ {
            expires      1d;
            access_log off;
            proxy_pass      http://report;
        }
        location / {
              limit_req zone=api_read burst=5;#請求限流,設定佇列
              proxy_pass      http://report;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
upstream report {
         fair;
         server  172.16.1.120:8882 weight=1  max_fails=2 fail_timeout=30s;
         server  172.16.1.120:8881 weight=1  max_fails=2 fail_timeout=30s;
}

以上配置,優化了幾點:

  • 單個專案配置屬於自己的日誌輸出路徑檔案
  • 排除無用的靜態檔案訪問日誌

歡迎大家加入粉絲群:963944895,群內免費分享Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫教學視訊及架構學習思維導圖

當然還有更加優化的方案,比如Nginx日誌按照日期格式輸出,但是Nginx本身是不支援此功能的,只能通過sheel指令碼自己進行切割。