清理 OpenResty Edge Log Server 資料庫資料
OpenResty Edge Log Server 資料庫主要儲存錯誤日誌、WAF 日誌和動態指標資料等。其中,WAF 日誌和動態指標資料通常會佔用較大空間。這些資料均採用時序資料庫進行儲存。本文將詳細介紹如何調整時序資料庫策略並進行資料清理。
預設時序表概覽
表名 | 用途 | Chunk 間隔 | 資料保留期 |
---|---|---|---|
errlog_tsdb | 錯誤日誌 | 7 天 | 1 個月 |
waf_request_tsdb | WAF 命中請求 | 7 天 | 1 個月 |
waf_matches_tsdb | WAF 命中詳情 | 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;
輸出示例解析:
欄位 | 示例值 | 說明 |
---|---|---|
hypertable | errlog_tsdb | 應用清理策略的超表名稱 |
older_than | (t,“1 mon”,) | 刪除早於 1 個月的資料塊 |
cascade | f | 不級聯刪除依賴物件 |
job_id | 1000 | 關聯的後臺作業 ID |
schedule_interval | 1 day | 策略執行頻率 |
max_runtime | 00:05:00 | 單次作業最大執行時間 |
max_retries | -1 | 失敗後最大重試次數(-1 表示無限重試) |
retry_period | 00:05:00 | 重試間隔時間 |
cascade_to_materializations | f | 不級聯刪除物化檢視 |
查詢 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 天。
操作步驟:
刪除現有清理策略:
SELECT remove_drop_chunks_policy('errlog_tsdb', if_exists => TRUE);
新增新的清理策略:
SELECT add_drop_chunks_policy('errlog_tsdb', INTERVAL '2 week', cascade_to_materializations => FALSE);
修改 Chunk 間隔:
SELECT set_chunk_time_interval('errlog_tsdb', INTERVAL '2 day');
清理過期資料:
SELECT drop_chunks(table_name => 'errlog_tsdb', older_than => INTERVAL '2 week', cascade_to_materializations => FALSE);
透過以上步驟,您可以有效減少 OpenResty Edge Log Server 的資料庫佔用的硬碟空間,確保 Log Server 服務的可用性。