当服务器连接到我的电子邮件服务器时,我将向 Cloudwatch 发送指标。这样,我可以跟踪谁连接最多,并确保没有人造成任何问题(例如发送大量垃圾邮件)。
据此,我创建了一个图表来显示最常连接的服务器。
我面临的问题是我现在有超过 1500 个不同的服务器名称连接到我的服务器,因此图表现在显示“允许的最大指标数”。
对于图表,我使用了两个查询:
e1 =
e2(显示的那个)=FILL(SEARCH('MyMetric', 'Maximum', 900), 0)
SLICE(SORT(e1, MAX, DESC), 0, 50)
因此,我无法清楚地看到任何高于 900 的连接服务器,因为我有太多服务器需要过滤,而 Cloudwatch 限制了我。
如何从 Cloudwatch 过滤/查询数据集以正确显示该图表。
请注意,我已经过滤了服务器,只将连接次数超过 250 次的服务器发送到 Cloudwatch(因此连接次数较少的小服务器被排除在外)。
谢谢您的帮助!
这听起来像是 CloudWatch Contributor Insights 的理想用例。该页面的摘录(强调我自己的):
您可以使用贡献者见解来分析日志数据并创建显示贡献者数据的时间序列。您可以查看有关“前 N 个贡献者”、唯一贡献者总数及其使用情况的指标。这可以帮助您找到谈话最多的人并了解谁或什么正在影响系统性能。例如,您可以查找不良主机、识别最频繁的网络用户或查找生成最多错误的 URL。
它实际上可能最终会为您提供更多的覆盖范围(您不需要放弃带有
PutMetricData
的内容。它最终也可能会更便宜。总体思路是执行以下操作:<250 connections) and being simpler, because your app only needs to generate logs instead of calling
更改代码以在每次有人通过您的服务器发送电子邮件时写入日志行。我猜它可能看起来像这样:{"clientIp": "1.2.3.4", "emailSizeInBytes": 789, "recipientCount": 17}
{
"Schema": {
"Name": "CloudWatchLogRule",
"Version": 1
},
"LogGroupNames": [
"YourAppLogGroup"
],
"LogFormat": "JSON",
"Contribution": {
"Keys": [
"$.clientIp"
],
"ValueOf": "$.emailSizeInBytes"
},
"AggregateOn": "Sum"
}
这将创建一个规则,将每个客户端 IP 发送的所有字节汇总在一起。您可以创建第二条规则,通过将
ValueOf
更改为
$.recipientCount
来计算哪些客户端 IP 向最多收件人发送电子邮件。或者第三条规则,通过将 AggregateOn
更改为 Count
而不是 Sum
,仅计算发送的电子邮件数量,而不计算累积大小。