AppLogs 查询语言
使用 Site24x7 AppLogs 收集、整合、索引和搜索日志,以获取可操作的洞察。添加日志配置文件和日志类型,立即开始管理您的日志。使用易于理解的查询语言搜索,快速过滤无效值并获取可操作的结果。本文档将帮助您了解查询语法、结构和类型。
概述
以下是如何在 AppLogs 中使用查询语言搜索日志的教学视频:
语法
支持的运算符
| 运算符 | 说明 |
| logtype | 搜索特定框架类型的日志 |
| monitor_name | 搜索来自特定监视器的日志 |
| monitor_group | 搜索来自特定监视器组的日志 |
| tags | 搜索共享同一标签的监视器的日志 |
| and | 添加包含前一个查询的查询约束 |
| or | 添加排除前一个查询的查询约束 |
| ratio | 计算匹配两个不同搜索条件的日志消息数量之间的比率 |
| groupby | 仅返回不重复的值,并统计指定字段中的重复次数 |
| timeslice | 根据指定的时间间隔显示日志的时间分布 |
| is empty | 表示关联字段的值为空 |
| is not empty | 表示关联字段的值不为空 |
| sum | 返回字段中所选值的总和 |
| min | 返回字段中的最小值 |
| max | 返回字段中的最大值 |
| avg | 返回字段中各值的平均值 |
| sd | 返回标准差值 |
| count_distinct | 返回不重复值的计数 |
| count | 返回与查询匹配的日志消息数量 |
| include | 仅显示搜索输出中的选定字段 |
| exclude | 从搜索输出中排除指定字段,显示其余字段的值 |
| before | 返回一小时、一天或一周前同一时间点的查询结果 |
| timeslice with before | 按时间切片比较一小时、一天或一周前同一时间点的查询结果 |
| count with before | 比较一小时、一天或一周前同一时间点的结果计数 |
| having | 对 groupby 查询应用条件并获取所需输出 |
| sort | 根据某些字段返回排序后的值 |
| STARTSWITH | 返回以给定搜索条件开头的值 |
| LIKE | 允许在值中使用带星号的搜索条件 |
| in | 类似于对多个值使用 'or' 与 '=' 的组合 |
| notin | 类似于对多个值使用 'and' 与 '!=' 的组合 |
| histo | 为数值字段生成直方图 |
| range | 返回直方图的自定义范围 |
| range interval | 返回直方图的固定间隔输出 |
| top | 获取分组元素的最新值。 |
| limit | 指定 groupby 查询的最大结果数量 |
| percentage | 以百分比(100)的形式显示比率。 |
| percentile and percents | 表示给定百分比的数据低于该值。 |
| not | 添加查询约束,从查询结果中排除特定结果 |
数值运算符
如果字段是数值字段,您可以使用运算符(>、<、=、!=、<= 或 >=)将其与对应值进行匹配。
| 运算符 | 说明 |
| > | 大于。 |
| << /td> | 小于。 |
| = | 等于。 |
| >= | 大于等于。 |
| <=< /td> | 小于等于。 |
- CONTAINS、NOTCONTAINS 和 STARTSWITH 等操作不支持 monitor_name、monitor_group、log_source 和 tags 字段,因为这些字段不支持此类过滤条件。
- 查询条件中字段值的单位也可以使用转换后的单位,而不必使用原始单位。
例如,timetaken 字段的单位是毫秒。因此,除了以下写法:
logtype="Apache Access Logs" and timetaken>1000
也可以写成:
logtype="Apache Access Logs" and timetaken>1s
字符串运算符
如果字段是字符串字段或任何非数值字段,可以使用以下运算符:=、!= 和 CONTAINS。
| 运算符 | 说明 |
| = | 等于。 |
| != | 不等于。 不包含。 |
| CONTAINS | 返回包含指定值的结果。 |
| DOES NOT CONTAIN | 返回不包含指定值的结果。 |
查询语言中的"CONTAINS"查询与标准字符串"CONTAINS"查询的工作方式不同。它检查日志中的匹配词元(token),因此不含空格、特殊字符或大小写变化的单个单词会被索引为单一词元,"CONTAINS"查询将无法检索到该词元。
例如,请参考以下示例字符串及其对应的词元:
| 示例字符串 | 词元 |
| User | U, ser |
| UserName | User -> U, ser, Name->N,ame |
| Status200 | Status->S, tatus, 200 |
在下方截图(图 1)中,第一条日志行被"CONTAINS"查询(图 2)排除,因为词语"error"与"CONTAINS"查询将其视为单一词元的"errortest"不匹配。

图 1

图 2
在此类情况下,您可以使用"LIKE"查询,如下方截图所示:

