Splunk初体验——像Google那样搜索你的数据

jopen 10年前

Splunk是日志/流式数据领域中做的最好的商业软件实现,本文还同时看了一下Logstash的实现,并做了对比。

Splunk是啥?

Splunk是日志/流式数据领域中做的最好的商业软件实现,它的核心能力只有一个:

像Google那样搜索企业内部所有产生的日志

这个的威力非常大,现在的企业不缺数据,缺的是有效挖掘数据的能力。而显然大部分企业没有Google的能力去做搜索,于是Splunk提供这样的能力。与之相竞争的开源实现有Logstash。

Splunk ≈ Logstash  Logstash = Redis(传输) + ElasticSearch(搜索) + Kibana(展现)  ElasticSearch = Lucene + Search

那么,哪里可以买到呢?

Splunk官网上有,我就不替他们做广告了,总之,很贵,一万美元能买1G的流量每天。言归正传,我还是分析一下这个玩意儿的一些功能特性吧。

首先,Splunk有一个很炫酷的界面

Splunk初体验——像Google那样搜索你的数据

可以看到,Splunk的主要使用方式就是那个搜索框,在里面输入一种叫做SPL的搜索语言,就能获取到你想要的各种信息了。Splunk能在后台对数据进行过滤、聚合、统计,最后得到各种报表、图像

SPL是一种向SQL致(chao)敬(xi)的语言,语法非常的类似,不同的是,SPL搜索的不是关系数据库,而是输入到Splunk系统中所有的日志数据,以下是几个具体的案例:

Splunk初体验——像Google那样搜索你的数据

可以看到,对于一行SPL搜索语句

sourcetype = syslog ERROR | top user | fields - precent

Splunk是这么干的,

  1. 首先从硬盘上搜索字段sourcetype(来源类型)为syslog的日志,同时,在日志中含有ERROR这个关键字的。
  2. 通过管道符,把上面的搜索结果根据user字段做聚合,取出其中出现次数最多的前10个
  3. 再通过管道符,去掉百分比字段,最后得出结果

最后看到,这个搜索干了什么事情呢?它一下子就把日志中出错最多的前十个用户给统计出来了,这样后续程序员就能跟踪这些错误为什么产生,然后着手去解决。

Splunk初体验——像Google那样搜索你的数据

| where distance/time > 100

使用where,对日志中两个字段进行相除后比较。

前因后果架构图

Splunk初体验——像Google那样搜索你的数据

Splunk主要做了3件事

  1. 解析原始日志格式,分解成有意义的字段,有的 log 收集方案在第一阶段就解析日志只发送关心的字段,以节省带宽。
  2. 根据时间戳,request ID,session ID,user ID 等关联日志条目,以尽量清晰当时各个子系统的状态;
  3. 根据分析的目的做过滤、聚合、统计等等,最后整一份漂亮的报表出来。

Splunk出彩的特性是……

  1. WEB的UI很出色,插件式的,把这个做成了一个平台,允许很多第三方的公司在上面发布应用。
  2. 搜索语法强大,例如查找HTTP 503错误近期的出现频率,例如某一个地区用户访问最多的商品列表,例如页面访问量排名。基本上,你能想到的可以由SQL完成的搜索,SPL都能够做出来。
  3. 自动猜测一些日志的字段,同时可以在Web上手动调整怎么解析源头日志。
  4. 以上所有操作,都能由掌握SPL语言的非程序员来完成,也就是说Splunk可以由产品经理或者运营团队来操控。而且还能把数据可视化做出来。
  5. 流式搜索,实时过滤日志然后报警,这个对运维团队很有用。

以上几点,就决定了Splunk的市场非常的大,这家公司的概念是流式数据领域的数据仓库,2012在纳斯达克上市,不过这两年被人做空,股票大跌。因为很多云计算厂商都能提供这种服务,例如阿里云1MB/S都是免费的。

竞品分析 —— Logstash, Kafka

Splunk vs Logstash

Logstash是个开源的日志搜索工具,也是一体化的开箱即用的产品。基本上,能实现Splunk六成的功力。Web没有那么强,也没有SPL这样简单的语言,ElasticSearch需要通过Json来查询,Kibana的搜索语句能力有限。目前可以说Logstash这个项目还在成熟期。需要后续很多的工作才能做好。

Splunk vs Kafka

这么比较其实不是很公平。

Kafka只解决了日志的统一搜集、传输、序列化存储问题。Splunk做的更多些,还做了数据索引的深加工。

同时,Kafka需要在源头使用schema来定义数据格式,严格,有利于后期的消费程序使用。

Splunk却对源头数据要求没有那么高,对现有系统改动小,因为是个企业软件,需要追求兼容性。

从高可用方面来看,Splunk目前还没有一天搜集几个T的数据的案例,Kafka在这方面的能力绝对没有问题。

Kafka是个比较好的车身框架,但还缺一个强大的发动机和不少内饰;Splunk是一辆功能完善的车子,就是价格很贵,而且没有在150码以上开过的案例。

所以,对于Kafka,可能的总体解决方案有:

Kafka + YARN + Hadoop = Samza(Linkin)   Kafka + Strom + MySQL  Kafka + ElasticSearch + Kibana

To be continued…

Splunk和Logstash可以说是日志处理领域较为成功的商业和开源产品了

—— 但是,我认为对于云计算厂商来讲,还有两个产品可以做分析,那就是2014年开始有的阿里云的简单日志服务SLS,以及亚马逊的Amazon kinesis

欲知后事如何,且听下回分解 ~~

主要参考文章

探索 Splunk ,搜尋處理語言 (SPL) 入門和操作手冊 —— 繁体的技术手册,估计是Splunk找台湾人翻译的吧

ElasticSearch 权威指南 —— 上海的一家互联网公司,做EverMemo和食色的那家,的某位员工翻译的

访谈与书评:《LogStash,使日志管理更简单》 —— 英文原书要9刀,作者穷疯了……还是看看评论吧

次要参考文章

《通过 ElasticSearch 进行可伸缩搜索》

《使用logstash+elasticsearch+kibana快速搭建日志平台》

《LogStash日志分析系统》

《logstash VS splunk》

来自:http://my.oschina.net/HardySimpson/blog/307089