清理 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 服务的可用性。