Agent 模块负责采集并发送指标数据,该模块由 DBSource、MemoryChannel、HttpSink 三
个子模块组成。
(1) DBSource 作为数据源,负责定期去收集数据库指标数据并将数据发送到数据通道
MemoryChannel 中。
(2) MemoryChannel 是内存数据通道,本质是一个 FIFO 队列,用于数据缓存。HttpSink
组件消费 MemoryChannel 中的数据,为了防止 MemoryChannel 中的数据过多导致 OOM
(out of Memory,内存溢出),设置了容量上限,当超过容量上限时,过多的元素会被禁止
放入队列中。
(3) HttpSink 是数据汇聚点,该模块定期从 MemoryChannel 中获取数据,并以 Http(s)的
方式将数据进行转发,数据读取之后从 MemoryChannel 中清除。
2. Detector 模块组成
Detector 模块负责数据检测,该模块由 Server、Monitor 两个子模块组成。
(1) Server 是一个 Web 服务,为 Agent 采集到的数据提供接收接口,并将数据存储到本
地数据库内部,为了避免数据增多导致数据库占用太多的资源,我们将数据库中的每个表都
设置了行数上限。
(2) Monitor 模块包含时序预测和异常检测等算法,该模块定期从本地数据库中获取数据
库指标数据,并基于现有算法对数据进行预测与分析,如果算法检测出数据库指标在历史或
未来某时间段或时刻出现异常,则会及时的将信息推送给用户。
8.5.3 关键源码解析
1 总体流程解析
智 能 索 引 推 荐 工 具 的 路 径 是 openGauss-
server/src/gausskernel/dbmind/tools/anomaly_detection,下面的代码详细展示了程序的入
口。
def forecast(args):
…
# 如果没有指定预测方式,则默认使用’auto_arima’算法
if not args.forecast_method:
forecast_alg = get_instance('auto_arima')
else:
forecast_alg = get_instance(args.forecast_method)
# 指标预测功能函数
def forecast_metric(name, train_ts, save_path=None):
…
forecast_alg.fit(timeseries=train_ts)
dates, values = forecast_alg.forecast(
period=TimeString(args.forecast_periods).standard)
date_range = "{start_date}~{end_date}".format(start_date=dates[0],
end_date=dates[-1])
display_table.add_row(
[name, date_range, min(values), max(values), sum(values) / len(values)]
)
评论