失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > -12-4-openGauss数据库源码学习-指标采集 预测与异常检测

-12-4-openGauss数据库源码学习-指标采集 预测与异常检测

时间:2022-12-09 17:18:37

相关推荐

-12-4-openGauss数据库源码学习-指标采集 预测与异常检测

opengauss源码解析

指标采集、预测与异常检测

代码位置:/gausskernel/dbmind/tools/anomaly_detection

各模组在整体结构上的组合在摩天轮论坛上官方解析文章已经叙述的相对完整详尽。该报告对应为具体模块内部的实现。

Agent模块

代码位置: ~/agent

Agent模块负责数据库指标数据采集与发送,从代码的结构上看,可以分为3个子模块,即DBSource(/db_source.py)MemoryChannel(/channel.py)HttpSink(/sink.py),负责整合组织各个模块进行协作部分的代码位于~/metric_agent.py的agent_main()方法中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DBSource

代码位置:~/agent/db_source.py

DBSource承担数据采集的功能,其承担的三个task可以在agent_main()部分直观的看到,分别为database_exporter,os_exporter,wdr。该三个task的代码位于anomaly_detection/task中.

在metric_agent()中的使用

os_exporter

负责收集部署opengauss的设备上系统的部分性能数据。

可以看到该task收集的数据包括cpu使用率,io读写,io等待,内存使用以及硬盘空间存储部分。

DatabaseExporter

负责收集数据库方面的性能数据。

WDR(Workload Diagnosis Report)

WDR基于两次不同时间点系统的性能快照数据,生成两个时间点之间的性能表现报表,用于诊断数据库内核的性能故障。而该部分的wdr相关的仅仅是一小部分,wdrsummary级和detail级别的性能数据比起内置的这部分数据要丰富的多。该task模块中主要通过sql语句进行计数器的查询

MemoryChannel

代码位置:~/agent/channel.py

整体为一个存放数据的队列,结构比较简单

HttpSink

代码位置:~/agent/sink.py

其从MemoryChannel获取数据,并根据metric_agent.py中提供的协议ssl/http进行转发,重试次数为5次,间隔1s

def process(self):agent_logger.info('Begin send data to {url}.'.format(url=self._url))while self.running:contents = self._channel.take()if not contents:time.sleep(0.5)continuecontents.update(**{'flag': {'host': self.db_host, 'port': self.db_port, 'type': self.db_type}})retry_times = 5while retry_times:try:req = request.Request(self._url, headers=_JSON_HEADER,data=json.dumps(contents).encode('utf-8'),method='POST')request.urlopen(req, context=self.context)breakexcept Exception as e:agent_logger.error("{error}, retry...".format(error=str(e)))retry_times -= 1if not retry_times:raisetime.sleep(1.0)time.sleep(self._interval)

Detector

代码位置: ~/detector

detector模块负责数据预测与异常检测,从代码的结构上看,可以分为3个部分,即algorithmservicetools,负责整合组织各个模块进行协作部分的代码位于~/metric_detector.py中。

receiver

代码位置:~/detector/service/resource/receiver.py

receiver为service部分中,其功能为接受和存储获取到的性能数据。其中agent收集到的三部分tasks数据os_exporter,database_exporter以及wdr通过sqlite存储在本地。

数据接收:

数据存储:

SQLiteStorage

代码位置:~/detector/service/storage/sqlite_storage.py

SQLiteStorage实现了一种通过SQLite进行本地化存储数据的方式,该类主要是加载sql配置,并封装了一些需要的各种sql操作以使用,如下:

table.json

位于/tools/anomaly_detection下,为该部分实现时加载的sql配置文件

algorithm

代码位置:~/detector/algorithm

algorithm为时序预测算法部分,其包括arimaprophet两套时间序列预测算法框架,model中的AlgModel为算法的父类,也提供了使用自定义算法时的模板,使用时若未指定算法会默认使用auto_arima.

fit():
forecast():

trend

包括forecastdetect模块,提供时序数据预测与基于阈值的异常检测报警功能

forecast

代码位置:~/detector/tools/trend/forecast.py

该模块功能为读取时序数据(数量最少不低于设定值[[minimum_timeseries_length]]),并通过选定的预测算法进行拟合预测,生成数据future_reselt([[status]],[[metric_name]],[[detect_basis]] ([[minimum]],[[maximum]]),[[future_date]],[[future_value]])提供处理

detect

代码位置:~/detector/tools/trend/detect.py

该模块根据forecast封装后的数据以及配置中设定的数据阈值进行判断,正常的数据写入[[m_logger]],检测异常的数据,即[[higher]],[[lower]]写入[[a_logger]]警示。

如果觉得《-12-4-openGauss数据库源码学习-指标采集 预测与异常检测》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。