应用工程师用splunk分析业务数据:Splunk官网的tutorial就是利用apache log进行商店的业务统计的例子。分析哪些商品被浏览的最多,哪些商品被下订单最多,哪天服务器挂了并影响了多少次浏览或订单,昨日的TOP N最受欢迎的商品,昨日的订单总量和销售额。根据APACHE的log,不需要开发另外一个系统,就可以使用splunk基于log来对海量的数据进行统计,分析出业务数据(当然,splunk不会对数据进行合并,比如365天的数据合并为1年,因此如果要做一个在线的报表系统如:百度统计,splunk并不是一个好选择,除非用户愿意获取一个汇总的数值时等待1分钟甚至更长的时间)。

1.3 Splunk的功能

生成报表:a) 日志具有时间的特点,splunk会对时间维度建索引。因此猜想:splunk的扩容方案很可能是通过时间维度来划分的。历史数据也不需要重新再索引;只需要把这段时间新增的数据追加到老数据的倒排链尾端即可,倒排链的基本顺序不用调整。B) 支持用户自定义数据的扩展SCHEMA,用户可以提供ID映射到name的文件,在统计时生成的报表就把ID转换为name,这样生成的报表比较适合你的老板看。
记录(行)为检索和报表统计单位:Splunk是全文索引,对于apache、system等常见服务的log进行了模式定制,能够根据日志的格式,提取出一些字段,这些字段可用于条件查询。Splunk用于展现和报表统计的基本单位是:一条记录(行)。(比如统计今日apache服务器收到多少POST请求)。
索引和检索都具有流式特点: a) Splunk的索引具有流式的特点:不停的索引,经索引的内容,立刻就能检索出来。 b) Splunk的检索具有流式的特点:不停加载检索结果,直至全部检索完毕,可以控制是否停止检索,按照时间维度逆时检索。因此猜想:其倒排结构仅仅根据时间有关。
丰富的查询表达式:a) 搜索引擎常见的高级查询:AND/OR/NOT的各种组合。b) 类似于SQL的select in:SUB-SEARCH。C) 支持pipe与内建统计命令(chart, timechart, stat, eval, count),pipe把查询结果输出给统计命令,统计命令输出的结果为一个报表,报表的字段、x/y轴的名字自定义。
查询结果或报表的管理:可以存储查询结果或报表;可以定制一个dashboard,上面有很多个panel,每个panel是一个报表;多用户间设置报表的ACCESS。
丰富的索引数据源:支持本地、异地的数据。异地数据需要在异地的机器上安装splunk的客户端。可以配置的数据源为多个host上的数据。
Splunk的索引字段主要有5个:
Host:日志来自那台主机Source type: 日志的类别Source: 日志的文件名Time: 日志的日期Content: log的每一行
Splunk对以上5个字段建索引,但是却可以根据日志的格式,提取出一些字段用于查询时的条件过滤。比如,对于apache服务器的log,有GET/POST,那么可以查询GET的记录有多少个。
补充点内容:
Fields从event中被抽取发生在两个阶段:indexing和search。indexing阶段的Fields被称之为Default Fields.
Default Fields有以下:internal fields(_raw,_indextime,_cd,都是系统的相关信息),default fields(host, index, linecount, punct, source, sourcetype, splunk_server, timestamp),default datetime fields(date_hour, date_mday, date_minute, date_month, date_second, date_wday, date_year, date_zone)
_raw代表原始数据,比如可以用来做正则表达式规则匹配。_cd代表event在index中的位置。由2个数字构成,32位整数代表index bucket桶号,64位整数代表桶内便宜。尽内部使用。
linecount代表一个event发生的行数。比如检索:40 linecount=40 host=corp1 NOT 400
代表搜索host等于corp1,然后包含40且不包含400的event的次数等于40的event。
也就是说,索引的时候可能会对linecount进行聚合;检索的时候,对每个event进行过滤。
每一次搜索行为,是一个job。搜索结果会被保存10分钟,如果想在这10分钟之后再看这个结果或跟别人分享,那么需要save这个job。
考虑二次检索行为(select in),我理解splunk会首先完成第一次检索,然后在第一次检索的结果中,再进行第二次检索。经过判断,如果第一次检索的逻辑中没有聚合性质的操作,那么可以一边做第一次检索,一边在第一次检索的当前结果中进行第二次检索,并流式得动态展示内容。
2 SPLUNK功能介绍与实现分析

2.1 索引

2.2 检索

3 SPLUNK系统架构
参考文献:
http://docs.splunk.com/Documentation/Splunk/latest/User/WelcometotheSplunktutorial