查询模板
查询的通用格式如下:
logtype = "examplelogtype" and "exampleNumericField1" [>,<,=,<=,>=] "dummynumber" or "examplestringfield1" [CONTAINS,!=,=] "examplesubstring1" groupby "examplestringfield2" timeslice [h,d,m]
查询约束的限制
- timeslice 和 count 约束之后不能再有其他约束。
- groupby 约束之后只能跟 timeslice 约束。
- Count 和 count distinct 约束不能同时存在。
- Count 约束只能用于查询末尾,且查询中不应包含 groupby、timeslice 和 aggregation 约束。
查询语言
使用查询语言搜索时,请遵循以下格式:
logtype="(name of log type)" and (other conditions)
在此格式中:
- (日志类型名称)应为之前已添加的任意日志类型的显示名称。
- (其他条件)可以是任意条件。每个条件可使用以下运算符:and、or 或 !。
示例查询:
logtype="SysLogs" and application CONTAINS "systemd"
在此示例中:
- (日志类型名称)为 SysLogs。
- (其他条件)为 application CONTAINS "systemd"。

结果:该查询将获取日志类型为"SysLogs"且应用程序字段包含"systemd"的日志条目。
组合查询
您也可以像以下示例一样将多个条件组合在一起。
-
带监视器名称的简单查询
logtype="SysLogs" and monitor_name CONTAINS "Zylker-server" and application CONTAINS "kernel"
在此查询中,监视器名称和应用程序字段值都将用于搜索日志。监视器名称为"Zylker-server"且应用程序包含"kernel"的结果将被显示。
logtype="SysLogs" and (application CONTAINS "kernel" or application CONTAINS "systemd") and message CONTAINS "pcieport"
在此查询中,括号内的条件被组合在一起。应用程序字段包含"kernel"或"systemd"的任何日志条目都将作为结果显示。
-
Timeslice(时间切片)
在查询末尾添加 timeslice(时间段)会生成一个表格,将所查询的总时间段按查询中指定的时间切片划分,并与日志条目数量进行对比。timeslice 的可用单位为 d(天)、h(小时)或 m(分钟)。
logtype="SysLogs" timeslice 2h

-
Or(或)
返回满足所提供条件之一的值。
logtype="IIS Access Logs" and (method="GET" or method="POST" or method="PUT")
该查询获取所有 GET、POST 和 PUT 方法的请求。

-
is empty(为空)
当关联字段不包含任何值时返回结果。
logtype="Windows Event Logs" and IsEmpty(user)

-
is not empty(不为空)
当关联字段包含任意值时返回结果。
logtype="Windows Event Logs" and IsNotEmpty(source)

-
Ratio(比率)
使用此运算符,您可以查找两个查询输出之间的比率。使用 or 查询比较两个条件,并在其后追加 ratio 以获取搜索查询的结果。使用 timeslice 可按特定时间间隔筛选比率。
logtype="Apache Access Logs" and (status=200 or status>200) ratio
logtype="Apache Access Logs" and (status=200 or status>200) timeslice 1h ratio

-
Groupby(分组)
Groupby(字段名称)显示指定字段中具有相同值的条目数量。
logtype="SysLogs" groupby application
在此查询中,将显示"application"字段中具有相同值的条目数量。

-
SUM(), MIN(), MAX(), AVG()
使用此功能,您可以查找日志中数值字段的最小值、最大值、平均值和总和。
例如,当您希望获取日志中数值的聚合数据时,可以使用此功能。
logtype="IIS Access Logs" AVG(timetaken) MIN(timetaken) MAX(timetaken) SUM(timetaken)
该查询获取聚合后的响应时间值。

-
标准差
使用此功能,您可以计算一组数据的标准差值,从而确定给定数据集的波动程度。您可以使用 sd 查找 responsesize 和 timetaken 等指标相对于其平均值的偏差。
例如,以下查询:
logtype="Apache Access Logs" sd(responsesize)
返回日志中响应大小的标准差值。

-
Count distinct(不重复计数)
查询中的 Count distinct 仅获取不重复值的计数。
例如,当您想了解日志中指定不重复值的总数时,可以使用 count distinct。
logtype="Windows Event Logs" COUNT_DISTINCT(source)
结果将显示不重复值的计数。
Count 和 Count distinct 不能同时使用。

-
Count(计数)
在查询末尾使用 Count 将返回与查询约束匹配的日志消息总数。
logtype="Windows Event Logs" and source CONTAINS "Microsoft-Windows-Security-Auditing" count
结果获取满足上述条件的日志消息数量。

-
组合使用 groupby 和聚合
以下搜索将生成一个 groupby 表格,并附有 聚合值的额外列。
例如,当您希望获取 groupby 表格中分组值的聚合结果时,此组合非常有用。
logtype="IIS Access Logs" AVG(timetaken) MIN(timetaken) MAX(timetaken) groupby stemuri
在此查询中,将显示不重复 stemuri 的 Min、Max、Avg 和 Count。

