17

我有一组 json 格式的 cloudwatch 日志,其中包含一个用户名字段。如何编写一个计算每月唯一用户数的 cloudwatch 指标查询?

4

4 回答 4

18

你现在可以这样做了!使用 CloudWatch Insights。

API:https ://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartQuery.html

我正在处理类似的问题,我对该 API 的查询类似于:

fields @timestamp, @message
| filter @message like /User ID/
| parse @message "User ID: *" as @userId
| stats count(*) by @userId

获取用户 ID。现在这会返回一个列表,然后计算每个列表。获得唯一性的总数可以在获得响应后完成,也可以通过更多地使用查询来完成。

您可以使用 AWS 控制台中的 CloudWatch Insights 页面轻松处理查询。

于 2019-10-04T09:46:35.560 回答
14

count_distinct现在,您可以使用CloudWatch Insights 查询中的指令计算唯一字段值。

例子:

fields userId, @timestamp
| stats count_distinct(userId)

有关 CloudWatch Insights 的更多信息:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html

于 2020-09-23T18:41:35.587 回答
6

我认为您可以通过以下查询来实现:

正在解析的日志语句:“尝试登录用户:abc .....”

fields @timestamp, @message
| filter @message like /Trying to login user/
| parse @message "Trying to login user: * and " as user
| sort @timestamp desc
| stats count(*) as loginCount by user | sort loginCount desc

这将以这种方式打印表格,

# user loginCount
1 user1 10
2 user2 15
......
于 2021-03-02T23:36:11.473 回答
1

我不认为你可以。

Amazon CloudWatch Logs 可以扫描日志文件中的特定字符串(例如“内存不足”)。当它遇到这个字符串时,它会增加一个指标。然后,您可以为“当 15 分钟内‘内存不足’错误的数量超过 10 时”创建警报。

但是,您正在寻求计算唯一用户数,这并不能很好地转化为这种方法。

您可以改用Amazon Athena,它可以针对存储在 Amazon S3 中的数据运行 SQL 查询。例如,请参阅:

于 2017-06-27T00:30:24.727 回答