22

阅读文档我看到了这个声明;

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

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

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

4

1 回答 1

40

文档是正确的,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 获取顶级贡献者。
于 2018-01-26T18:58:16.417 回答