-
组合使用 timeslice 和聚合
以下搜索将生成一个 timeslice 表格,并附有 聚合值的额外列。
例如,当您希望按时间维度获取聚合结果时,可以使用此组合。
logtype="IIS Access Logs" AVG(timetaken) MIN(timetaken) MAX(timetaken) timeslice 1h
在此查询中,将显示按一小时时间切片的 Min、Max、Avg 和 Count。

-
组合使用 groupby 和 timeslice
以下搜索将生成一个 timeslice 表格,并附有 groupby 值的额外列。从左到右,各列依次为:timeslice、count 和值。
例如,当您希望同时对结果进行时间切片和按给定约束分组时,可以在查询中同时使用 groupby 和 timeslice。
logtype="SysLogs" groupby application timeslice 1d
在此查询中,将显示按天时间切片且"application"字段具有相同值的日志条目数量。

-
多重 groupby
以下搜索将生成一个包含多个 groupby 选项的表格。
例如,当您有多个 groupby 选项时,可以使用逗号分隔的 groupby,从而在单个表格中整合并查看多层次分组结果。
logtype="ServerLogs" groupby sourcefilename,loglevel,threadname
在此查询中,多个 groupby 条件被组合在一起。

-
Include(包含字段)
在搜索查询中使用 Include 将只显示指定字段的搜索结果。
logtype="SysLogs" | include(application,message)
在此查询中,搜索输出将连同 application、message 一起显示。

-
Exclude(排除字段)
在搜索查询中使用 Exclude 将在搜索结果中省略指定字段。
logtype="SysLogs" | exclude(pid)
在此查询中,搜索输出将不显示 pid 字段。

-
Before(之前)
使用此运算符,您可以查看一小时、一天或一周前同一时间点的查询结果。
例如,当您希望获取给定查询在某一时间之前的结果时,请使用 before。
logtype="Apache Access Logs" avg(responsesize) | before 7d
该查询将获取一周前同一时间点的 avg(responsesize)。

-
Timeslice with before(时间切片与之前)
在查询中使用此功能,您可以按频繁的时间间隔比较一小时、一天或一周前同一时间点的查询结果。
例如,当您希望按指定频率比较上周同一天的状态码趋势时,可以将 timeslice 与 before 结合使用。
logtype="IIS Access Logs" and statuscode>400 timeslice 1h | before 7d
该查询将按一小时间隔获取一周前同一时间点的状态码 > 400。

-
Count with before(计数与之前)
在查询中使用此功能,您可以比较一小时、一天或一周前同一时间点的查询结果计数。
例如,当您希望比较上周同一天的失败状态码数量时,可以将 count 与 before 结合使用。
logtype="IIS Access Logs" and statuscode>200 count | before 7d
该查询将获取一周前同一时间点的失败状态码。

-
Having(条件过滤)
使用此运算符,您可以对 groupby 查询应用条件并获取所需的输出结果。
logtype="Apache Access Logs" groupby requesturi having avg(responsesize)>10240
该查询获取 avg(responsesize)>10240 的 requesturi 输出结果。

-
Sort(排序)
根据某些字段对请求进行排序。
例如,当您希望根据某些值对结果进行整理或分类时,可以使用 sort。
注意:此功能只能与 group 查询一起使用。
logtype="Apache Access Logs" groupby requesturi sort avg(responsesize)
该查询获取按 avg(responsesize) 值排序的 requesturi 输出结果。

-
STARTSWITH(以……开头)
返回以给定搜索条件开头的值。其结果类似于在末尾使用星号(*)的 LIKE 查询,即搜索 STARTSWITH "Log" 类似于搜索 LIKE "Log*"。
logtype="Windows Event Logs" and source STARTSWITH "Micro"
该查询获取所有以"Micro"开头的来源的结果。

-
LIKE(模糊匹配)
区分大小写,允许在值中使用星号作为通配符。
例如,LIKE "Log*n" 将同时匹配 Logon 和 Login。
logtype="Windows Event Logs" and source LIKE "Microsoft*Auditing"
该查询获取来源包含 Microsoft Security Auditing、Microsoft Windows Auditing 等的所有结果。

