当今大数据时代,企业需要从各种设备和应用程序中采集、处理、分析和管理大量数据。时序数据库应运而生,为企业提供高效、可扩展的时序数据存储、处理和分析服务。其中一款优秀的时序数据库就是openGemini,它能够提供实时数据处理、高可用性和可扩展性。
前情提要
下图是openGemini的端到端解决方案,从数据采集、接入、存储、计算、展示全链路给出了解决方案,帮助客户更好地管理和分析其大量时序数据。
当前openGemini在数据写入、存储、查询等方面已经达到了一定的行业领先水平,但如何用好数据,帮助客户更加高效的利用好数据的价值,这方面还需要持续的努力。
传统的大数据解决方案分为流计算和批处理两类,在数据入库前做部分的预计算或者时延敏感性计算,称为流计算;要么在数据入库后,通过sql查询等方式,把数据从库中查出来做计算,称为批处理。传统的时序数据库都是批计算模式,openGemini在此的基础上,根据部分时序业务,数据量大且时延敏感高的要求,也提供了流式计算的能力,满足了既保留原始数据,又可根据客户需求做部分维度降维的需求。这里暂不详述流计算。
传统的批处理,特别是数据分析场景,对数据库造成巨大的业务压力,同时将大量的数据拉回大数据平台,数据库的数据格式与大数据平台的数据格式相互转化,计算开销也很大。基于这样的问题,有数据库厂商直接在数据存储时,将数据文件存储为大数据平台可以直接读取的数据格式,以便提升数据库与大数据平台交互体验,但是这样也会带来时效性以及和大数据平台耦合的问题。大数据平台,也会做部分计算下推,将下层数据库支持的计算,在数据库内部完成,这样拉回大数据平台的数据也变得少了,以此来降低网络和计算成本。
呼之欲出
有没有更好的解决方案?
openGemini团队基于多年时序领域经验的积累,发现时序计算存在很多专业技巧,一是如何挖掘时序数据价值,二是如何高效进行时序计算。这里不得不讲讲时序数据库是怎么来的?时序数据库说到底,其实是一种专项数据库,时序数据太多了,一般数据库顶不住,所以才诞生的一种专项数据库,具有高压缩率、高吞吐、高性能、自动老化等能力。专项数据库,肯定是有专项的技巧存在。
客户可以很快的根据解决方案架构图搭建出一套系统,但是具体的业务数据怎么挖掘出价值,怎么快速高效的时序计算,这里是存在一定的门槛,并且通过团队的探索发现,优化好的时序计算框架和粗糙的时序计算,效率可差一到两个数量级。基于上述原因,openGemini团队开发且开源了一个openGemini-castor(https://github.com/openGemini/openGemini-castor)时序数据分析算法库,满足时序分析的大多数场景(开源异常检测算法),同时自带流批两种模式的时序计算框架,用户可以根据自身需求,自定义扩展相关能力。并且openGemini-castor可以通过一个名为ts-udf的组件,很好的融入openGemini现有的时序计算引擎中,可根据场景智能做计算下推以及提供高效时序传输能力,后续可开专刊做相关技术详解。
前面讲了这么多,到底怎么玩?
这里再插播一下,ts-udf这个组件,是可选组件,为了满足用户复杂的计算述求,支持用户新增自己的算子、自己的计算引擎。目前官方对接的是openGemini-castor算法库,可以照葫芦画瓢。目前开源的是批计算能力,后续计划开放流计算能力。
ts-udf负责openGemini与用户自定义算法(User Defined Functions)进行交互,提供包括异常检测、预测等在内的数据分析能力;
在ts-udf目录下我们定义了openGemini与Python算法库交互的接口和相关配置,用户只需要实现ts-udf中的相关接口,通过python-agent就可以将其启动为Python进程(称为pyworker),执行用户自定义算法。
操练起来
根据需要,准备一个或者多个节点皆可,配置推荐4u8g以上,操作系统openEuler、Centos、Redhat等等皆可,下述以openEuler为例
环境准备
Go语言编译环境安装
sudo yum install go
其他操作系统亦可通过安装包下载的方式或者apt-get install go的方式进行安装即可
检查安装的Golang版本,建议go1.18及以上
go version
Python语言编译环境安装
Python语言安装包下载地址为:https://www.python.org/downloads/,可参考官方指导进行安装。
请安装Python3.9.1及以上版本
> tar -xf Python-3.10.5.tar.xz
> cd Python-3.10.5
> ./configure --enable-optimizations --with-openssl=/usr/local/openssl -withopenssl-rpath=auto && make altinstall
> make -j && make install
注:由于不同的操作系统版本,基础依赖不一样,这里不赘述(编译python需要诸多系统依赖)
校验
/usr/local/bin/python3.10 --version
/usr/local/bin/pip3.10 --version
配置
> ln -sf /usr/local/bin/python3.10 /usr/bin/python3
> ln -sf /usr/local/bin/pip3.10 /usr/bin/pip3
编译
拉取openGemini源码
> git clone https://github.com/openGemini/openGemini.git
编译openGemini
> cd openGemini
> python build.py --clean
安装udf agent(更加实际情况,可以独立节点部署)
> cd openGemini
> cd python/agent
> pip3 install -r requirements.txt
> python3 setup.py install
拉取openGemini-castor源码及安装
> git clone https://github.com/openGemini/openGemini-castor.git
> pip3 install -r requirements.txt
> python3 setup.py install
> cd /var
> ln -sf /opt/openGemini-castor openGemini-castor
注:可以删除requirements.txt中的scipy
启动
启动openGemini(单机)
> mkdir -p /tmp/openGemini
> vim config/openGemini.singlenode.conf
# 修改castor的enable为true
> sh scripts/install.sh
检查
build/ts-cli -host 127.0.0.1 -port 8086
启动ts-udf
> cd openGemini
> cd python
> mkdir -p /log/openGemini-castor
> sh pyworker.sh start -config ts-udf/conf/python_handler.conf -ip 127.0.0.1 -port
6666 -pidfile /tmp/pyworker.pid -log /tmp/openGemini/pyworker_extra.log
检查
> sh pyworker.sh status -pidfile /tmp/pyworker.pid
时序分析样例
openGemini-castor是一个时序数据分析Python库,算法说明书见https://github.com/openGemini/community/blob/main/openGemini-castor_user_manual.md. 本节将使用其中的BatchDIFFERENTIATEAD算法,举例如何使用openGemini castor算子进行异常检测
使用方式
SELECT castor(field, 'algorithm', 'config_name', 'type') FROM example_mst GROUP
BY example_tag1, example_tag2, ...
其中:
field :需要分析的指标
algorithm :表示使用的分析算法名,例如DIFFERENTIATEAD, ThresholdAD, IncrementalAD等
config_name :表示使用的算法配置文件名
type :数据分析的类型,例如检测,预测等
使用示例:
示例数据:
> SELECT * FROM example
name: example
time tId value
---- --- -----
...
1668685272000000000 1 0
1668685273000000000 1 1
1668685274000000000 1 1
1668685275000000000 1 34
1668685276000000000 1 11
1668685277000000000 1 110
1668685278000000000 1 3
1668685279000000000 1 70
1668685280000000000 1 111
1668685281000000000 1 111
1668685282000000000 1 1
...
使用castor函数与openGemini-castor库提供的BatchDIFFERENTIATEAD进行检测:
SELECT
castor(value, 'BatchDIFFERENTIATEAD', 'detect_base', 'detect')
FROM
example
GROUP BY tId
-------------------------------------
name: example
tags: tId=1
time castor
---- ------
1668685281000000000 1
上述数据分析sql的返回结果为使用BatchDIFFERENTIATEAD算法检测到example数据中的异常,结果中castor的取值为[0,1],值越大,表示异常越显著,异常级别越高,这里回显的时间戳则为检测时段中,存在潜在异常风险的时间点1668685281000000000
用户可以根据该算子,做异常检测业务,也可以结合ui做看板的异常显示,也可以借助计算框架,开发自己的分析算子,还可以接入自己的计算进程,让openGemini与之联动,灵活度自由把控
小结
本文简单描绘了当前openGemini的端到端框架,浅述了当前时序分析领域的背景和现状以及痛点。提出了一种新的路线,openGemini社区根据业务痛点,提供一套可扩展高性能的时序分析计算框架,以及高性能高准确率的时序分析算法。为普通用户提供开箱即用的分析能力,为高玩用户提供基础框架能力,后续还会持续贡献更多AI分析算法到社区,欢迎大家持续关注。
openGemini 官网:http://www.openGemini.org
openGemini 开源地址:https://github.com/openGemini
openGemini 公众号:
欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!