Splunk

Splunk智能运维学习笔记三

一、前言

这章主要学习使用SPL语句进行高级搜索

二、开始

2.1.计算平均会话时间

计算某一段时间网站的会话平均时间
index=main sourcetype=access_combined | transaction JSESSIONID | stats avg(duration) AS Avg_Session_Time
transaction根据特定的字段JSESSIONID来聚合事件,从而形成单一事务。JSESSIONID是每个用户访问网站的随机会话标识符
标记事务的开始和结束位置
index=main sourcetype="access_combined" | transaction JSESSIONID startswith="GET /home" endswith="checkout" | stats avg(duration) AS Avg_Session_Time
transaction还有3个常用参数 maxpause maxspan maxevents
maxpause=30s表示事件之间的停顿不能超过30s
maxspan=30m表示事件开始和事件终止不能超过30m
maxevents=300表示事件数量不能超过300个,这个值默认是1000
下面给一个综合需求:一个事务,要求从主页请求开始,到结账为止,不超过30分钟,事件间隔不超过30秒,包含的最大事件数不超过300
index=main sourcetype=access_combined | transaction JSESSIONID startswith="GET /home" endswith="checkout" maxpause=30s maxspan=30m maxevents=300 | stats avg(duration) AS Avg_Session_Time

2.2.计算Web请求平均时间

index=main sourcetype="access_combined" | join JSESSIONID usetime=true earlier=false [search index=main sourcetype=log4j | transaction threadId maxspan=5m | eval JSESSIONID=sessionId] | stats avg(duration) AS Avg_Request_Execution_Time  

join执行次级搜索,JSESSIONID字段被用作连接事件的唯一值,在搜索中,transaction聚合所有threadId相同的事件,并使用了maxspan参数来设定应用程序事件彼此间隔不超过5分钟,然后使用eval命令创建名为JSESSIONID的字段,因为它在Web应用程序事件中不存在,只存在一个名为sessionid的字段,我们创建该字段就可以使用join了,join命令加入的usetime和earlier参数使该命令只匹配原始Web访问事件的后续事件,这可以保证只有网站访问日志之后出现的Web应用程序事件才会被返回。
还有一种更精确的计算方法

index=main sourcetype="access_combined"  OR sourcetype="log4j" | eval action=substr(uri_path,2) | eval action=lower(if(isnull(action),requestType,action)) | eval JSESSIONID=if(isnull(JSESSIONID),sessionId,JSESSIONID) | transaction threadId,JSESSIONID,action maxspan=1m | stats avg(duration) AS Avg_Request_Execution_Time

2.3.计算某个时间段的最大并发

index=main sourcetype=access_combined | transaction JSESSIONID startswith="GET /home" endswith="checkout" | concurrency duration=duration | timechart max(concurrency) AS "Concurrent checkouts"   

concurrency命令查找事件在给定事件间隔内的并发数,也就是同一开始时间发生的事件,duration字段是通过transaction命令生成的,concurrency会创建一个concurrency的字段来存储并发值

2.4.分析Web请求之间的联系

index=main sourcetype="access_combined"  NOT status=200 | associate uri status supcnt=50 | table Description Reference_Key Reference_Value Target_Key Top_Conditional_Value

使用命令associate来识别uri和status字段间的关联,associate创建了许多新字段:Reference_Key,Reference_Value和Target_Key用来表示被分析的字段,supcnt参数用来指定reference key=reference value
associate还可以用来分析数据库操作与内存使用的联系
index=main sourcetype=log4j | transaction threadId | associate supcnt=50 dbAction mem_used

2.5.预测网站流量大小

index=main sourcetype=access_combined | timechart count span=1h | predict count
除了预测网站流量大小,还可以预测购买项目的总数量
index=main sourcetype="log4j" requestType=checkout | timechart span=1h sum(numberOfItems) AS count | predict count
预测函数调用的平均响应时间
index=main sourcetype=log4j | transaction threadId | timechart span=1h avg(duration) AS avg_duration | predict upper98=high lower98=low avg_duration
必须要使用transaction按照threadId 来聚合事件,然后使用timechart来计算1小时内的平均持续时间并将其赋值给新字段avg_duration,然后通过predict来预测,upper和lower是其置信区间,指定最高和最低置信区间为98%,也就是失败的可能性

2.6.找出恶意网页

index=main sourcetype="access_combined"  | eventstats mean(bytes) AS mean_bytes,stdev(bytes) AS stdev_bytes | eval z_score=round(((bytes-mean_bytes)/stdev_bytes),2) | where z_score > 1.5 OR z_score < -1.5 | table _time clientip uri bytes mean_bytes z_score

eval计算出一个新字段z_score
eventstats计算平均字节和标准偏差
where过滤出字段z_score绝对值大于1.5的事件
还有一些命令也可以执行类似于eventstats的任务,比如anomalies,该命令可以在字段值的基础上查看事件并返回不想找到的值,它为每一个事件指派一个意外的分数,如果这个分数超过预定义的阈值就会被看成意外
index=main sourcetype=access_combined | anomalies field=nytes threshold=0.03 | table unexpectedness _raw | sort -unexpectedness
还有个命令anomalousvalues是另一个查找反常搜索的方法,它会查找给定事件范围内的整个事件,考虑值的分布,然后得出一个值是否反常的结论
index=main ssourcetype=access_combined | anomalousvalue pthresh=0.03
cluster命令可以聚合相似事件从而更易于识别异常值,这些异常值属于小群体事件或者说独立事件
index=main sourcetype=access_combined | cluster showcount=t | table cluster_count _raw | sort +cluster_count

支付宝扫码打赏 微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章

linuxwt's Picture
linuxwt

我叫王腾,来自武汉,2016年毕业后在上海做了一年helpdesk,自学了linux后回武汉从事系统运维的工作,从2017年开始写博客记录自己的学习工作,现在正在进行数据迁移到此博客,目前就职于北京神州新桥科技有限公司,个人的座右铭是:逃脱舒适区才能在闲暇的时候惬意的玩耍。

武汉光谷 https://linuxwt.com

Subscribe to 今晚打老虎

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!

Comments