清理 OpenResty Edge Log Server 資料庫資料

OpenResty Edge Log Server 資料庫主要儲存錯誤日誌、WAF 日誌和動態指標資料等。其中,WAF 日誌和動態指標資料通常會佔用較大空間。這些資料均採用時序資料庫進行儲存。本文將詳細介紹如何調整時序資料庫策略並進行資料清理。

預設時序表概覽

表名用途Chunk 間隔資料保留期
errlog_tsdb錯誤日誌7 天1 個月
waf_request_tsdbWAF 命中請求7 天1 個月
waf_matches_tsdbWAF 命中詳情7 天2 個月
events事件記錄7 天1 個月
cc_log_tsdb限速請求資訊1 天7 天
_dymetrics_動態指標資料3 天1 個月

資料庫操作步驟

登入資料庫

/usr/local/openresty-postgresql12/bin/psql -h 127.0.0.1 -p 5432 -U postgres -d or_edge_log_server

查詢時序表大小

基礎查詢:

SELECT table_name, table_size, total_size
FROM timescaledb_information.hypertable
WHERE table_schema='public' AND total_size IS NOT NULL;

增強可讀性的查詢:

SELECT table_name, table_schema, pg_size_bytes(total_size) / 1024 / 1024 AS total_size_mb
FROM timescaledb_information.hypertable
WHERE total_size IS NOT NULL
ORDER BY total_size DESC;

檢視時序庫清理策略

SELECT * FROM timescaledb_information.drop_chunks_policies;

輸出示例解析:

欄位示例值說明
hypertableerrlog_tsdb應用清理策略的超表名稱
older_than(t,“1 mon”,)刪除早於 1 個月的資料塊
cascadef不級聯刪除依賴物件
job_id1000關聯的後臺作業 ID
schedule_interval1 day策略執行頻率
max_runtime00:05:00單次作業最大執行時間
max_retries-1失敗後最大重試次數(-1 表示無限重試)
retry_period00:05:00重試間隔時間
cascade_to_materializationsf不級聯刪除物化檢視

查詢 Chunk 間隔

SELECT b.table_name,
       (a.interval_length / 24 / 60 / 60 / 1000000)::text || ' day(s)' AS interval
FROM _timescaledb_catalog.dimension AS a
LEFT JOIN _timescaledb_catalog.hypertable AS b ON b.id = a.hypertable_id;

最佳化時序資料庫策略

注意:Chunk 間隔不應超過保留資料時間的一半。 以下以 errlog_tsdb 為例,演示如何將策略調整為:保留 14 天資料,Chunk 間隔為 2 天。

操作步驟:

  1. 刪除現有清理策略:

    SELECT remove_drop_chunks_policy('errlog_tsdb', if_exists => TRUE);
    
  2. 新增新的清理策略:

    SELECT add_drop_chunks_policy('errlog_tsdb', INTERVAL '2 week', cascade_to_materializations => FALSE);
    
  3. 修改 Chunk 間隔:

    SELECT set_chunk_time_interval('errlog_tsdb', INTERVAL '2 day');
    
  4. 清理過期資料:

    SELECT drop_chunks(table_name => 'errlog_tsdb', older_than => INTERVAL '2 week', cascade_to_materializations => FALSE);
    

透過以上步驟,您可以有效減少 OpenResty Edge Log Server 的資料庫佔用的硬碟空間,確保 Log Server 服務的可用性。