您现在的位置是:主页 > 产品分类 >

数据分析怎么做-Broadcom使用ksqlDB实现机器学习和异常检测的现代化

2020-11-03 04:02产品分类 人已围观

简介大型机仍然无处不在,几乎用于世界各地的每一笔金融交易——信用卡交易、账单、工资单等。你可能会认为,在大型机软件上工作会很枯燥,只需要我们使用旧的语言和工具,但我...

Broadcom使用ksqlDB实现机器学习和异常检测的现代化

大型机仍然无处不在,几乎用于世界各地的每一笔金融交易——信用卡交易、账单、工资单等。你可能会认为,在大型机软件上工作会很枯燥,只需要我们使用旧的语言和工具,但我们的经验恰恰相反。自从加入Broadcom的大型机部门以来,我们有机会与许多新技术合作,包括Kafka、ksqlDB、ApacheCassandra™、图形数据库、Docker、机器学习等。我们的产品大型机操作智能(MOI)是一个服务集合,它收集运行在大型机上的各种产品的性能和运行状况指标。这有助于客户检测和诊断大型机问题。在大型机上运行的产品每分钟可以轻松生成超过一百万个指标。显然,大多数度量值可以有很大的变化。有时,这种变化是由预期事件引起的,比如圣诞节期间交易增加或员工早上上班。有时它是由可预测的一次性事件引起的,比如音乐会的门票正在打折。有时它是由不可预测但仍然很正常的事件引起的。例如,有人可能运行一个特别的报告,导致数据库读取的峰值。过滤掉噪音并只检测有意义的问题是一个重大挑战。我们正在开发一个改进的MOI过滤系统,以减少误报。我们想知道是否可以使用ksqlDB作为过滤工具,所以我们构建了一个原型来进行测试。MOI概述MOI由多个串联工作的微服务组成。这些微服务通过Apache Kafka®进行通信,并使用Confluent Schema Registry来管理Apache Avro™ 模式。每个微服务都有一个独特的Kafka主题,人工智能怎么样,并且只使用来自该主题的消息。在消费了一条消息之后,微服务产生一条消息发送给序列中的下一个服务。每个服务的指标都有一个Avro模式。我们的ksqlDB原型涉及三种MOI服务:度量扩展服务:上游服务从大型机接收度量,并将每个原始Avro度量发送到度量扩展服务,后者在消息中填充附加信息机器学习服务:机器学习服务分析丰富的度量消息,对信息进行评分,并设置一个标志来指示度量是否处于警报状态Alarm Lifecycle Management服务:Alarm Lifecycle Management服务检查标志,确定警报状态是指示现有事件还是新事件;如果没有警报状态,它将关闭任何适当的现有事件MOI中的每个消息表示特定时间点特定度量实例的单个时间序列观察。度量消息包括几种类型的信息,表示:度量类型和度量单位(例如CPU使用率百分比)识别被测特定组件的实例信息(例如特定CPU)度量值与观测时间MOI的metric Avro格式很复杂,大数据的趋势,有多个子结构。其中一个子结构MetricSource包含观测数据,包括度量值和测量值的时间。(其他下部结构与本讨论无关。)原型我们希望原型能够证明ksqlDB可以用来创建度量过滤器。要做到这一点,我们需要展示我们可以基于度量实例信息、值和类型的组合来创建过滤规则。原型在机器学习服务和警报生命周期管理服务之间插入一个ksqlDB服务器。ksqlDB过滤警报标志。过滤器基于一个或多个度量实例的度量值。我们的目标是尽可能少地修改当前的实现,只进行有助于定义规则条件的更改。我们修改了度量扩展服务,使一些属性更易于在ksqlDB中使用。机器学习服务将度量发布到一个新的Kafka主题中,称为ALERT_FILTERING,ksqlDB服务器使用该主题。我们还对Alarm Lifecycle Management服务进行了调整,以从ksqlDB服务器接收Avro度量消息,将这些消息转换回Alarm Lifecycle Management服务和下游服务使用的原始架构(我们稍后还会讨论这一点)。将ksqldb服务器安装到MOI上–第一印象很好!MOI中的每个服务都在其自己的Docker容器中运行。MOI工具在特定的目录结构中查找docker-compose文件,并启动或停止相关容器。我们下载了ksqlDB Docker配置并修改了Docker-合成.yml指向MOI架构注册表的文件。然后我们把文件放在正确的目录中,并重新启动MOI系统。下载后不到10分钟,我们就在MOI中运行了ksqldb服务器和ksqldb cli容器!解决方案提供商经常断言,"这太容易了!"在这种情况下,这是真的!创建第一个流ksqlDB使用时间来管理窗口信息。默认情况下,它使用Kafka代理设置的时间。然而,ksqlDB有一个非常好的特性,它允许开发人员覆盖默认值,并使用WITH子句从消息中指定域时间。这对MOI特别有用,尤其是因为MOI可能会处理延迟数天甚至数月的度量。要创建流,我们的第一步是使用适当的时间字段:创建流度量\u流(kafka_topic='警报过滤',value_format='AVRO',value_avro_schema_full_name='com.ca.oi网站.发动机.common.avro.公制',时间戳='时间');消息----------------流已创建----------------选择度量实例下一步是为特定的度量实例创建新的流。允许我们创建过滤器来支持MOI要求的许多规则。我们可以通过添加一个新字段rule来创建一个流,以包含规则的名称。规则名称用于在创建实际筛选器规则时加入流。下面,我们为一个名为fred的示例规则创建两个流,其中每个流包含单个度量实例的度量:将STREAM metric1创建为选择*,"fred"作为规则从metrics_stream其中MetricSource->category='type74subject1DeviceDataSectionVolumeSerialNumber'和MetricSource->subSystemValue='PSG119'和MetricSource->metricClass='DCTAVG_VOLSER'按规则划分;将STREAM metric2创建为选择*,"fred"作为规则从metrics_stream其中MetricSource->category='type74subject1DeviceDataSectionVolumeSerialNumber'和MetricSource->subSystemValue='PSG119'和MetricSource->metricClass='DART_VOLSER'按规则划分;最后,云服务器买,过滤规则现在我们有了两个不同度量实例的流,我们可以创建一个过滤规则。prototype规则是一个玩具示例,如果metric1和metric2流中的度量值都大于0,它会将警报字段设置为1。(由于两个指标来自同一个产品,因此它们具有相同的时间值。)度量值恰好存储为字符串,因此需要将其转换为double。在下面的ksqlDB语句中,OI-EVENTS.0是报警生命周期管理服务使用的主题的名称:创建STREAM metric1_警报(kafka_topic='OI-EVENTS.0',value_format='AVRO',value_avro_schema_full_name='com.ca.oi网站.发动机.common.avro.MetricKSQL')作为选择metric1.metricId作为metricId,metric1.groupId作为groupId,metric1.产品即产品,metric1.productVersion作为productVersion,metric1.version作为版本,metric1.documentId作为documentId,metric1.MetricSource作为MetricSource,metric1.绿色公路就是绿色公路,metric1.意外事件作为意外事件,metric1.通知者作为通知者,metric1.isPartOfCluster作为isPartOfCluster,metric1.metricPath作为metricPath,metric1.lastState作为lastState,时间就是时间,大数据存储技术有哪些,案件当CAST(metric1.MetricSource->metricValue AS DOUBLE)>0.0和CAST(metric2.MetricSource->metricValue AS DOUBLE)>0.0然后是1其他0作为警报结束从metric1内部连接度量25分钟内ON metric1.rule=metric2.rule;报警生命周期管理服务需要查看所有指标,而不仅仅是过滤器影响的指标。所以我们需要创建一个额外的规则流发布到OI-EVENTS.0主题。此流传递这些指标:创建流式其他度量(kafka_topic='OI-EVENTS.0',value_format='AVRO',value_avro_schema_full_name='com.ca.oi网站.发动机.common.avro.MetricKSQL')作为从指标流中选择*其中(NOT(MetricSource->category='type74subject1DeviceDataSectionVolumeSerialNumber'和MetricSource->subSystemValue='PSG119'和MetricSource->metricClass='DCTAVG_VOLSER'));我们结束了,对吧?好吧,在这些查询中有一点魔力。请注意WITH子句中的架构规范:value_avro_schema_full_name='com.ca.oi网站.发动机.common.avro.MetricKSQL'这与原始度量流使用的架构不同:value_avro_schema_full_name='com.ca.oi网站.发动机.common.avro.公制'这个com.ca.oi网站.发动机.common.avro.Metric schema是MOI服务所期望的。那么为什么要采用新的模式呢?有两个原因,一个不那么明显。第一个原因是ksqlDB producer创建了一个模式,其中所有字段名都大写,MOI的模式使用驼峰大小写。例如,ksqlDB将MOI模式中的MetricSource子结构名称更改为MetricSource,并将时间字段更改为time。第二个也是更微妙的原因是MOI模式中的MetricSource子结构包含一个map类型的字段。与ksqlDB不同,云服务器商,Avro映射不支持可为null的密钥。为了解决这个问题,

Tags: 学习  实现  使用  异常  机器  Broadcom  ksqlDB 

站点信息

  • 文章统计3903篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们