nginx(tengine)訪問日誌分片
- 2019 年 10 月 12 日
- 筆記
說明
nginx日誌按天分片是運維的基本要求,不僅可以減小文件大小,方便檢索關鍵數據,也可以定時刪除過期的日誌。可是nginx和tengine默認並不支援文件分片,因此需要額外處理。
另外,日誌分片需要藉助 ngx_http_log_module 模組,默認通過yum安裝的nginx並不攜帶此模組,需要額外編譯。而tengine默認自帶了ngx_http_log_module模組,因此建議使用者直接源碼編譯tengine即可。
原理
日誌分片的原理是利用命名管道。linux下一切皆文件,因此創建命名管道作為linux的訪問日誌,由第三方程式連接命名管道,獲取數據後按時間進行分片。這裡的第三方程式既可以是由使用者自己編寫的處理程式,也可使用開源的軟體,如 cronolog。下文採用cronolog實現日誌分片。
步驟
- 創建命名管道:mkfifo /opt/logs/nginx/access.log
- 啟動cronolog:cronolog /opt/logs/nginx/access_%Y%m%.log < /opt/logs/nginx/access.log &
-
修改nginx配置文件:
http內
“`log_format main ‘$remote_addr – (remote_user [)time_local] "(request" ' ')status (body_bytes_sent ")http_referer" ‘
‘"(http_user_agent" ")http_x_forwarded_for"’;access_log /opt/logs/nginx/access.log main;
“` -
重啟nginx:nginx -s reload