本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
stats
使用 stats
创建日志数据的可视化效果,例如条形图、折线图和堆叠面积图。这可以帮助您更有效地识别日志数据中的模式。 CloudWatch Logs Insights 为使用该stats
函数和一个或多个聚合函数的查询生成可视化效果。
例如,Route 53 日志组中的以下查询返回按查询类型显示 Route 53 记录每小时分布的可视化结果。
stats count(*) by queryType, bin(1h)
所有此类查询都可以生成条形图。如果查询使用 bin()
函数,按一个字段对数据随时间的变化进行分组,您还可以查看折线图和堆叠面积图。
bin
函数支持以下时间单位和缩写。对于所有包含多个字符的单位和缩写,支持添加复数形式。这样,hr
和 hrs
都可以指定小时数。
millisecond
ms
msec
second
s
sec
minute
m
min
hour
h
hr
day
d
week
w
month
mo
mon
quarter
q
qtr
year
y
yr
可视化时间序列数据
时间序列可视化适用于具有以下特征的查询:
-
此查询包含一个或多个聚合函数。有关更多信息,请参阅 Aggregation Functions in the Stats Command。
-
此查询使用
bin()
函数按一个字段对数据分组。
这些查询可以生成折线图、堆叠面积图、条形图和饼图。
示例
有关完整的教程,请参阅教程:运行生成时间序列可视化的查询。
以下是更多适用于时间序列可视化的示例查询。
以下查询将生成 myfield1
字段的平均值的可视化(每 5 分钟创建一个数据点)。每个数据点都是前一个五分钟的日志中的 myfield1
值的平均值的聚合。
stats avg(myfield1) by bin(5m)
以下查询根据不同字段生成三个值的可视化(每 5 分钟创建一个数据点)。由于查询包含聚合函数并使用 bin()
作为分组字段,因此生成了可视化。
stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)
折线图和堆叠面积图限制
如果查询聚合日志条目信息但不使用 bin()
函数,则可以生成条形图。但是,这种查询无法生成折线图或堆叠面积图。有关这些查询类型的更多信息,请参阅可视化按字段分组的日志数据。
可视化按字段分组的日志数据
您可以为使用 stats
函数以及一个或多个聚合函数的查询生成条形图。有关更多信息,请参阅 Aggregation Functions in the Stats Command。
要查看可视化,请运行查询。接下来,选择 Visualization(可视化)选项卡,选择 Line(折线图)旁边的箭头,然后选择 Bar(条形图)。在条形图中,可视化限制为最多 100 个条形。
示例
有关完整的教程,请参阅教程:运行生成按日志字段分组的可视化的查询。以下部分包括更多适用于按字段可视化的示例查询。
以下VPC流日志查询查找每个目标地址每次会话传输的平均字节数。
stats avg(bytes) by dstAddr
您还可以生成每个结果值包含多个条形图的图表。例如,以下VPC流日志查询查找每个目标地址每次会话传输的平均字节数和最大字节数。
stats avg(bytes), max(bytes) by dstAddr
以下查询为每个查询类型查找 Amazon Route 53 查询日志的数量。
stats count(*) by queryType
在单个查询中使用多个 stats 命令
您可以在单个查询中使用多达两个 stats
命令。这可让您对第一个聚合的输出执行额外的聚合。
示例:使用两个 stats
命令进行查询
例如,以下查询首先查找 5 分钟条柱中的总流量,然后计算这些 5 分钟条柱中的最高、最低和平均流量。
FIELDS strlen(@message) AS message_length | STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m) | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb
示例:将多个 stats 命令与其他函数(例如 filter
、fields
、bin
)结合
您可以在单个查询中将两个 stats
命令与其他命令(例如 filter
和 fields
)结合。例如,以下查询查找会话中不同 IP 地址的数量并按客户端平台查找会话数,筛选这些 IP 地址,最后找到每个客户端平台的会话请求平均值。
STATS count_distinct(client_ip) AS session_ips, count(*) AS requests BY session_id, client_platform | FILTER session_ips > 1 | STATS count(*) AS multiple_ip_sessions, sum(requests) / count(*) AS avg_session_requests BY client_platform
可以在带有多个 stats
命令的查询中使用 bin
和 dateceil
函数。例如,以下查询首先将消息组合成 5 分钟的块,然后将这些 5 分钟的块聚合为 10 分钟的块,并计算每个 10 分钟块内的最高、最低和平均流量。
FIELDS strlen(@message) AS message_length | STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)
注释和限制
一个查询最多可以有两个 stats
命令。无法更改此配额。
如果您使用 sort
或 limit
命令,则它必须出现在第二个 stats
命令之后。如果它出现在第二个 stats
命令之前,则查询无效。
当一个查询有两个 stats
命令时,查询的部分结果要等到第一个 stats
聚合完成后才会开始显示。
在单个查询的第二个 stats
命令中,您只能引用第一个 stats
命令中定义的字段。例如,以下查询无效,因为 @message
字段在第一个 stats
聚合后将不可用。
FIELDS @message | STATS SUM(Fault) by Operation # You can only reference `SUM(Fault)` or Operation at this point | STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message
在第一个 stats
命令之后引用的任何字段都必须在此第一个 stats
命令中定义。
STATS sum(x) as sum_x by y, z | STATS max(sum_x) as max_x by z # You can only reference `max(sum_x)`, max_x or z at this point
重要
bin
函数始终隐式使用 @timestamp
字段。这意味着,如果未使用第一个 stats
命令传播 timestamp
字段,就无法在第二个 stats
命令中使用 bin
。例如,以下查询无效。
FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes BY @logStream | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field
相反,在第一个 stats
命令中定义 @timestamp
字段,然后就可以在第二个 stats
命令中结合 dateceil
使用该字段,如下例所示。
FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream | STATS avg(ingested_bytes) BY dateceil(@t, 5m)
用于统计数据的函数
CloudWatch Logs Insights 支持统计数据聚合函数和统计数据非聚合函数。
在 stats
命令中使用统计聚合函数,并将其用作其他函数的参数。
函数 | 结果类型 | 描述 |
---|---|---|
|
number |
指定的字段中值的平均值。 |
|
number |
计算日志事件的数量。 |
|
number |
返回字段的唯一值的数量。如果字段具有非常高的基数(包含许多唯一值),则 |
|
LogFieldValue |
所查询的日志中此日志字段的值的最大值。 |
|
LogFieldValue |
所查询的日志中此日志字段的值的最小值。 |
|
LogFieldValue |
百分位数指示某个值在数据集中的相对位置。例如, |
|
number |
指定的字段中值的标准偏差。 |
|
number |
指定的字段中值的总和。 |
统计非聚合函数
在 stats
命令中使用非聚合函数并将其用作其他函数的参数。
函数 | 结果类型 | 描述 |
---|---|---|
|
LogField |
从查询的日志中具有最早时间戳的日志事件返回 |
|
LogField |
从查询的日志中具有最晚时间戳的日志事件返回 |
|
LogField |
返回在查询的日志中排在第一位的 |
|
LogField |
返回在查询的日志中排在最后一位的 |