Splunk > 快速入门教程
目录
7.开始数据搜索.... 2
8.字段搜索.... 4
9.保存搜索结果.... 6
10.使用Splunk搜索语句.... 8
11.使用子搜索.... 11
12.使用字段查找对照(field lookup).... 13
进入查找对照管理.... 13
上传对照表文件.... 14
查对表定义.... 14
设置自动对照查询.... 15
13.创建报表.... 18
14.创建仪表板.... 21
在上面的结果中,我们可以继续在搜索框输入额外的搜索条件(搜索时间范围保持“全部时间”)。例如我们希望查找一下10.2.1.44这个IP地址。我们可以在之前的条件后面用空格分隔一下输入IP地址。在键入搜索内容的时候,你会发现下面会有一些搜索内容的建议显示出来。这部分是Splunk的搜索助手,它可以提供匹配你搜索内容的后续的搜索建议,或者是一个搜索命令的简要帮助。
**搜索结果页面的时间轴也是我们可以用鼠标来点击互操作的,大家可以自己试着用鼠标单击或者双击或者选择时间轴的一个段落来看看不同的搜索结果显示效果。另外,时间范围选择也是可以自定义的,这部分内容比较简单,就不详细说明了。
搜索条件你也可以使用鼠标在结果内容区域进行点击的互操作,被点击的内容会被自动增加到搜索框中。
搜索结束后你可以看到,符合这种全文搜索的条件的匹配结果会被高亮显示出来。
Splunk的搜索输入框支持逻辑关系的组合,例如我们在上面搜索条件的基础上希望看到一些有purchase的字样,而且HTTP状态不是200的事件,我们可以使用下面的条件来匹配这些数据(后续会涉及到更加准确的搜索方法)。
sourcetype=access_combined_wcookie10.2.1.44 purchase NOT 200
Splunk还支持通过键盘按键和鼠标点击的组合方式来改变搜索条件。例如我们用鼠标放到结果中的503这个数字上,使用alt+点击(Windows中是用ctrl+点击),你会看到NOT 503这个条件被自动增加到搜索条件中,表示我们希望在搜索结果中排除数字不是503的搜索结果。
字段是名字/值的配对,所有的字段都有一个描述性的名字并且可以被搜索到,例如clientip是访问webserver的客户端IP地址, _time是事件的时间戳,host是服务器的主机名(或者IP地址),等等。通过字段搜索可以让我们更快、更准确的搜索到所要定位到的内容,而且你可以通过字段对各种搜索结果进行进一步的统计分析、报表展现,等等更多的分析操作。
在本练习中,Splunk可以自动识别apache日志中的各种字段名称。Splunk也允许你很方便的通过正则表达式的方式来定义你所需要抽取的字段内容,详细的字段定义,详细的解释和操作方法可以参考Splunk手册中的Knowledge Manager Manual中这里有关字段的部分。
页面左侧的字段边栏里面显示了所有可用的字段信息,下图中系统默认字段host、source、sourcetype在搜索结果中显示出来。
你可以点击Edit链接来增加希望显示的字段名称。例如我们选择把以下3个字段添加到可显示的字段列表中,保存后在页面中可以看到被增加的这三个字段。
action、category_id、product_id
下面我们用两个例子来对比一下字段搜索和普通关键词搜索的结果。首先使用关键词条件搜索HTTP错误码为404或者500或者503的事件:
errorOR failed OR severe OR (sourcetype=access_* (404 OR 500 OR 503))
然后我们改为用下面的更加明确的字段搜索条件:
error OR failed OR severe OR (sourcetype=access_*(status=404 OR status=500 OR status=503))
很明显我们看到两种条件搜索的结果是不一样的,字段搜索因为更加精确所以搜索得到的结果比使用关键词搜索的数量要少。
我们可以使用右上角的“保存”按钮,选择“保存搜索…”来把上面的搜索条件保存成一个常用的已存搜索。
保存搜索成功后,可以在“搜索与报表
”中找到刚刚保存过的搜索名字。
Splunk 不只是提供简单的条件匹配搜索,还可以通过对搜索结果做进一步的处理从而进行各种复杂的数据分析。例如在样例数据中,如果我希望了解到:在线商店卖的最好的产品是哪些?有多少客户购买了鲜花?每个客户购买了多少鲜花?这些问题都可以通过Splunk提供的强大的搜索命令来进行分析得到最终的结果。
在Splunk我们可以使用类似Unix里的管道式的命令组合一步一步的进行数据分析,每次在前一次的数据结果的基础上使用管道符(“ | ”),然后给出下一步分析的命令指示。例如,如果我希望知道所有购买商品的日志记录中,最多的产品类别是哪些,我可以先筛选出有购买命令动作的日志事件,然后使用top这个命令来对结果中的category_id字段进行排序。搜索的语句如下所示:
sourcetype=access_* action=purchase | topcategory_id
我们可以看到,Splunk把原始事件内容通过字段进行了排序统计,然后以表格的方式把结果展示出来。我们还可以对这些结果进行下一步的钻取操作,例如通过鼠标点击category_id中的FLOWERS,Splunk会自动把这个条件添加到搜索条件中,打开新的搜索结果页面。
sourcetype=access_*action=purchase category_id="FLOWERS"
下面的几个搜索语句的例子提供了对其他的不同问题的回答的搜索方法。
例1: 有多少独立客户购买了鲜花类商品?(设定一个clientip即为一个客户来源)
sourcetype=access_* action=purchase category_id=flowers |stats dc(clientip)
stats是用于统计的命令,后面可以有多种不同的统计方法,dc(或distinct_count)是其中一个计算去重后的数量。
例2:每个独立客户各购买的鲜花数量是多少?
sourcetype=access_* action=purchase category_id=flowers |stats count BY clientip
例3:我们还可以对输出展现的样式进行调整,使用rename命令将每列的表头名称修改为比较易于理解的描述文字。
sourcetype=access_*action=purchase category_id=flowers | stats count AS "购买的鲜花数量" by clientip | rename clientip AS 客户
Splunk提供了上百个不同的搜索命令以便于用户可以对所获取的数据进行各种不同维度的分析。详细的命令行表和常用的搜索命令,可以参见这里Search Reference手册的说明。如果你比较熟悉SQL查询命令,也可以参考这里的内容,快速把SQL查询的概念对应到Splunk的搜索命令中。
有的时候我们需要更复杂一些的搜索方式,一个搜索结果作为另一个搜索的一个参数来使用,这个时候我们需要用子搜索来实现。这里我们用一个简单的例子来说明如何使用子搜索。
回到刚才的网店的例子,我们希望知道消费最多的那个客户一共购买了多少件商品,都是哪些商品。首先我们分步骤实现这个要求:
第一步:用top命令和limit命令找到消费最多的客户IP地址是哪个
sourcetype=access_*action=purchase | top limit=1 clientip
第二步:用stats和values命令统计一下这个客户的购买数量和包含有哪些产品
sourcetype=access_*action=purchase clientip=233.77.49.50 | stats count, values(product_id) byclientip
下面我们使用子搜索的方式重新实现一次上述要求。子搜索的部分使用[]括起来,中括号的部分会先被执行,然后再执行外面的搜索部分。所以子搜索的语句应该是这样的:
sourcetype=access_*action=purchase [search sourcetype=access_* action=purchase | top limit=1clientip | table clientip] | stats count, values(product_id) by clientip
如果我们希望显示的结果表头信息更加有意义些,可以用rename命令对其进行重命名:
sourcetype=access_*action=purchase [search sourcetype=access_* action=purchase | top limit=1clientip | table clientip] | stats count, values(product_id) as product_id by clientip |rename count AS "购买数量", product_id AS "购买产品内容", clientip AS "VIP 客户"
**更多有关子搜索的描述和例子客户参考Splunk User Manual这里的内容。
字段查找对照的意思是我们可以通过去查找Splunk所导入数据之外的csv文件来把数据所包含的字段信息进行扩展,从而获得更多的内容。
例如在上面的例子中,product_id的内容里面对我们来说很不直观,我们并不知道这些产品代码具体是什么产品、产品金额是多少,等等信息。这些信息并不存在于日志内容中,但是我们可以通过进行外部查找的方式获得。在开始下面的练习前,你可以下载到一个名为product_lookup.csv.zip的压缩文件,下载并解压这个文件。
在Splunk页面右上角点击“管理”,在管理页面找到“对照表设定”。
点击“对照表设定”进入对照表设定管理页面。
在“查询对照表文件” 一行点击“添加”,选择要上传的product_lookup.csv文件,在“目标文件名称中”也填入product_lookup.csv,保存完成即可。
在“查对表定义”一行选择“添加”,按照下图所示定义查对表:
在“自动查询对照设置”一行选择“添加”,按照下图所示定义自动对照查询:
完成上述查找对照定义后,返回Search应用,搜索 sourcetype=access_*,编辑选择字段,这时我们可以看到会增加了product_name和price两个字段。此时我们把刚才子搜索的条件修改一下,就可以成为下面的显示结果:
sourcetype=access_*action=purchase [search sourcetype=access_* action=purchase | top limit=1clientip | table clientip] | stats count, values(product_name) AS product_nameby clientip | sort - count | rename count AS "购买数量", product_name AS "购买产品内容", clientip AS "VIP 客户"
我们把这个搜索保存下来,命名为“VIP客户”。
更多的搜索例子
下面我们列出几个搜索命令的例子给大家参考联系:
1、页面浏览总数量是多少?
sourcetype=access_* method=GET | stats count AS 页面浏览数量
保存搜索,命名为“pageviews”。
2、页面浏览数量和实际购买数字差别有多少?
sourcetype=access_*method=GET | stats count AS Views, count(eval(action="purchase")) asPurchases | eval percentage=round(100-(Purchases/Views*100)) |rename viewsas 浏览数量|renamePurchases as 购买数量 |rename percentage AS "% 差别比例"
保存搜索,命名为“购买占查看比例”。
3、所销售的商品名称、数量和收入是多少?
sourcetype=access_*action=purchase | stats count AS "购买数量",values(price) AS 单价,sum(price) AS Total by product_name | eval Total="$ ".tostring(Total,"commas")|rename product_name as 产品名称|renameTotal as 总数
保存搜索,命名为“购买和收入情况”。
4、有多少购买失败错误发生?
sourcetype=access_*action=purchase status=503 | stats count
保存搜索,命名为“失败的购买次数”。
刚才所做的搜索练习的结果都是以表格的形式展现的,Splunk还可以通过报表的形式展现各种分析结果。下面我们通过两个例子来演示如何创建报表。
首先,我们用下面的chart命令创建一个报表,展现查看和购买的商品类别数量。然后选择创建” àReport打开报表编辑器。
sourcetype=access_*method=GET | chart count AS views, count(eval(action="purchase")) ASpurchases by category_id | rename views AS "查看",purchases AS "购买",category_id AS "产品类别"
你可以在“通用”、“X轴”、“Y轴”几个地方编辑各种显示选项,例如图表标题、堆叠格式、图表类型,等等。
选项完成后可以选择 保存àSave Report保存此报表,将此报表保存名称为“查看和购买数量报表”。
下面我们再用timechart命令做一个基于时间的报表。这个例子中我们会使用到之前做的查找对照定义字段,如果你还没有做lookup定义,请参考之前的章节内容。使用下面的搜索命令
sourcetype=access_* |timechart count(eval(action="purchase")) by product_nameusenull="f"
timechart命令自动会使用最合适的一个时间间隔来做出报表,如果你有自己指定的时间间隔,可以在timechart后面增加span=xxx来定义间隔,例如span=1d、span=1h, 等等,具体可参考timechart命令的详细说明。
选择 创建àReport生成报表,填入报表标题,在“堆叠模式”中选择“堆叠图”,并应用保存。
仪表板是一个展现多个报表和搜索结果的视图。一个仪表板由多个面板内容组成,Splunk允许用户自己创建并组织仪表板的内容和样式。下面我们首先通过Dashboard& Views菜单创建一个仪表板:
创建一个新仪表板后是一个空白的视图,我们可以通过仪表板右上角的“启用”、“停用” 来编辑仪表板上的面板内容。
我们点击“新建面板”来增加几个刚刚保存过的报表和搜索。选择“各种产品购买趋势”报表,报表面板添加到仪表板后,选择EditàEdit Visualization,选择“直条图”,在“堆叠模式”处选择“stacked” (堆叠)。
继续添加其他两个报表,用鼠标拖拽排列面板的位置,最终我们就生成了一个完整的仪表板。
~ ~ 恭喜你!至此你已经完成了Splunk快速入门教程的全部内容!~ ~