溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nginx 日志怎么定時切割

發布時間:2021-07-12 11:00:40 來源:億速云 閱讀:195 作者:chen 欄目:大數據
# nginx 日志怎么定時切割

## 為什么需要日志切割

Nginx作為高性能的Web服務器,默認會將所有訪問日志和錯誤日志寫入單個文件(如`access.log`和`error.log`)。長期運行會導致:

1. **日志文件過大**:可能占用數十GB磁盤空間
2. **檢索困難**:大文件難以用文本工具打開分析
3. **影響性能**:頻繁寫入大文件可能降低I/O效率
4. **維護不便**:無法按時間維度歸檔歷史日志

日志切割(Log Rotation)通過定期分割、壓縮和歸檔日志文件解決這些問題。

---

## 手動切割方案

### 1. 使用mv+reload基礎方法

```bash
# 重命名當前日志文件
mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%Y%m%d).log

# 發送USR1信號讓Nginx重新打開日志文件
kill -USR1 $(cat /var/run/nginx.pid)

缺點:需要手動操作,不適合生產環境


2. 使用logrotate工具

Linux系統自帶的logrotate是更專業的解決方案:

配置示例(/etc/logrotate.d/nginx)

/var/log/nginx/*.log {
    daily                      # 按天切割
    missingok                 # 日志不存在時不報錯
    rotate 30                 # 保留30個歷史版本
    compress                  # 使用gzip壓縮
    delaycompress             # 延遲一天壓縮
    notifempty                # 空文件不切割
    sharedscripts             # 所有日志處理完后執行腳本
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
    dateext                   # 使用日期作為后綴
    dateformat -%Y%m%d        # 日期格式
}

關鍵參數說明

參數 作用
size 100M 按大小切割
hourly 每小時切割(需安裝cronhourly)
weekly 按周切割
monthly 按月切割
create 0640 www-data adm 設置新日志文件權限

測試配置

# 調試模式測試(不實際執行)
logrotate -d /etc/logrotate.d/nginx

# 強制立即運行
logrotate -vf /etc/logrotate.d/nginx

自動化定時任務

1. 使用crontab

# 每天凌晨執行
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx

2. 使用systemd timer(現代Linux系統)

創建/etc/systemd/system/nginx-logrotate.timer

[Unit]
Description=Daily rotation of Nginx logs

[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target

服務單元/etc/systemd/system/nginx-logrotate.service

[Unit]
Description=Nginx log rotation

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.d/nginx

啟用定時器:

systemctl enable --now nginx-logrotate.timer

高級配置技巧

1. 按小時切割

/var/log/nginx/*.log {
    hourly
    rotate 24
    dateext
    dateformat -%Y%m%d%H
    ...
}

需確保/etc/cron.hourly/有logrotate任務。

2. 日志文件權限控制

create 0640 www-data adm

3. 自定義歸檔路徑

olddir /var/log/nginx/archive/

4. 日志分析前處理

prerotate
    /usr/bin/nginx-log-analyser /var/log/nginx/access.log > /tmp/last_report
endscript

常見問題解決

Q1:切割后nginx不寫入新日志

解決方法: 1. 確認postrotate腳本正確執行 2. 檢查nginx進程用戶有日志目錄寫入權限 3. 使用lsof | grep nginx確認文件描述符是否釋放

Q2:磁盤空間不足

建議

rotate 7
size 500M

Q3:時區問題導致日期錯誤

# 在logrotate配置前添加
export TZ=Asia/Shanghai

性能優化建議

  1. 延遲壓縮:使用delaycompress避免高峰時段CPU占用
  2. 異步處理:對于大流量站點,考慮先mv日志再異步壓縮
  3. 分布式日志:高并發環境建議使用ELK等集中式日志方案

總結

Nginx日志切割最佳實踐組合: 1. logrotate作為核心工具 2. crontab/systemd timer實現自動化 3. 合理的保留策略(時間+大小雙重限制) 4. 完善的監控(日志增長報警)

通過合理配置,可以確保: ? 日志文件大小可控 ? 歷史數據可追溯 ? 系統性能不受影響 ? 存儲空間高效利用 “`

(全文約1300字)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女