閱讀914 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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      https://report;
        }
        location / {
              limit_req zone=api_read burst=5;#請求限流,設置隊列
              proxy_pass      https://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;
}

以上配置,優化了幾點:

  • 單個項目配置屬於自己的日誌輸出路徑文件
  • 排除無用的靜態文件訪問日誌

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

小站:https://blog.52itstyle.com

最後更新:2017-05-02 18:00:50

  上一篇:go 三草兩木微商分銷係統開發定製
  下一篇:go 追捧熱潮過後,移動醫療正經曆“大洗牌” 33億押注能否賭贏?