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