专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序员技术  ·  前美团员工求助:在美团背了个C绩效,慌得不行 ... ·  12 小时前  
伯乐在线  ·  天塌了!全球最大成人网站 Pornhub ... ·  21 小时前  
伯乐在线  ·  天塌了!全球最大成人网站 Pornhub ... ·  21 小时前  
码农翻身  ·  投诉领导被光速开除,和烂人说再见啦~ ·  2 天前  
51好读  ›  专栏  ›  OSC开源社区

大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk

OSC开源社区  · 公众号  · 程序员  · 2017-06-23 08:30

正文

请到「今天看啥」查看全文



Splunk作为企业软件,管理及访问接口比较丰富,除了REST API 和命令行接口,Splunk的UI非常友好易用,基本上所有的功能都能通过集成的UI来使用。同时提供以下接口

REST API

● Splunk UI

● CLI



功能


数据接入和获取

Elastic 栈使用 Logstash 和 Beats 来进行数据的消化和获取。


Logstash 用 jruby 实现,有点像一个数据管道,把输入的数据进行处理,变形,过滤,然后输出到其它地方。Logstash 设计了自己的 DSL,包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。


Logstash 的数据管道包含三个步骤,Input,Filter 和 Output,每一步都可以通过 plugin 来扩展。另外 Input 和 Output 还支持配置 Codecs,完成对输入输出数据的编解码工作。


Logstash 支持的常见的 Input 包含 File,syslog,beats 等。Filter 中主要完成数据的变形处理,可以增删改字段,加标签,等等。作为一个开源软件,Output 不仅仅支持 ElasticSearch,还可以和许多其它软件集成和目标,Output 可以是文件,graphite,数据库,Nagios,S3,Hadoop 等。


在实际运用中,logstash 进程会被分为两个不同的角色。运行在应用服务器上的,尽量减轻运行压力,只做读取和转发,这个角色叫做 shipper;运行在独立服务器上,完成数据解析处理,负责写入 Elasticsearch 的角色,叫 indexer。


logstash 作为无状态的软件,配合消息队列系统,可以很轻松的做到线性扩展。


Beats是 Elastic 从 packetbeat 发展出来的数据收集器系统。beat 收集器可以直接写入 Elasticsearch,也可以传输给 Logstash。其中抽象出来的 libbeat,提供了统一的数据发送方法,输入配置解析,日志记录框架等功能。


开源社区已经贡献了许多的beats种类。


因为Beats是使用Golang编写的,效率上很不错。


Splunk使用Farwarder和Add-ons来进行数据的消化和获取。


Splunk内置了对文件,syslog,网络端口等input的处理。当配置某个节点为Forwarder的时候,Splunk Forwarder可以作为一个数据通道把数据发送到配置好的indexer去。这时候,它就类似logstash。这里一个主要的区别就是对数据字段的抽取,Elastic必须在logstash中通过filter配置或者扩展来做,也就是我们所说的Index time抽取,抽取后不能改变。Splunk支持Index time的抽取,但是更多时候,Splunk 在index time并不抽取而是等到搜索是在决定如何抽取字段。


对于特定领域的数据获取,Splunk 是用 Add-on的形式。Splunk 的 App 市场上有超过 600 个不同种类的 Add-on。


用户可以通过特定的 Add-on 或者自己开发 Add-on 来获取特定的数据。


对于大数据的数据采集,大家也可以参考我的另一篇博客。

https://my.oschina.net/taogang/blog/524385


数据管理和存储

ElasticSearch的数据存贮模型来自于Lucene,基本原理是实用了倒排表。


Splunk的核心同样是倒排表,推荐大家看这篇去年Splunk Conf上的介绍, Behind the Magnifying Glass: How Search Works

https://conf.splunk.com/files/2016/slides/behind-the-magnifying-glass-how-search-works.pdf


Splunk 的 Event 存在许多 Buckets 中,多个Buckets 构成逻辑分组的索引分布在 Indexer上 。


每个 Bucket 中都是倒排表的结构存储数据,原始数据通过 gzip 压缩。


搜索时,利用Bloom filter定位数据所在的bucket。


在对数据的存储管理上,Elastic 和Splunk都是利用了倒排表。Splunk对数据进行压缩,所以存储空间的占用要少很多,尤其考虑到大部分数据是文本,压缩比很高的,当然这会损失一部分性能用于数据的解压。


数据分析和处理

对数据的处理分析,ElasticSearch主要使用 Search API来实现。而Splunk则提供了非常强大的SPL,相比起ES的Search API,Splunk的SPL要好用很多,可以说SPL就是非结构化数据的SQL。无论是利用SPL来开发分析应用,还是直接在Splunk UI上用SPL来处理数据,SPL都非常易用。开源社区也在试图为Elastic增加类似SPL的DSL来改善数据处理的易用性。例如:


https://github.com/chenryn/ESPL


从这篇反馈可以看出,ES的search还有许多的不足。


作为对此的响应,Elastic推出了painless script,该功能还处于实验阶段。


数据展现和可视化

Kibana 是一个针对 Elasticsearch 的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch 索引中的数据。使用 Kibana,可以通过各种图表进行高级数据分析及展示。


Splunk 集成了非常方便的数据可视化和仪表盘功能,对于 SPL 的结果,可以非常方便的通过 UI 的简单设置进行可视化的分析,导出到仪表盘。


下图的比较来自 https://www.itcentralstation.com/products/comparisons/kibana_vs_splunk







请到「今天看啥」查看全文