AIOps 一场颠覆传统运维的盛筵
1475
2022-11-06
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=
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 下;如果删除了此目录,重新启动后,将会从头读取文件内容。
发表评论
暂时没有评论,来抢沙发吧~