文档章节

Splunk数据检索概要

YuMG
 YuMG
发布于 2015/04/22 18:06
字数 3120
阅读 192
收藏 1
点赞 0
评论 0

Splunk数据检索概要

0.提要

Splunk Enterprise的强悍之处基本上全部体现在其强大的数据检索功能上。不同于传统的事件数据管理工具,其将“自身之于事件数据内容”与“Google之于WWW数据内容”相提并论。

本文就Splunk中的数据检索特性涉及的功能界面、检索命令、交互机制等方面作以概要介绍。

1.数据检索

1.1 前序准备

在使用Splunk进行数据检索之前,应当了解以下内容:

  1. 了解如何导入数据
  2. 了解数据管理基本概念
  3. 了解知识对象基本概念

(上述内容参见《Splunk数据处理概要》

1.2 检索界面

Splunk Enterprise将会在系统中启动Splunkd进程提供数据检索服务。通常情况下,用户连接该服务的途径有三种:

  1. Splunk Web
  2. CLI
  3. REST API

1.2.1 Splunk Web

Splunk Web是最常用的功能界面。该界面由运行在Splunkd进程中的splunkweb模块提供。用户通过Web浏览器访问,即可进行图形化功能操作。

1.2.2 CLI

Splunk提供了命令行操作界面。该界面对应的可执行程序位于<code>$SPLUNK_HOME/bin/splunk</code>。使用该程序可以访问本地或者远程的Splunk服务。该界面通常情况下都不会被用到。

1.2.3 REST API

Splunk提供了几乎全功能的REST API。使用最简单的curl工具即可连接进行任何操作。放眼当前大部分的流行的技术产品,这种设计也是大势所趋(摈弃面向任何具体语言的SDK包,直接通过Web工具访问)。

至少在笔者试用的6.2.1版本中,可确定使用Splunk Web的时候,浏览器端的操作其实就是在Splunk的REST API的支持下执行的。在使用CLI的时候,由于是通过SSL连接的,不太容易直接看到网络包明文。但可看出网络包的传输情况(大小、数量和先后顺序),还有最明显的是指定了带https协议头的目标地址,根据以上迹象猜测的话,也应该是通过REST API执行的用户操作。

另外,从Splunk安装的系统服务中能够看出,在6.2版本之前splunkd与splunkweb是运行在两个进程中的,6.2版本之后splunkweb服务就不再启用了。如下所示:

服务状态

后经演化,合二为一,两个模块都在一个叫做<code>Splunkd</code>的系统进程中,对应的系统注册服务名称为<code>Splunkd Service</code>。

进程状态

1.3 检索命令与SPL

尽管用户可以选用不同的交互界面,但无论何种界面下,检索操作都是通过提交 检索命令 来进行的。换句话说,Splunk异常强大的信息检索能力正是来源于功能强悍且丰富的 检索命令。Splunk设计了一套面向Ad-hoc查询称为SPL(Splunk Processing Language)的表达式语言,用以定义检索命令。

在讨论SPL之前,首先梳理一下Splunk关于数据检索功能的设计思想。

作为在事件管理领域积累多年的大厂,Splunk总结了用户利用事件数据进行分析的两大需求方向:

  1. 数据调查:在事件记录中寻找导致问题的根本原因。
  2. 数据汇总:将事件数据汇总于表格或者可视化图表之中。

相应地,Splunk将自身的数据检索也分为了两大类:

  1. 原始事件检索(Raw Event Search)
  2. 报表汇总检索(Transforming Search)

所谓的“原始事件检索”就是指首先依靠索引字段从索引中查找事件数据,然后可能再进一步结合一些检索条件获得目标结果,最终的结果集可能并不大。

所谓的“报表汇总检索”主要是指对从索引中获得的结果集进行一定的计算与转换,最终获得变形之后的目标结果,比如一组统计数字。

以上先说到这里。那么,SPL具体长什么样子,都包括什么呢?

SPL由以下内容组成:

  • 命令项定义:包括命令关键字名称、命令参数结构等
  • 函数定义:完成常用的计算、统计等功能的算子,通常作为命令参数使用
  • 子句定义:作为命令项的补充,主要服务于一些统计、报表命令
  • 管道:连接命令执行,传递命令执行结果

另外,SPL还定义了基本的简单语法,以约束命令的使用与组合方式。

上述解释,看起来非常地。。。凌乱。SPL确实是Splunk原创的,但它实质上就是Unix/Linux命令与SQL的结合体。“命令与管道”参照了Unix/Linux系统命令,“函数与子句”则参照了SQL,而一些语法其实就是规定这两种风格的东西如何混在一起使用。

从两种非常优秀的系统中吸取精华,自然能够保证自身的强大。但是,另外一方面,正如前述,它非常的杂乱,尤其是初阶使用多少会感觉难以摸准规律(几乎没有规律)、难以掌握。这也是Splunk被广为诟病的问题。

用SPL定义的,向检索命令整体结构大致如下:

检索 := <command>{<pipe><command>}

其中的<pipe>就是符号“|”,而<command>结构就比较杂乱了,其中有一部分类Linux命令设计的。比如,“取得结果中的前20行数据”的命令如下:

... | head 20

Splunk中的这类命令并不像linux里那样,以“-”符号表示命令选项,并在选项后紧随参数值,而多是直接后跟“选项参数名称=选项参数值”的形式。与<code>... | head 20</code>等价的非简略写法如下:

... | head limit=20

除了以上这种仿照linux系统命令的命令项,还有一种就是类SQL的了。比如,“对数据分组后在某个时间维度上做统计”的命令如下:

... | chart dc(clientip) over date_hour by categoryId

以上命令中,<code>chart</code>是命令项名称关键字,<code>over</code>与<code>by</code>是子句关键字,而<code>dc(...)</code>是去重计数函数。这就有点类似于SQL中的<code>select ……,count(distinct ...) from ... group by ... </code>结构。

1.4 检索命令的性质与类别

读者可能注意到,上节中关于检索命令的示例中,命令的开头处都带了<code>...|</code>这一小段。什么意思呢?这须从Splunk的命令的性质谈起。

首先,按照命令的输入与输出性质。Splunk将命令分成两大类,

  1. 产生式(Generating)命令
  2. 非产生式命令

所谓的产生式命令是指,命令本身不需要从前序管道中接收任何数据输入,而是可以系统索引或者系统元信息作为输入源数据,根据命令参数处理后输出结果。典型的产生式命令如<code>search</code>以及<code>metadata</code>等。

产生式命令执行后的结果输出可以作为最终结果,也可以通过管道传输给后续命令进行处理。在后续的命令里,就差不多轮到非产生式命令发挥作用了,它们通常用来过滤、转换、补充、计算输入的数据。所以,非产生命令,又被称作“报表(reporting)命令”或者“转换(transforming)命令”。

那么,上节中关于检索命令的示例中,命令的开头处都带了<code>...|</code>,是因为例子中涉及的<code>head</code>与<code>chart</code>命令都属于非产生式命令,这类命令不可能放置于检索定义的头部位置。

在一个检索定义中,无论其中有多少步管道处理,位于最前部的命令必须是产生式命令。

以上是就命令的输入输出角度来讨论命令性质。另外,若根据命令在管道连接中处理数据的方式来看,那么可以将命令分为:

  1. 并行流式
  2. 集中流式
  3. 非流处理

分别解释如下。

1.4.1 并行流式

首先“流式”的含义是指,命令指定的数据处理操作不需要等待上游数据准备完全,而是可以数据块为单位,从上游管道中按块获取,按块处理,并按块传入下个管道。

再次,“并行”是指,命令的处理逻辑可以允许将任务作并行处理,各子任务之间无需同步等复杂操作。

示意图如下所示:

并行流式示意图

典型地此类命令,多涉及到一些简单的转换、过滤等操作。如:<code>convert</code>、<code>fields</code>等命令。

1.4.2 集中流式

集中流式首先满足“流式”含义。但是,由于命令的处理逻辑中涉及到状态处理,则无法轻易地将任务并行化。

示意图如下所示:

集中流式示意图

此类命令的例子比如<code>head</code>,它需要计数所得到的事件个数,达到指定个数为止。为了方便状态的维护,只能作集中处理而不能并行化。

1.4.3 非流处理

非流处理命令是指,命令指定的数据处理操作必须等待上游数据准备完全,不能够做到“从上游管道中按块获取,按块处理,并按块传入下个管道”。

示意图如下所示:

非流处理示意图

此类命令的例子,比如使用<code>sort</code>对数据进行排序。它不能按块处理后并按块向后传递,相反,它必须等待上游的结果全部准备完毕后,才能得出最终处理结果,然后再统一向下传递。

1.5 提交检索

使用Splunk Web进行数据检索的时候,通常给人的体验是在线、同步的感觉。这只是表面上的感觉,以Splunk Web为例,其实Splunk执行用户检索的过程如下:

操作执行时序示意图

这个过程,理论上讲是离线、异步的过程。只是时间粒度大小的问题。

2.检索效率与优化

若参看过《Splunk数据处理概要》并且读完本文以上章节以后,就会明白:若想要用好Splunk,关于其背后的一些原理性内容,还是需要有一定掌握的。尤其是涉及到检索效率的问题时,很容易由于不良的检索定义造成检索执行无效率、甚至无法完成检索的后果。

首先需要明确的是: 在一个检索定义中,位于最前部的检索命令会从索引中获得原始的事件数据,后续的再过滤、转换、计算、统计等等操作都是在内存中进行的!

所以,一切优化的原则都是以尽可能精准地获取原始数据,缩小数据输入规模为基础!

3.检索命令宏定义与自定义检索命令

Splunk支持检索命令宏定义。

Splunk支持用户自定义检索命令,主要是完成一些注册配置工作,命令逻辑由用户提供python脚本定义。注意,用户自定义命令等方式为提供python脚本并不代表Splunk内置的所有命令都是由python定义的,python是一种良好的可嵌入的脚本,可在很多种语言平台上执行。

4.总结与讨论

Splunk的检索与报告能力非常强大,但由于设计与实现的其原理与机制,笔者对于其应对大规模数据处理存在疑问。

举个简单的例子:从索引中检索出1T大小的原始事件数据,后续又管道衔接了非流处理的命令,那么上哪去找1T的空间供管道缓存这1T数据?

至少Splunk没有正式地对类似的这种情况作以特殊说明。

End

© 著作权归作者所有

共有 人打赏支持
YuMG
粉丝 7
博文 23
码字总数 78574
作品 0
大连
其他
​大数据时代的全能日志分析专家--Splunk安装与实践

大数据时代的全能日志分析专家 --Splunk安装与实践 0.背 景 随着大家对网络安全意识的提高,企业网管理人员,必须对IT基础设置进行监控及安全事件的管理,管理数据的数量和种类非常巨大,那么...

skykws ⋅ 2015/07/21 ⋅ 0

大数据时代的全能日志分析专家--Splunk安装与实践

大数据时代的全能日志分析专家 --Splunk安装与实践 0.背 景 随着大家对网络安全意识的提高,企业网管理人员,必须对IT基础设置进行监控及安全事件的管理,管理数据的数量和种类非常巨大,那么...

OSSIM ⋅ 2014/12/20 ⋅ 3

splunk理论及安装配置

splunk是什么? 面向云的日志搜索引擎,是一款功能强大的日志管理软件。不仅支持通过多种方式添加本地或远程日志,而且能够产生图形化报表。最强大的功能是其搜索功能——因此被称为"Google...

786376668 ⋅ 2014/08/06 ⋅ 0

ELK 日志分析平台搭建

主题简介: 处理日志是运维工作必不可少的一环。但是在规模化场景下,grep、awk 无法快速发挥作用,Hadoop 又更偏向于固定模式的离线统计。我们需要一种高效、灵活的日志分析方式,可以给故障...

乐晨 ⋅ 2015/12/06 ⋅ 0

总编下午茶:技术创新才是王道

由于WOT活动和其他的一些选题,老杨近年来接触了不少技术创业者。这其中有一群人很有特点:他们系出名门——曾经在全球级别的互联网企业承担技术方面骨干,然后回到中国进行创业。这其中包括...

yangsir ⋅ 2016/05/23 ⋅ 0

Splunk运维智能与大数据分析新手入门视频教程

Splunk运维智能与大数据分析视频教程第一部分入门系列即将在51CTO学院发布! 视频地址: http://edu.51cto.com/course/6696.html Splunk 是企业级的运维智能与数据分析平台,它以搜索引擎的方...

heijunmasd ⋅ 2016/08/02 ⋅ 0

Splunk—云计算&大数据时代的超级日志分析和监控利器

信息科技的不断进步,一方面使得银行业信息和数据逻辑集中程度不断得到提高,另一方面又成为银行业稳健运行的一大安全隐患。Splunk作为智能的IT管理运维平台,能够帮助银行业积极迎接、应对和...

English0523 ⋅ 2016/05/06 ⋅ 0

日志处理两大生态Splunk和ELK深度对比

随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和ElasticSearch,绝对值得我们去学习,探索和使用,因此为了造福Splunk的铁粉和新粉们,...

heijunmasd ⋅ 2017/07/17 ⋅ 0

Splunk集成Kafka配置方法

Splunk是业界赫赫有名的数据分析工具,比较擅长BI和安全日志分析,我司很多部门都有购买其产品和服务。最近有个需求要把Splunk和分布式消息队列Kafka做个集成,Splunk官方提供的一个Kafka的插...

半夜菊花茶 ⋅ 2017/11/24 ⋅ 0

Splunk-面向机器数据的处理分析平台

Spelunking,代表着去洞穴探险的意思。在如今的大数据时代,面对庞大的机器的数据,亦如在黑暗的洞穴探险一样,是一件让我们看不清楚、难以理解的事情。如何使机器数据对每个人都可取可用,发...

heijunmasd ⋅ 2017/07/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 28分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 48分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部