...DBus之基于可视化配置的日志结构化转换实现

plsql导出表的log⽇志在哪_DBus之基于可视化配置的⽇志结
构化转换实现
导读:数据总线DBus的总体架构中主要包括六⼤模块,分别是:⽇志抓取模块、增量转换模块、全量抽取程序、⽇志算⼦处理模块、⼼跳监控模块、Web管理模块。六⼤模块各⾃的功能相互连接,构成DBus的⼯作原理:通过读取RDBMS增量⽇志的⽅式来实时获取增量数据⽇志(⽀持全量拉取);基于Logstash,flume,filebeat等抓取⼯具来实时获得数据,以可视化的⽅式对数据进⾏结构化输出。本⽂主要介绍的是DBus中基于可视化配置的⽇志结构化转换实现的部分。
1995年语文高考第一题
⼀、结构化⽇志的原理
1.1 源端⽇志抓取
硫酸铜晶体
DBus可以对接多种log数据源,例如:Logstash、Flume、Filebeat等。上述组件都是业界⽐较流⾏的⽇志抓取⼯具,⼀⽅⾯便于⽤户和业界统⼀标准,⽅便⽤户技术⽅案的整合;另⼀⽅⾯也避免了⽆谓的重复造轮⼦。抓取的数据我们称为原始数据⽇志(raw data log),由抓取组件将其写⼊Kafka中,等待DBus后续处理。
1.2 可视化配置规则,使⽇志结构化
⽤户可⾃定义配置⽇志源和⽬标端。同⼀个⽇志源的数据可以输出到多个⽬标端。每⼀条“⽇志源-⽬标端”线,⽤户可以根据⾃⼰的需要来配置相应的过滤规则。经过规则算⼦处理后的⽇志是结构化的,即:有schema约束,类似于数据库中的表。
1.3 规则算⼦
DBus设计了丰富易⽤的算⼦,⽤于对数据进⾏定制化操作。⽤户对数据的处理可分为多个步骤进⾏,每个步骤的数据处理结果可即时查看、验证;并且可重复使⽤不同算⼦,直到转换、裁剪出⾃⼰需要的数据。
1.4 执⾏引擎
将配置好的规则算⼦组应⽤到执⾏引擎中,对⽬标⽇志数据进⾏预处理,形成结构化数据,输出到Kafka,供下游数据使⽤⽅使⽤。系统流程图如下所⽰:
根据DBus log设计原则,同⼀条原始⽇志,可以被提取到⼀个或多个表中。每个表是结构化的,满⾜相同的schema约束。
每个表是⼀个规则算⼦组的集合,每个表可以拥有1个或多个规则算⼦组;
每个规则算⼦组,由⼀组规则算⼦组合⽽成,每个算⼦具有独⽴性;
对于任意⼀条原始数据⽇志(raw data log),它应该属于哪张表呢?
假如⽤户定义了若⼲张逻辑表(T1,T2…),⽤于抽取不同类型的⽇志,那么,每条⽇志需要与规则算⼦组进⾏匹配:进⼊某张表T1的所有规则算⼦组的执⾏过程骚乱全家
符合条件的进⼊规则算⼦组,并且被执⾏引擎转换为结构化的表数据
不符合提取条件的⽇志尝试下⼀个规则算⼦组
对于T1的所有规则算⼦组,如果都不满⾜要求,则进⼊下⼀张表T2的执⾏过程,以此类推
如果该条⽇志不符合任何⼀张表的过滤规则,则进⼊_unknown_table_表
例如,对于同⼀条应⽤⽇志,其可能属于不⽌⼀个规则组或Table,⽽在我们定义的规则组或Table中,只要其满⾜过滤条件,该应⽤⽇志就可以被规则组提取,即保证了同⼀条应⽤⽇志可以同属于不同的规则组或Table。
规则算⼦是对数据进⾏过滤、加⼯、转换的基本单元。常见的规则算⼦如上图所⽰。
算⼦之间具有独⽴性,算⼦之间可以任意组合使⽤,从⽽可以实现许多复杂的、⾼级的功能,通过对算⼦进⾏迭代使⽤,最终可以实现对任意数据进⾏加⼯的⽬的。⽤户可以开发⾃定义算⼦,算⼦的开发⾮常容易,⽤户只要遵循基本接⼝原则,就可以开发任意的算⼦。
⼆、DBus⽇志处理实例
以DBus集环境为例,DBus集中有两台机器(即master-slave)部署了⼼跳程序,⽤于监控、统计、预警等,⼼跳程序会产⽣⼀些应⽤⽇志,这些应⽤⽇志中包含各类事件信息,假如我们想要对这些⽇志进⾏分类处理并结构化到数据库中,我们就可以采⽤DBus log程序对⽇志进⾏处理。
DBus可以接⼊多种数据源(Logstash、Flume、Filebeat等),此处以Logstash为例来说明如何接⼊DBus的监控和报警⽇志数据。
由于在dbus-n2和dbus-n3两台机器上分别存在监控和预警⽇志,为此我们分别在两台机器上部署了Logstash程序。⼼跳数据由Logstash⾃带的⼼跳插件产⽣,其作⽤是便于DBus对数据进⾏统计和输出,以及对源端⽇志抽取端(此处为Logstash)进⾏预警(对于Flume和Filebeat来说,因为它们没有⼼跳插件,所以需要额外为其定时产⽣⼼跳数据)。Logstash程序写⼊到Kafka中的数据中既有普通格式的数据,同时也有⼼跳数据。
这⾥不只是局限于2台部署有Logstash程序的机器,DBus对Logstash数量不做限制,⽐如应⽤⽇志分布在⼏⼗上百台机器上,只需要在每台机器上部署Logstash程序,并将数据统⼀抽取到同⼀个Kafka Topic中,DBus就能够对所有主机的数据进⾏数据处理、监控、预警、统计等。
2.1 启动Logstash
在启动Logstash程序后,我们就可以从topic : heartbeat_log_logstash中读取数据,数据样例如下:
1)⼼跳数据
2)普通⽇志数据
2.2 配置规则
接下来,我们只需要在DBus Web中配置相应的规则就可以对数据进⾏处理了。
⾸先新建⼀个逻辑表sink_info_table,该表⽤来抽取sink事件的⽇志信息,然后配置该表的规则组(⼀个或多个,但所有的规则组过滤后的数据需要满⾜相同schema特性),heartbeat_log_logstash作为原始数据topic,我们可以实时的对数据进⾏可视化操作配置(所见即所得,即席验证)。秋波荡漾
1)读取原始数据⽇志
可以看到由Logstash预先提取已经包含了log4j的基本信息,例如path、@timestamp、level等。但是数据⽇志的详细信息在字段log中。由于不同的数据⽇志输出是不⼀样的,因此可以看到log列数据是不同的。
2)提取感兴趣的列
假如我们对timestamp、log 等原始信息感兴趣,那么可以添加⼀个toIndex算⼦,来提取这些字段:
这⾥需要指出,我们考虑使⽤数组下标⽅式,是有原因的: - 并不是所有列本⾝⾃带列名(例如flume抽取的原始数据,或者split算⼦处理后的数据列); - 下标⽅式可以使⽤数组⽅式指定列(类似python⽅式, 例如:1:3表⽰1,2列); 因此后续操作全部基于数组下标⽅式访问。
执⾏规则,就可以看到被提取后的字段情况:
3)过滤需要的数据
在这个例⼦中,我们只对含有“Sink to influxdb OK!”的数据感兴趣。因此添加⼀个filter算⼦,提取第7列中包含”Sink to influxdb OK!”内容的⾏数据:
执⾏后,只有符合条件的⽇志⾏数据才会存在。sci收录
4)对特定列进⾏提取
添加⼀个select算⼦,我们对第1和3列的内容感兴趣,所以对这两列进⾏提取。
执⾏select算⼦,数据中就会只含有第1和3列了。
5)以正则表达式的⽅式处理数据
我们想从第1列的数据中提取符合特定正则表达式的值,使⽤regexExtract算⼦对数据进⾏过滤。正则表达式如下:http_code= (d*).*type=(.*),ds=(.*),schema=(.*),table=(.*)s.*errorCount=(d*),⽤户可以写⾃定义的正则表达式。
岐山县中医医院
执⾏后,就会获取正则表达式执⾏后的数据。
6)选择输出列
最后我们把感兴趣的列进⾏输出,使⽤saveAs算⼦, 指定列名和类型,⽅便于保存在关系型数据库中。

本文发布于:2024-09-22 17:40:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/559893.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   规则   模块   结构化   配置   转换
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议