CloudWatch 不会为您的自定义指标跨维度聚合

CloudWatch does not aggregate across dimensions for your custom metrics

正在阅读 docs 我看到了这个说法;

CloudWatch does not aggregate across dimensions for your custom metrics

这似乎是一个巨大的限制吧?这将使自定义指标在我的估计中几乎毫无用处 - 所以我想确认我理解这一点。

例如,假设我有一个从多台服务器发送的自定义指标。我想查看每台服务器,但我也想同时查看它们。我没有办法在所有服务器上汇总这些信息吗?或者我是否会被迫创建两个自定义指标,一个用于单个服务器,一个用于所有服务器,以及从服务器到每个服务器的双 post 指标,一个用于聚合所有指标?

文档是正确的,CloudWatch 不会为您的自定义指标跨维度聚合(它会为其他服务发布的一些指标这样做,例如 EC2)。

此功能对于您的用例来说似乎有用且清晰,但尚不清楚此类聚合在一般情况下的行为方式。 CloudWatch 允许最多 10 个维度,因此聚合这些维度的所有组合可能会产生大量无用的指标,您将对所有这些指标收费。例如,人们可能会使用维度在 TestProd 堆栈之间拆分他们的指标,它们是完全独立的并且聚合它们没有意义。

CloudWatch 将一个指标名称加上一整套维度作为唯一的指标标识符。在您的情况下,这意味着您需要针对您希望它单独贡献的每个指标发布您的观察结果。

假设您有一个名为 Latency 的指标,并且您将主机名放在一个名为 Server 的维度中。如果您有三台服务器,这将创建三个指标:

  • Latency, Server=server1
  • Latency, Server=server2
  • Latency, Server=server3

所以你在问题中提到的方法是可行的。如果您还想要一个显示所有服务器数据的指标,则每个服务器都需要发布到一个单独的指标,最好通过为 Server 维度使用新的通用值来实现,例如 AllServers.这将导致您有 4 个指标,如下所示:

  • Latency, Server=server1 <- 仅 server1 数据
  • Latency, Server=server2 <- 仅 server2 数据
  • Latency, Server=server3 <- 仅 server3 数据
  • Latency, Server=AllServers <- 来自所有 3 个服务器的数据

2019-12-17更新

使用公制数学搜索函数:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html

这将为您提供每台服务器的延迟和跨所有服务器的延迟,无需发布单独的 AllServers 指标,如果出现新服务器,它将自动由表达式获取:

图表来源:

{
    "metrics": [
        [ { "expression": "SEARCH('{SomeNamespace,Server} MetricName=\"Latency\"', 'Average', 60)", "id": "e1", "region": "eu-west-1" } ],
        [ { "expression": "AVG(e1)", "id": "e2", "region": "eu-west-1", "label": "All servers", "yAxis": "right" } ]
    ],
    "view": "timeSeries",
    "stacked": false,
    "region": "eu-west-1"

}

结果将是这样的图表:

这种方法的缺点:

  • 表达式限制为 100 个指标。
  • 整体聚合仅限于可用的度量数学函数,这意味着百分位数自 2019 年 12 月 17 日起不可用。

使用 Contributor Insights(截至 2019-12-17 开放预览):https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html

如果您以 JSON 或通用日志格式 (CLF) 将日志发布到 CloudWatch Logs,您可以创建规则来跟踪主要贡献者。例如,跟踪延迟超过 400 毫秒的服务器的规则如下所示:

{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.Latency",
                "GreaterThan": 400
            }
        ],
        "Keys": [
            "$.Server"
        ],
        "ValueOf": "$.Latency"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/lambda/emf-test"
    ]
}

结果是大多数数据点超过 400 毫秒的服务器列表:

将它们与 CloudWatch 嵌入式格式结合在一起:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html

如果您以 CloudWatch 嵌入式格式发布数据,您可以:

  • 轻松配置维度,因此您可以根据需要获得每台服务器指标和总体指标。
  • 使用 CloudWatch Logs Insights 查询和可视化您的日志。
  • 使用 Contributor Insights 获得顶级贡献者。