我有一组 json 格式的 cloudwatch 日志,其中包含一个用户名字段。如何编写一个计算每月唯一用户数的 cloudwatch 指标查询?
4 回答
你现在可以这样做了!使用 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 页面轻松处理查询。
count_distinct
现在,您可以使用CloudWatch Insights 查询中的指令计算唯一字段值。
例子:
fields userId, @timestamp
| stats count_distinct(userId)
有关 CloudWatch Insights 的更多信息:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html
我认为您可以通过以下查询来实现:
正在解析的日志语句:“尝试登录用户: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
......
我不认为你可以。
Amazon CloudWatch Logs 可以扫描日志文件中的特定字符串(例如“内存不足”)。当它遇到这个字符串时,它会增加一个指标。然后,您可以为“当 15 分钟内‘内存不足’错误的数量超过 10 时”创建警报。
但是,您正在寻求计算唯一用户数,这并不能很好地转化为这种方法。
您可以改用Amazon Athena,它可以针对存储在 Amazon S3 中的数据运行 SQL 查询。例如,请参阅: