使用AWS CloudWatch Insights分析某些日志文件,我可以使用以下方式绘制时间仓中汇总的计数:
| stats count(*) by bin(1h)
这将产生一个图形,如预期的那样,汇总每个时间段中的所有日志。
我想按“ group”字段将数据分为A和B值。
| stats count(*) by group, bin(1h)
这将按预期返回跨时间段的日志计数,但是可视化选项卡显示“无可视化”。我希望它返回一个时间序列图,其中包含A组的序列和B组的序列。
我要去哪里错了,或者根本不可能吗?
答案 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]”之类的东西
>示例生成的图表在可视化选项卡上的样子也是如此。
答案 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)