首页 > 应用开发 > IT综合 > 日志收集分析-heka
http://www.ourlove520.com/Article/netsafe/gongju/126846.html
可扩展的数据收集和处理工具。它的可扩展性不仅仅是体现在程序本身可以进行插件开发、更可以方便的通过添加机器进行水平扩展。Heka是一个使用Go语言开发的工具,大量使用了Go的goroutine并发和channel通信,通过我们做日志平台的经验来看,一般情况下性能问题不需要太多的顾虑。
Heka程序的可扩展性体现在它的插件开发上。Heka核心是Go语言开发,其插件理所当然的可以采用Go语言开发,当然你还可以通过lua来开发插件,如果你更喜欢写lua的话;lua开发的插件具备热更新的能力,也就是修改了lua插件的代码,并不需要重启Heka进程,在某些应用场景下,热更新具备很强的竞争力。根据实际的应用需求,可以为Heka开发4种类型的插件,这4种插件就构成了Heka的整体结构和功能,所以Heka的核心代码量(非插件)只有5,6K行。可开发的4种插件分别是:Input、Decoder、Filter、Output。
Input插件就是Heka的数据输入源。假设需要从一个日志文件读入数据,那就只需要开发一个从日志文件读取日志数据的Input插件即可。值得开心的事情是,Heka已经默认自带了多个Input插件,可以满足大部分数据来源的需求。自带的LogstreamerInput插件就是用来从日志文件实时读入数据用的,它支持读取各种rotate规则的日志文件路径;HttpInput插件可以间断式的通过访问一个URL地址来获取数据,比如:Web服务器的7层健康检查场景就可以使用HttpInput插件来探测。HttpListenInput插件会启动一个Http服务器接收外部访问来获取数据,比如:通过curl等命令直接将数据post到Heka;还有两个比较重要的Input插件:分别是TcpInput和UdpInput,有这两个插件外部程序就可以通过TCP/UDP将数据发送给Heka。http://hekad.readthedocs.org/en/latest/config/inputs/index.html, 这里可以看到Heka提供的全部Input插件和详细使用方法,大部分情况都不需要自己开发Input插件了。
Decoder插件,各种Input插件负责将原始数据送入到Heka内部,这些数据一般来说都是具备一定的格式,比如:Nginx access日志、Syslog协议数据、自定义的数据格式等等,Decoder插件干的事情就是将Input插件输入的一个个的原始数据消息给解析一遍,最终得到一个结构化好的消息,不再是一个非结构化的原始数据消息。结构化的消息更利于编程进行处理。http://hekad.readthedocs.org/en/latest/config/decoders/index.html,这里例举了Heka自带的所有Decoder插件,我最关注的插件是:Nginx Access Log Decoder和 Syslog Decoder,这两个插件都是Lua开发的。注意,每个Input插件得有一个Decoder插件负责对输入的数据进行解析到结构化的程度。
Filter插件干的事情就是负责具体的数据分析、计算任务。Heka默认也带了好几个Filter插件,但都不是我的菜,绝大多数时候,可能都需要我们自己根据应用需求开发自己的Filter插件来完成数据分析、计算工作。
OutPut插件负责将Heka内部的一个个消息输出到外部环境,比如:文件、数据库、消息队列等;注意,也可以通过TcpOutput将消息输出到下一个Heka继续处理,这样就可以部署成多机分布式结构,只要有必要。
通过4种类型的插件,基本可以了解到Heka是基于Pipeline方式对数据进行实时处理。除了可以开发4种插件以外,Heka还提供了一个很高端的机制——message matcher,message matcher是应用在Filter和Output两种插件身上,它主要是用来指定哪些消息由哪些插件(Filter/Output)处理。有了message matcher机制就可以通过配置文件实现不同的数据由不同的Filter进行计算、不同的Output输出到不同的外部环境。没有message_matcher,Heka的价值就会大打折扣了。
Router架构
每个Agent负责采集不同的数据发送给矩形组件Heka,也就是Router。Heka Router可以通过message matcher机制将不同的数据输出到不同的外部存储等,从而实现一个Router的功能。当然,上面的两种架构也是可以混合到一起使用的,Heka的系统级扩展性还是足够灵活的。Agent/Router架构其实非常像淘宝开源的DataX工具(DataX是由淘宝 @泽远 同学领导开发的一款各种存储间数据交换的瑞士军刀。DataX也是支持各种插件开发,可以通过插件实现MySql数据同步到Oracle、Oracle同步到MySql、Mysql同步HDFS等等),在没有DataX以前,就是各种存储间同步的独立工具,由不同的人开发,使用方式也完全不一致,零散的小工具极其不友好。在一个灵活、可扩展的工具上面,进行扩展开发实现各种业务需求,可以让系统的运维更加的友好,部署、使用方式也更加的一致。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26250550/viewspace-2141343/ ,如需转载,请注明出处,否则将追究法律责任。