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個出現最少的idlimit:限制查詢,如: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