更新时间:2022-09-30 10:34:12
搜索条件方式可包含:分词全文检索、短语检索、字段值检索、逻辑运算符检索以及 SPL 命令检索。
► 分词全文检索:
全文检索支持空格自解析分词,空格将使用 AND 逻辑,实现多个关键词组合搜索。搜索结果和关键词可实现精确匹配,已匹配的关键词支持高亮显示。
检索关键词时,系统不区分大小写;查询多个关键词时不区分关键词的先后顺序。

注意:若搜索关键词本身包含空格时需添加转义符“\”或双引号,检索结果默认按时间排序。
分词检索使用场景:
使用场景 功能说明 限制条件
输入单个关键词 在搜索框中输入单个关键词,如:MySQL,则搜索结果只展示包含:MySQL 的日志信息 • 若单个关键词为停用词或停止符(标点符号),且停用词及停止符在日志信息中不具备特殊意义,故不执行搜索操作;
• 特殊意义符号,如:邮箱的 @ 符号、http 链接中的符号、2020-09-01中的“-”符号等,系统支持自动识别及匹配
输入多个关键词(空格分隔) 在搜索框中输入多个关键词,如:MySQL CPU Error,则搜索结果只展示同时包含 MySQLCPUError 这 3 个关键词的日志信息 空格自动以 AND 逻辑进行分词处理,执行搜索时无需考虑搜索输入框中关键词的顺序
输入连续关键词(空格转义) 在搜索框中输入多个关键词且对空格进行转义处理,如:警告\ 失败,则搜索结果只展示包含警告 失败的日志信息;忽略停用词且顺序需保证警告在前失败在后,与搜索框输入顺序保持一致
说明:搜索结果等同于输入:“警告 失败”,添加“”双引号后搜索结果中仅展示与搜索框输入顺序一致的日志信息
• 此场景中空格进行转义处理,故不执行分词;
• 2 个关键词之间若存在连续的停用词或停止符,也会展示在搜索结果中
关键词+* 在搜索框中输入 MySQL*,则搜索结果会展示包含以 MySQL 开头的所有日志信息 -
*+关键词 在搜索框中输入 *MySQL,则搜索结果会展示包含以 MySQL 结尾的所有日志信息 -
*+关键词+* 在搜索框中输入 *MySQL*,则搜索结果会展示包含以 MySQL 的所有日志信息 -
输入关键词中包含“&&”符号 在搜索框中输入 MySQL && CPU,则搜索结果会展示同时包含 MySQL、CPU 这 2 个关键词的日志信息 “&&”的逻辑与 AND 一致
输入关键词中包含“||”符号 在搜索框中输入 MySQL || CPU,则搜索结果会展示包含 MySQL 或 CPU 这 2 个关键词的日志信息 “||”的逻辑与 OR 一致

说明:停用词,指在信息检索中为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词被称为 Stop Words。停用词若在日志信息中附有特殊意义,系统仍对其执行搜索操作。停用词通常为英文中的冠词、介词、副词或连词等,常见停用词为:a、an、and、are、as、at、be、but、by、for、if、in、into、is、it、no、not、of、on、or、such、that、the、their、then、there、these、they、this、to、was、will、with。
示例:输入“测试 节点”后进行搜索,结果会同时包含测试 节点,且匹配的词高亮显示,如下所示:

► 短语检索
若需要查询短语,需要用双引号把短语括起来,查询结果不区分大小写。
示例:查询“normal”,匹配的日志也必须包含“normal”。

► 字段值检索
若需根据特定的字段值过滤数据时,用户可以采用字段值检索的方式过滤数据。
格式为:field:value,其中 field 为字段,字段类型为字符串,搜索时区分大小写字母,不允许使用 ?* 等字符;value 可为字符串或数值,字符串区分大小写字母,可使用 * 字符。
示例如下:
• 示例 1:type:Agent:表示过滤日志类型为 Agent 的数据;
• 示例 2:IP:192.*.*.*:表示采用通配符的方式过滤以 192 开头的 IP 地址。

