1.数据索引和数据采集
index:后面加索引
source:是事件源自的文件,流或其他输入的名称。(对于从文件和目录监视的数据,source的值是完整路径)
sourcetype:是其来源的数据输入的格式(sourceType决定了数据的格式化方式)
host:是发起事件的网络主机的主机名,IP地址或完全限定域名。(查找源自特定设备的数据)
2.搜索关键字
例:|head 1000 只展示查询结果中的前1000条日志
top:显示字段最常见/出现次数最多的值
例:| top 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 userId 形成表,表由userId组成
sort:基于某个字段排序(升序、降序),降序的字段前面要使用-号,升序的使用+(可省略)
例:|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