1. 程式人生 > 其它 >splunk搜尋基本語法學習記錄(基本概念)(不定時更新中)

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