正文
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