-
in(在集合中)
类似于对多个值使用 'or' 与 '=',集合中的所有值都将被比较。
例如,Status in("200","404","500") 等同于 (status="200" or status="404" or status="500")。
logtype="Apache Access Logs" and referer in("Refer 2, "Refer 1")
此查询获取类似于 (referer="Refer 2" or referer="Refer 1") 的结果。

-
notin(不在集合中)
类似于对多个值使用 'and' 与 '!=',集合中的所有值都将被比较。
例如,status notin("200","404","500") 等同于 (status!="200" and status!="404" and status!="500")。
logtype="Apache Access Logs" and referer notin("Refer 2, "Refer 1")
此查询获取类似于 (referer!="Refer 2" or referer!="Refer 1") 的结果。

-
histo(直方图)
为数值字段生成直方图。类似于 groupby,但返回的是值的范围而非共同值。
logtype="Apache Access Logs" histo responsesize
该查询根据响应大小生成直方图。

注意:
您也可以将 histogram 与 groupby 结合使用,以进一步对日志数据进行分区和分析。
例如:
logtype="Apache Access Logs" histo responsesize groupby requesturi

logtype="Apache Access Logs" groupby requesturi histo responsesize

-
range(范围)
用于从直方图中获取自定义范围。range 只能在 histo 之后使用。
例如,status notin("200","404","500") 等同于 (status!="200" and status!="404" and status!="500")。
logtype="Apache Access Logs" histo responsesize range(3800 to 4000,4200 to 4400)
该查询获取指定自定义范围值的直方图。

-
range interval(范围间隔)
用于从直方图中获取自定义时间间隔的结果。range interval 只能在 histo 之后使用。
例如,在直方图字段后指定范围间隔时,将获取自定义时间间隔的直方图。
logtype="Apache Access Logs" histo timetaken 1s
该查询获取 1s 自定义时间间隔的直方图。

-
top(最新值)
将 top 与 groupby 查询结合使用,可从分组元素中提取最新值。通过 top 查询,您可以从日志中检索重要指标。
logtype="IIS Access Logs" top(ServerIP,stemuri,clientip) groupby Methodname
通过上述查询,您可以获取各种主题状态的最新值,例如主题偏移量和延迟计数。

与 groupby 查询结合使用,可显示超过默认十条的分组元素结果。调整 limit 值以获取所需数量的结果。默认情况下,groupby 查询将返回前 10 条结果。要获取更多结果,需要使用 limit N。N 的最大允许值为 1000。
logtype="Infrastructure Events" groupby SourceName limit 30
通过上述查询,您可以检索按来源名称分类的最多 30 条日志条目。

-
percentage(百分比)
使用 percentage 从日志中获取一般统计信息。您可以通过以下查询查找失败请求的百分比。
logtype="IIS Access Logs" and statuscode>=400 percentage

-
percentile and percents(百分位数与百分数)
使用 percentile 和 percent 可更准确地解读性能数据。
logtype="IIS Access Logs" percentile(TimeTaken percents(95))
通过上述查询,您可以查找请求处理时间的第 95 百分位数。

-
组合使用 percentile、timeslice 和聚合
以下搜索将生成一个趋势图,同时将平均值和百分位数值显示为趋势线。聚合百分位 timeslice 查询提供在特定时间间隔内聚合的百分位数值。
例如,当您希望按时间维度比较平均值和百分位数结果时,可以使用此组合。
logtype="IIS Access Logs" avg(TimeTaken) percentile(TimeTaken) percents(99) timeslice 15m

not(排除):
返回从查询结果中排除特定结果后的值。
logtype="Windows Event Log" and level!="Information" not (computername like "*PRODUCTION01*" or computername like "*production1*") groupby computername
该查询获取 Windows Event Log 中级别不为"Information"且计算机名称不包含"PRODUCTION01"或"production1"的所有日志条目。

最近搜索:
您可以从最近搜索历史记录中重复使用之前的搜索,而无需每次重新输入。请按以下步骤查看:
-
- 点击搜索框中的
图标。 - 您可以在已保存的搜索下方查看最近的搜索查询。您还可以保存搜索查询以供将来使用。

- 点击搜索框中的
自动值建议
借助自动值建议功能,您可以使用最相关的字段值实时动态调整和修改查询。系统会自动为每个字段推荐多达一千个频繁出现的值,从而实现更精准的过滤和高效的故障排除。
要使用自动值建议,请按照以下简单步骤操作:
- 导航到 AppLogs 标签页。
- 输入搜索查询(例如 logtype="Automation Logs")。
- 输入时,系统将自动建议字段名称及其字段值。
这些值建议适用于支持 groupby 查询功能的字段,侧重于预定义值。您可以从这些建议中进行选择,以进一步优化查询。

字段浏览器
通过字段浏览器中的字段值调整搜索结果,实时修改查询。您可以按照以下简单步骤操作:
-
导航到 AppLogs 标签页。
-
输入搜索查询(例如 logtype="Nginx Access Logs")。
-
日志结果显示后,从日志输出表格的左侧访问字段浏览器,以查看字段列表和日志结果的前五个值。

