Skip to content

MO OB 过期删除设计

EZ4BRUCE edited this page Jul 4, 2023 · 1 revision

Background

目前采集云平台和k8s的监控数据与日志存储在 DB(预期使用MO),主要用于日常运维监控、告警,以及线上问题定位分析,历史数据对问题定位帮助不大,并且会长时间占用空间。

需要一个删除的策略,理论上我们不应该永远都存着,可以默认不开启

目的

清理旧数据,节省磁盘空间

实现

启动一个线程,每隔一段时间执行SQL语句删除数据,删除30天之前的数据

  • 支持小时粒度
  • 支持 metric、log、trace 分别管理
  • 支持关闭
  retention_deletes_enabled: true
  logRetentionPeriod: "336h"        # 保留 14天
  metricRetentionPeriod: "336h"     # 保留 14天
  traceRetentionPeriod: "336h"      # 保留 14天

metric

指标数据表

CREATE TABLE IF NOT EXISTS %s.%s (
    series_id VARCHAR(256) NOT NULL COMMENT "abstract of json labels",
    timestamp DATETIME(6) NOT NULL COMMENT "metric data collect time",
    value DOUBLE DEFAULT "0.0" COMMENT "metric value",
    PRIMARY KEY(series_id,timestamp)
) cluster by {timestamp,series_id};

对30天之前数据进行删除

DELETE FROM [metrics_databases].[data_table] WHERE timestamp<=[now()-30d];

log

CREATE TABLE IF NOT EXISTS` + "`%s`.`%s`" + `(
    service_name VARCHAR(1024) NOT NULL COMMENT "service name",
    app_name VARCHAR(512) NOT NULL COMMENT "app name",
    collect_time DATETIME(6) NOT NULL COMMENT "log recorded timestamp",
    timestamp DATETIME(6) NOT NULL COMMENT "log recorded timestamp",
    logger_name VARCHAR(1024) NOT NULL COMMENT "logger name",
    level VARCHAR(1024) NOT NULL COMMENT "log level, enum: debug, info, warn, error, panic, fatal",
    caller VARCHAR(1024) NOT NULL COMMENT "log caller, like: package/file.go:123",
    message TEXT NOT NULL COMMENT "log message content",
    stack TEXT NOT NULL COMMENT "log caller stack info",
    labels JSON NOT NULL COMMENT "key-value json mark labels",
    INDEX(app_name,timestamp)
) cluster by {app_name,timestamp};

30天之前数据进行删除

DELETE FROM [logs_databases].[data_table] WHERE timestamp<=[now()-30d];