使用AWS CloudWatch Insights按字段值聚合日志并绘制为多个序列

时间:2019-07-31 11:32:26

标签: amazon-web-services amazon-cloudwatchlogs aws-cloudwatch-log-insights

使用AWS CloudWatch Insights分析某些日志文件,我可以使用以下方式绘制时间仓中汇总的计数:

| stats count(*) by bin(1h)

这将产生一个图形,如预期的那样,汇总每个时间段中的所有日志。

我想按“ group”字段将数据分为A和B值。

| stats count(*) by group, bin(1h)

这将按预期返回跨时间段的日志计数,但是可视化选项卡显示“无可视化”。我希望它返回一个时间序列图,其中包含A组的序列和B组的序列。

我要去哪里错了,或者根本不可能吗?

4 个答案:

答案 0 :(得分:7)

扩展@smth的样本,我通常做的有点不同,

通过此查询,我遵循标准 nginx 访问日志上随时间聚合的状态代码的趋势

fields @timestamp, @message
| parse @message '* - * [*] "* * *" * * "-" "*"' as host, identity, dateTimeString, httpVerb, url, protocol, status, bytes, useragent
| stats count (*) as all, sum ( status < 299 ) as c_s200, sum ( status > 299 and status < 399 ) as c_s300, sum ( status > 399 and status < 499 ) as c_s400, sum ( status > 499 ) as c_s500 by bin (1m)

这里的技巧是像“status > 499”这样的表达式如果为假则返回 0,如果为真则返回 1,因此,将它添加到时间桶上可以模拟类似“count if [condition]”之类的东西

>

示例生成的图表在可视化选项卡上的样子也是如此。

amount of each stausCode aggregated on 1 minute buckets

答案 1 :(得分:5)

好的,我找到了一种解决问题的方法。看来不,你不能做

| stats count(*) by group, bin(1h)

但是,您可以使用解析来人为地创建新变量,如下所示:

parse "[E*]" as @error
| parse "[I*]" as @info
| parse "[W*]" as @warning
| filter ispresent(@warning) or ispresent(@error) or ispresent(@info)
| stats count(@error) as error, count(@info) as info, count(@warning) as warning by bin(15m)

在这里,我试图查看日志类型随时间的分布。我有三种格式的日志消息:“ [错误]”,“ [信息]”和“ [警告]”

答案 2 :(得分:2)

@smth描述的解决方法也有扩展,它可以支持比count()更复杂的统计信息。这是一个示例,它绘制了一段时间内不同实例之间的CPU使用情况的图形:

| fields (instance_id like "i-instance_1") as is_instance_1, (instance_id like "i-instance_2") as is_instance_2
| stats sum(cpu * is_instance_1) as cpu_1, sum(cpu * is_instance_2) as cpu_2 by bin(5m)

答案 3 :(得分:1)

这是基于@smth 等人的答案的另一种变体。无法根据值自动构建图表非常烦人,因此您需要明确提及每个值。

fields @timestamp, @message
| filter namespace like "audit-log"
| fields coalesce(`audit.client-version`, "legacy") as version
| parse version "legacy" as v0
| parse version "886ac066*" as v1
| parse version "93e021e2*" as v2
| stats count(*), count(v0), count(v1), count(v2) by bin(5m)

结果: CloudWatch Logs Insights visualization of the above query