► 逻辑运算符检索
逻辑运算符包含:AND、OR、NOT、(),其中 AND、OR、NOT 必须大写,逻辑运算符搜索可更有效的提高搜索效率。
• 示例 1:测试 AND Agent:表示 测试Agent  需在日志中同时出现才匹配搜索条件,AND 默认可缺省;
• 示例 2:测试 OR Agent:表示 测试 或 Agent  需在日志中出现 1 个即可匹配搜索条件;
• 示例 3:NOT 测试:表示不包含 测试 字段的日志才匹配搜索条件;
• 示例 4:测试 AND (Agent OR aix):表示日志中必须包含测试,和 Agentaix  中的任意 1 个,即可匹配搜索条件,其中()可改变布尔运算规则。

► SPL 命令
SPL 命令包含:rename 命令、parse 命令、join 命令、top 命令、stats 命令,命令之间支持组合使用。SPL 命令可以对日志数据进行字段重命名、动态抽取、关联性分析等操作。
• rename 命令:主要用于解决对已采集数据的再处理问题,用户可通过 rename 命令将字段重命名为所需的字段名。
说明:重命名只在 rename 命令运行时生效,运行结束重命名失效。
格式:* | rename 字段 as 重命名名称
• 用法 1:重命名字段
• 示例 1:输入:* | rename time as times,将字段“time”重命名为“times”,如下所示:

• 用法 2:重命名多个字段;
• 示例 2:输入:* | rename time as times,jobId as jobIds,将“time”重命名为“times”,同时将“jobId”重命名为“jobIds”,如下所示:

• parse 命令
用于搜索时动态抽取字段,对已进入系统的数据进行新字段提取过滤。
注意:正则表达式(regex)中新提取的字段不能与已有的字段重名。
格式:* | parse <field>"<regex>"
• 用法 1:对原始日志进行字段提取
• 示例 1:输入:* | parse “(?\d+\.\d+\.\d+\.\d+)”,用于将日志数据 ip 信息提取出来并生成 ip 字段,并对 ip 字段值进行统一抽取。

• 用法 2:对已解析字段再次进行字段提取
• 示例 2:输入:* | parse @timestamp “(?<日期>\S+)\s(?<小时>\d{2}).*”,将“时间”字段进行二次抽取分别抽取“日期”和“小时”字段,如下所示:

          • 用法 3:与 Rename 命令联用
• 示例 3:输入:* | parse @timestamp “(?<日期>\S+)\s(?<小时>\d{2})*” | rename source as sources,将 @timestamp 字段抽取,并通过 rename 命令将“source”重命名为“sources",如下所示:

