heka数据流处理工具

网友投稿 1475 2022-11-06

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

heka数据流处理工具

1、简介

Heka 是一个”瑞士军刀”级别的流式数据处理工具,由 Mozilla 开源。heka是一个高可扩展的处理工具,他的高可扩展不但体现在本身可以进行插件开发,而且还可以通过添加机器进行水平扩展。heka是go语言开发的,比较充分的运用的heka的并发机制,从我们对go语言特性了解来看,不用担心它的性能问题,即使如此我们也可以通过快速的水平扩展来满足业务的需求。

heka和logstash一样同样有input进行日志采集,output发送日志,中间同样提供了filter splitters decoders等功能。

功能如下:

加载解析日志文件。接收 Statsd 类型的指标数据进行合并,上载至时间序列数据库,如 graphite 或 InfluxDB。启动扩展进程来收集本地系统的操作数据。实时分析、画图,并能够对经过 Heka 数据管道的数据进行异常检测。通过像 AMQP 或 TCP等协议将数据从一处传输至另一处。将处理后的结果数据存储至一个或多个持久化数据库。

2、组件

Heka 是一个基于插件的工具;将数据传给 heka、处理、输出都是通过插件来实现的;Heka 支持6种类型的插件:

2.1Inputs

Input 插件从外部获取数据,并将其传入 heka 管道;数据的来源可以是本地文件系统、远程服务器、socket等的结构或非结构化数据。此插件只能使用 Go 语言编写。

2.2Splitters

Splitter 将接收到的数据分隔成有效的记录,如使用换行分隔;只能使用 Go 语言编写。

2.3Decoders

Decoder 插件将接收到的数据解析成结构化数据。可使用 Go 来写或者 lua code。

2.4Filters

Filter 插件是Heka 的处理引擎。接收匹配规则的的数据;用来监控、聚集统计或处理数据。可以用 Go、或 lua。使用 Lua 开发,可以在不重启 heka 服务的前提下,将插件注入至运行时服务。

2.5Encoders

是 decoder 的反向处理工具;内嵌在 Output 插件中,相当于序列化。可以使用 Go 或lua 开发。

2.6Outputs

按照匹配规则将序列化后的数据输出到目标中。仅能使用Go编写。

3、核心进程

hekad 是核心进程,单个 hekad 进程可以配置很多插件,同时处理多种数据的收集、处理、传输工作。

-version 参数查看版本号。

-config=。指定配置文件。默认位置为 etc/hekad.toml,此配置可以指定目录,hekad 会解析读取目录下的所有配置文件。

4、安装

从 Heka 的 Github 发布页面(https://github.com/mozilla-services/heka/releases)下载相应的二进制包,如:heka-0_10_0-linux-amd64.tar.gz

4.1解压

[root@localhost ~]# tar -C usr/local/ -xzvf heka-0_10_0-linux-amd64.tar.gz

4.2配置环境变量

[root@localhost opt]# vim etc/profileexport HEKA_HOME=/usr/local/heka-0_10_0-linux-amd64export PATH=$HEKA_HOME/bin:$PATH

5、示例

该示例将加载本地的一个日志文件,使用空白符及换行分隔,打印至标准输出,配置文件 test.toml 如下:

[root@localhost opt]# vim test.toml[log-test-input]type = "LogstreamerInput"log_directory = "/root/work"file_match = 'test\.log'splitter = "log-test-splitter" [log-test-splitter]type = "RegexSplitter"delimiter = '\s+'delimiter_eol = false [log-test-encoder]append_newlines = truetype = "PayloadEncoder"prefix_ts = false [log-test-output]type = "LogOutput"message_matcher = "TRUE"encoder = "log-test-encoder"

创建日志文件 root/work/test.log,然后启动 hekad 进程:

[root@localhost opt]# mkdir root/work[root@localhost opt]# touch root/work/test.log[root@localhost opt]# hekad -config test.toml

向日志中输入一些内容:

[root@localhost work]# echo -e "Hello world.\n This is a demo of heked." >> test.log

heked 的标准输出:

2020/09/14 22:45:30 Hello2020/09/14 22:45:30 world.2020/09/14 22:45:30 This2020/09/14 22:45:30 is2020/09/14 22:45:30 a2020/09/14 22:45:30 demo2020/09/14 22:45:30 of2020/09/14 22:45:30 heked.

6、配置释义

Heka 的配置文件采用 TOML 格式,使用 [] 来区分一段段配置:

[log-test-input] 命名Input配置。type = “LogstreamerInput”;配置段的类型,可以直接将此类型当作配置段的名称,就可以省略此配置。log_directory = “/root/work”; 配置日志文件的目录。LogstreamerInput 会递归搜索目录及子目录下的日志文件。file_match = ‘test.log’;配置匹配日志文件的正则表达式;使用单引号来配置,若使用双引号,则为:”test\.log”。splitter = “log-test-splitter”;指定日志分隔器名称。[log-test-splitter] 命名分隔器。type = “RegexSplitter”;指定分隔器的类型为正则表达式分隔器:RegexSplitter。delimiter = ‘\s+’;正则表达式分隔字符。delimiter_eol = false;是否识别正则表达式 捕获组。[log-test-encoder] 命名输出序列化工具。append_newlines = true;配置是否输出自动增加新行。type = “PayloadEncoder”;序列化插件类型。prefix_ts = false;是否增加前缀时间戳。[log-test-output] 命名输出插件。type = “LogOutput”;输出插件类型。message_matcher = “TRUE”;配置 输出插件对 heka 消息进行匹配的规则;TRUE为全部匹配。encoder = “log-test-encoder”;指定输出的序列化工具。

例子中的 LogstreamerInput 会记录日志读取的游标,当使用 Ctrl-C 停止 hekad 后,再重新启动 hekad,将不会读取之前已经读取过的数据;默认情况下,Heka 会将此记录在目录 /var/cache/hekad/logstreamer/LogstreamerInput 下;如果删除了此目录,重新启动后,将会从头读取文件内容。

上一篇:软件测试培训之一些软件测试术语和解释
下一篇:软件测试培训之测试人员容易遗漏一些隐藏的缺陷
相关文章

 发表评论

暂时没有评论,来抢沙发吧~