splunk搜索基本语法学习记录(基本概念)(不定时更新中)


本文只包含splunk搜索关键字和语法的介绍更新,splunk搜索语句的实例在下一个随笔记录更新
 
关键词含义

1.数据索引和数据采集

  index:后面加索引

  source:是事件源自的文件,流或其他输入的名称。(对于从文件和目录监视的数据,source的值是完整路径)

  sourcetype:是其来源的数据输入的格式(sourceType决定了数据的格式化方式)

  host:是发起事件的网络主机的主机名,IP地址或完全限定域名。(查找源自特定设备的数据)

 

2.搜索关键字

  
  head:只展示查询结果中的前多少条日志
 例:|head 1000  只展示查询结果中的前1000条日志

  top:显示字段最常见/出现次数最多的值

  例:| top 10 id      获取10个出现最多的id

 
  rare:显示字段出现次数最少的值
  例:| rare 10 id     获取10个出现最少的id

  limit:限制查询,如:limit 5,限制结果的前5条
 例:| top limit=1 ip   获取发生次数最多的ip

  rename xx as zz : 把xx设置别名为zz,多个之间用 “,”隔开
 例:|rename student01 as 小明, student02 as 小芳    student01别名是小明,student02别名是小芳 

  fields :保留或删除搜索结果中的字段。fiels – xx 删除xx字段,保留则不需要 – 符号
 例:|fields userId      保留userId字段
   |fields -userId     删除userId字段
 
  table :返回仅由参数中指定的字段所形成的表。
 例:|table userId     形成表,表由userId组成

  sort:基于某个字段排序(升序、降序),降序的字段前面要使用-号,升序的使用+(可省略)
       默认只会返回10000条数据,如果想要返回全部数据,需要在sort命令后面加上0即可
 例:|sort 0 age      age字段升序排列

  eval:评估命令     后面通过表达式进行一些计算
 例:|eval test=age+sex
   |eval 新字段1=if(字段1 in("a","b","c"),"结果1","结果2") eval if in:如果字段1 的值为a,b,c中的任意一个,则新字段1的值为“结果1”,否则新字段1的值为“结果2”

  iplocation:生成ip对应的地区信息,会在结果中加入Country,City两个字段用来表明日志中ip的所在地

 例:|iplocation ip |table Country,City,ip

  table:在查询结果中只展示对应的字段

 例:|table 字段1,字段2,字段3

  stats:将查询结果进行聚合统计,类似SQL中的group

 例:|stats count by 字段1,字段2        将查询结果按字段1和字段2分组,统计记录数量

  timechart:将查询结果以时间为x轴进行聚合统计

 语法:timechart[sep=<string>][format=<string>][partial=<bool>][limit=<int>][agg=<stats-agg-term>][<bin-options>...]((<single-agg>[By<split-by-clause>])|(<eval-expression>)BY<split-by-clause>)
 例:|timechart span=1h count by 字段        将查询结果按字段分组,统计每小时记录数

    earliest latest:将查询结果控制在某个时间范围,一般用于子查询或动态查询。

现在:now      2小时前:-2h@h    1天前:-1d@d
例:index=* earliest=-2h@h  latest=now

   replace:将字段中的值替换为新值。可以使用通配符*进行模糊匹配

语法:replace(<wc-string> WITH<wc-string>)...[IN<field-list>]
例:|replace "原值" with "新值" in 字段名

      tstats:对加速数据模型进行统计查询

语法:| tstats [prestats=<bool>] [local=<bool>] [append=<bool>] [summariesonly=<bool>][allow_old_summaries=<bool>] [chunk_size=<unsigned int>] <stats-func>...[FROM ( <namespace> | sid=<tscollect-job-id> | datamodel=<data_model-name> )][WHERE <search-query> | <field> IN (<value-list>)][BY <field-list> [span=<timespan>] ]
例:|tstats summariesonly=t count from datamodel=数据模型名 where 1=1

   regex  :将删除与指定正则表达式不匹配的结果

语法:regex (<field>=<regex-expression> | <field>!=<regex-expression> | <regex-expression>)

   rex : 使⽤该命令既可以通过以正则表达式命名的群组提取字段,也可以通过 Sed 表达式替换或取代字段中的字符。   

语法:rex [field=<field>](<regex-expression>[max_match=<int>] [offset_field=<string>])|(mode=sed <sed-expression>)

  

3.对满足条件的事件进行统计

  sort -字段, +字段, 先基于clientip降序排列之后,再对这个结果基于status升序

  stats count() :括号中可以插入字段,主要作用对事件进行计数

  stats dc():distinct count,去重之后对唯一值进行统计

  stats values(),去重复后列出括号中的字段内容

  stats list(),未去重之后列出括号指定字段的内容

  stats avg(),求平均值

     chart count():

  chart max() [求出最大值]

  chart min() [求出最小值]

  chart avg() [根据第一次的结果求出平均值]

  rex field=待提取数据的字段 "正则表达式"  (rex需要用到正则表达式来提取需要的字段)

例:|rex field=_raw "userId\":\"(?<userId>\d+)"

  注意,正则表达式中一定要给提出的字段定义名称, ?<ip>表示将新字段命名为ip

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM