OpenMetadata 會將日誌文件自動存儲到指定的 log 目錄中,但目前無法透過官方提供的 openmetadata.yaml
配置文件直接實現 logrotate
功能。這導致當日誌文件(如 catalog.log
)不斷增長時,可能會造成存儲空間壓力和管理困難。
原本考慮利用 Linux 系統內建的 logrotate
工具解決這一問題,但發現一個限制:當 catalog.log
被刪除後,即使重新建立(如通過 touch catalog.log
),OpenMetadata 的應用程式無法繼續將日誌寫入新生成的文件。因此,無法使用傳統的 logrotate
方法將 catalog.log
重命名為例如 catalog-{yesterday-date}.log
並重新創建新的日誌文件。
解決方案
為了解決刪除 catalog.log
後無法繼續記錄日誌的問題,採用以下方法:
-
將現有的
catalog.log
文件內容複製到備份文件中。 -
清空原始
catalog.log
文件,而不是直接刪除。 -
壓縮備份文件,並刪除七天以上的舊備份。
以下是具體實現的 Bash 腳本:
#!/bin/bash
# 設定日誌文件路徑
LOG_FILE="/opt/openmetadata/logs/catalog.log"
BACKUP_DIR="/opt/openmetadata/logs"
TODAY=$(date +%Y-%m-%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
# 1. 複製當前的 catalog.log 為 catalog-{前一天日期}.log
cp "$LOG_FILE" "$BACKUP_DIR/catalog-$YESTERDAY.log"
# 2. 清空 catalog.log
> "$LOG_FILE"
# 3. 壓縮前一天的 log
gzip "$BACKUP_DIR/catalog-$YESTERDAY.log"
# 4. 刪除七天前的日誌備份
find "$BACKUP_DIR" -name "catalog-*.log.gz" -mtime +7 -exec rm {} \;
腳本說明
-
複製日誌文件: