Splunk数据搜索和报表
Splunk 数据搜索和报表
Splunk 是?
Splunk是机器数据分析平台,他可以收集并处理所有有机器产生的日志数据,在Splunk中可以做到”any data from any source”。我们作为管理员可以使用Splunk生成这些数据的报表、仪表盘等,赋予这冰冷枯燥日志数据的新生。
搜索是Splunk核心功能之一,基本上近乎所有的功能都是由搜索展开的。充分挖掘这些数据并从中获得有价值的信息,这让我想起在泥沙中淘金的感觉。从基本的报表和仪表,再到数据模型和功能完备的Splunk应用程序,这些都是由Splunk搜索在后台提供着支撑。
Splunk使用自己的搜索语言(SPL)。SPL有很多搜索指令,其中大部分包含有多种函数,参数和字句。
搜索
Splunk的搜索以基本搜索开头,之后是一系列的搜索指令,命令之间由管道符号(|)分割。Splunk搜索时经常会使用管道符不断精炼数据结果。
当然Splunk也可以直接搜索你想要的元素,比如一个agent、IP、error。但是只有在数据量很少的情况下才可以这么用,否则在海量(GB)级别的文本数据中搜索一个单词或者一个IP地址还不如淘到金子的可能性大。因此使用SPL和多种Splunk命令来提炼搜索。搜索的越精细,搜索的执行时间就越少,也能尽快的找到这些所需要的数据。
尽可能的在第一个管道符之前尽可能多的过滤内容,这会节省CPU和磁盘I/O。并且在编写完查询指令后可以先将搜索时间番位设置较短的区间,如果查找的结果是需要的数据再扩大搜索范围。
常用搜索指令
命令 | 描述 |
---|---|
chart/ timechart |
将结果以表格的形式输出。或者借助Splunk图表按时间顺序展示输出结果 |
dedup | 根据指定的字段删除重复的结果 |
eval | 评估新的或现有的字段和值。eval可以实用化许多不同的函数 |
fields | 指定在搜索结果中保留或移除字段 |
head | 该命令保留前X(指定值)行的结果 |
lookup | 从外部源或列表查找字段,返回附加的字段值 |
rare | 从字段中找到最少值 |
rename | 重新命名字段 |
replace | 该命令允许随后对结果进行搜索和过滤 |
sort | 该命令按升降序对结果进行排序 |
stats | 对结果执行统计运算。stats命令可以使用许多不同的函数 |
table | 该命令把结果以列表的格式输出 |
tail | 保留最后X(指定)行的结果 |
top | 从字段中找到最常见的值 |
transaction | 该命令根据共同的事务标识符将多个时间合并为单一事件 |
高级时间配置
在搜索框的右面可以选择限定时间范围,当你所要查找的时间比较复杂的时候,可以尝试使用高级选项来选取时间范围。
时间修饰符可以接受多种时间单位:秒(s),分钟(m),小时(h),天(d),星期(w),月(mon),季度(q),年(y)等。
比如要搜索在一天前的半夜整点到距离当前时间30分钟前出现过的全部事件可以这样表示:最早=-1d@d/最晚=-30m
(@)是向下取整标志符。
布尔运算符
Splunk中可以使用三种类型的布尔运算符:AND、OR、NOT。Splunk只会识别这三个大写的运算符,所以要大写!默认情况下AND运算符是隐含的,可以不写。比如 ssh AND failure
等同于ssh failure
。
搜索字段
Splunk中的字段可以被认为是有着一个或多个值的关键词。这些字段都可以被Splunk搜索。进入到Splunk的每一个数据源都会至少包含源、主机、索引、源类型这四个字段,一些数据源会有数百个附加的字段。如果原始日志数据包含有键值对或以JSON或XML结构化格式呈现的数据,Splunk会自动提取字段并使其可供搜索。
搜索特定的字段值也很简单,在当你Splunk自动识别或手表标记好的字段后,直接输入字段名与布尔运算符就可以进行搜索。如sourcetype="access_combined" status!=200
,就可以搜索含有来源类型为access_combined,并且status字段值不等于200的事件。
报表
在搜索结束后可以保存搜索供以后继续使用或者用于仪表盘。保存的搜索被称之为报表。
让搜索的结果更具有可读性
有了上面的基础,就可以来为这些数据填些花样玩法。
table命令生成数据列表
在Splunk首页选择“搜索和报表”应用程序。时间选择器选择“过去24小时”。之后搜索index=main sourcetypee=access
,之后会返回原始数据搜索事件。
此时我们在刚才的搜索指令使用管道符相连table
命令:index="main" sourcetype="access_combined" | table _time,referer_domain,method,uri_path,JSESSIONID,useragent
。
这样的列表会只显示你关注的字段,而不现实原始事件,将数据以数据列表形式呈现。
点击右上角的另存为——>报表,就可以将将搜索存储为报表,方便下次的时候使用。
搜索分段 | 描述 |
---|---|
index=”main” | Splunk中所有的数据都会保存在一个或多个索引中。尽管没有强制要求,不过再好在搜索时指定索引,这样能更快并且更精确的得到搜索结果 |
sourcetype=”access_combined” | 只搜索与access_combined数据源类型 |
|table _time,referer_domain,method,uri_path,JSESSIONID,useragent | 使用table命令时,将上一步的搜索结果放到管道左面。并告知Splunk以列表格式返回数据。Splunk会在搜索结果中只显示table命令中规定的字段 |
table命令对大范围数据搜索有很高的性能需求,尽可能的要将table用在搜索末尾,当其他的Splunk命令处理完毕后,再执行table命令。
下载报表
我们已经把数据呈现为可读的格式,因此可以下载这些数据并存储为CSV文件格式方便我们统计数据。在搜索栏右侧下方有一个导出按钮,这里可以选择其他格式:JSON、XML、CSV。
将每个字段制表
如果需要将所有字段都列成表格,没必要指定所有字段名。可以使用通配符(*)。
index="main" sourcetype="access_combined" | table *
但是!假设全部的字段有很多,然而你还不想要全部字段,只需要大部分的字段,那么你可以在使用table命令之前使用fields命令先移除你不需要的字段再使用通配符(*)。
index="main" sourcetype="access_combined" |fields - sourcetype,index,_row,date* linecount| table *
在fields命令后加上一个减号(-),Splunk会将后面的字段移除。
找出最常访问的网页
在获得了Web服务器日志后,你就能看得到你的客户喜欢哪些网站,如果可以找到最常访问的网页,那么可以在这些页面上继续开发新功能!哪些访问次数较少的可以将他们移除掉或者重新设计一下!
index="main" sourcetype="access_combined" | stats count by uri_path | sort - count
搜索分段 | 描述 |
---|---|
stats count by uri_path | 使用stats命令,将上一步的搜索结果放在管道左侧,并告知Splunk计算每个uri_path字段值的数量。 |
sort - count | 将上一步stats命令生成的count字段作为输入,并告知Splunk将统计结果进行降序(-),最常访问的网站就会显示在结果的顶端 |
搜索访问量排名前10的网页
可以使用top代替stats命令。默认情况下top会显示排名前10的网页
index="main" sourcetype="access_combined" | top uri_path
如果你需要查看更多的排行,用limit可以满足你!
index="main" sourcetype="access_combined" | top limit=20 uri_path
找出最常使用的Web浏览器
Web日志中也包含了useragent相关信息,其中包括浏览器信息和操作系统信息。
index="main" sourcetype="access_combined" | eval browser=useragent | replace *Firefox* with Firefox,*Chrome* with Chrome,*MSIE* with IE,*Safari* with Safari,*Opera* with Opera in browser | top useother=t browser
搜索分段 | 描述 |
---|---|
eval browser=useragent | 使用eval命令,创建一个新的字段browser并将useragent字段中的内通存放到browser字段中 |
replace *Firefox* with Firefox,*Chrome* with Chrome,*MSIE* with IE,*Safari* with Safari,*Opera* with Opera in browser |
使用replace命令,利用通配符(*)将browser中匹配到的内容使用with参数后面的文本替换。如果包含空格的值要加上引号,否则会导致语法识别错误 |
top limit=5 userother=t browser | top命令告知Splunk找到排名前5的浏览器,并将limit所限制导致溢出的值都归到OTHER下 |
同理也可以统计出用户所使用的操作系统。
index="main" sourcetype="access_combined" | eval os=useragent | replace *Windows* with Windows系统 ,*Mac* with Mac系统,*Linux* with Linux系统 in os | top limit=10 useother=t os