• join 命令
用于提供便捷的数据关联功能,供临时的分析场景、数据清洗使用。用户可在 AnyRobot 系统内,通过 join 命令将主查询的结果(字段集)和子查询的结果(字段集),通过关键字段关联。
格式:* | join type=left field-list [sub-search]
⇒ type:连接类型,包含内连接 inner、左连接 left 两种,默认为左连接(非必填项)。
其中,内连接表示:主查询和子查询的数据库表中必须同时存在连接字段值的记录,数据才会被检索出来;左连接表示:只需在主查询数据库中存在连接字段值的记录,数据就会被检索出来;
⇒ field-list:连接字段(必填项);
⇒ sub-search:子查询(必填项),将子查询的结果与主查询进行连接
• 用法 1:与 rename 命令联用,重命名关联字段
• 示例 1:输入:type:"as访问日志"| join type=left 错误ID[type:”https 告警转发”] | rename 错误ID as 错误IDs,表示对“as访问日志”包含“错误ID”的数据,与“https 告警转发”包含“错误ID”的数据进行左连接,并将“错误ID”重命名为“错误IDs”,如下所示:

         
• 用法 2:与 parse 命令联用提取字段,再使用 join 命令进行关联
• 示例 2:输入:type:"as访问日志" | parse 用户 "(?<用户名>.*)" | join type=inner 用户名[type:”as 操作日志”] | rename 用户 as 用户名
• top 命令
用于统计指定字段的所有值中出现频次最高的字段值的集合。命令返回搜索结果中包含字段值出现次数 (count) 计数以及所占百分比 (percentage);并支持根据字段分组后,再进行频次的统计。
• stats 命令
stats 是一个基础性命令,是进行搜索、图表重构的前置需求。用于对搜索的结果集进行聚合统计,聚合方式包括:计数、最大值、最小值、平均值、总和、百分比分布、百分等级。还可以使用 by 语句对指定的字段进行分类,再对每个分类进行聚合统计计算,返回的结果为每个分类对应的结果集。
格式:*| stats stats-function (field1,field2,…..) AS field BY field-list
⇒ stats-function:eval 函数表达式
⇒ (field1,field2,…..):聚合字段
⇒ AS field:指定字段用于保存聚合统计的结果集
⇒ BY field-list:可选参数,用于设置指定字段进行分类聚合统计计算
State-function总结如下:
函数名 作用 示例
min 用于统计字段的最小值 stats min(a) by type
max 用于统计字段的最大值 stats max(a) by type
avg 用于统计字段的平均值 stats avg(a) by type
extended_stats 用于统计字段的个数、最大值、最小值、平均值、总和、平方和、方差、标准差 stats extended_stats(a) by type
sum 用于统计字段的总和 stats sum(a) by type
percentiles 用于统计不同百分位上的值 stats percentiles(a,30,60,90) by type
percentile_ranks 用于统计不同值的百分位 stats percentile_ranks(arPort,5140,20011,20012)
cardinality 用于统计字段值的的不同值个数 stats cardinality(a) by type
count 用于统计字段的个数 stats count(a) by type

说明:min、max、avg、extended_stats、sum、percentiles、percentile_ranks 函数仅允许统计数值型字段。
• 用法 1:返回每个主机的平均传输速率
• 示例 1:sourcetype=access* | stats avg(kbps) BY host
• 用法 2:搜索 access 日志,计算 “referer_domain”字段中值 top 100 的总数
• 示例 2:输入:sourcetype=access_combined | top limit=100 referer_domain | stats sum(count) AS total
• 用法 3:假设有一个字段【销售额】,字段值为 15、15、30、40、50
• 示例 3: 
• 计数:返回目标字段(任意类型字段)的计数。stats count (销售额)=5
• 最大值:返回目标字段(数值型字段)中值最大的字段值。stats max (销售额)=50
• 最小值:返回目标字段(数值型字段)中值最小的字段值。stats min (销售额)=15
• 平均值:返回目标字段(数值型字段)的平均值。stats avg (销售额)=30
• 总和:返回目标字段(数值型字段)的总和。stats sum (销售额)=150
• 去重计数:返回目标字段(任意类型字段)的去重计数。stats cardinality (销售额)=4
• 统计目标字段(数值型字段)的计数、最大值、最小值、平均值、总和、平方和、方差、标准差。stats extended_stats(销售额)=5(计数)、50(最大值)、15(最小值)、30(平均值)、150(总和)、5450(平方和)、237.5(方差)、15.41104(标准差)
• 百分位数:返回目标字段(数值型字段)的自定义百分位数。stats percentiles (销售额,70)=38,表示:70% 的销售额是小于 38 的。stats percentiles (销售额,20,50,90)=15,30,46,表示:20%的销售额小于 15;50%的销售额小于 30;90%的销售额小于 46
• percentile_ranks:返回指定字段值(数值型)对应的百分位数。stats percentile_ranks (销售额,50)=100%,表示销售额 50 对应的百分位数是 100%,即销售额 100% 小于 50。