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=<config_path>。指定配置文件。默认位置为 /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/profile
export HEKA_HOME=/usr/local/heka-0_10_0-linux-amd64
export 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 = true
type = "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 Hello
2020/09/14 22:45:30 world.
2020/09/14 22:45:30 This
2020/09/14 22:45:30 is
2020/09/14 22:45:30 a
2020/09/14 22:45:30 demo
2020/09/14 22:45:30 of
2020/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 下;如果删除了此目录,重新启动后,将会从头读取文件内容。

如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家Orchis饰品店,喜欢的小伙伴欢迎👏前来下单。

扫描二维码

获取更多精彩

运维猫公众号

42482df7974386911b71fdf150fccd78.jpeg

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

扫描二维码

添加私人微信

运维猫博主

3defb861010f0684fab4eb8a3199cdb3.jpeg

扫码加微信

最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。

5fc644793a9493167eff7401501b990f.jpeg

34586abaae0be1117b8a8fa607c2cb7c.gif点击阅读原文  查看更多精彩内容!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值