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

Amazon web services CloudWatch不会为您的自定义指标跨维度聚合,amazon-web-services,amazon-cloudwatch,amazon-cloudwatch-metrics,Amazon Web Services,Amazon Cloudwatch,Amazon Cloudwatch Metrics,读了报纸,我看到了这句话 CloudWatch不会为您的自定义设置跨维度聚合 指标 这似乎是一个巨大的限制,对吧?这将使自定义指标在我的评估中几乎毫无用处——因此我想确认我理解这一点 例如,假设我有一个来自多个服务器的自定义指标。我希望看到每台服务器,但我也希望看到他们一起。我无法将所有服务器上的数据聚合起来?或者我会被迫创建两个自定义指标,一个用于单服务器,一个用于所有服务器,两个用于从服务器到每服务器的post指标,一个用于聚合所有这些指标?文档是正确的,CloudWatch不会为您的自定义

读了报纸,我看到了这句话

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

这似乎是一个巨大的限制,对吧?这将使自定义指标在我的评估中几乎毫无用处——因此我想确认我理解这一点


例如,假设我有一个来自多个服务器的自定义指标。我希望看到每台服务器,但我也希望看到他们一起。我无法将所有服务器上的数据聚合起来?或者我会被迫创建两个自定义指标,一个用于单服务器,一个用于所有服务器,两个用于从服务器到每服务器的post指标,一个用于聚合所有这些指标?

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


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

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

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

  • 延迟,服务器=server1
  • 延迟,服务器=server2
  • 延迟,服务器=server3
因此,您在问题中提到的方法将起作用。如果您还需要一个指标来显示所有服务器上的数据,则每个服务器都需要发布到一个单独的指标,最好使用
服务器
维度的新公共值,类似于
所有服务器
。这将导致您有4个满足rics,像这样:

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

  • Latency,Server=server1
    “可能会导致许多无用的指标,您将为此收取费用”如果CyrdWATH支持服务器端即时聚合的数学,则不需要额外的度量和更多的成本。您所描述的是一个OK解决方案。但是考虑一个常见的情况,比如说3个维度,每个10个值=30个度量。为了具有特别的灵活性,我需要存储3×10×10=300度量。(从2维开始的所有组合,第三维为1“全部”)。这是因子10,因此我的成本增加了因子10。CloudWatch最近推出的度量数学功能:这可用于在GET上聚合服务器端的度量。不支持通配符,因此您仍然必须列出所有要聚合的度量,但您不必再双重发布。^也许应该添加一个通配符第二个/更新的答案?这不难做到-如果客户需要,CW应该支持它。处理{metric+dimensions}作为一个唯一的标识符,不跨维度聚合使得维度几乎毫无意义。为什么要麻烦呢?这里有一个很好的用例:我想为一个维度为X的算法发出一个失败度量。我想对任何失败发出警报。但是,我想让操作员能够深入了解是哪个算法味道X触发了失败。我我不想在每次有人添加新算法(或者更糟,说维度值是动态的)时都更新我的CFN堆栈。用当前状态更新答案。
    {
        "Schema": {
            "Name": "CloudWatchLogRule",
            "Version": 1
        },
        "AggregateOn": "Count",
        "Contribution": {
            "Filters": [
                {
                    "Match": "$.Latency",
                    "GreaterThan": 400
                }
            ],
            "Keys": [
                "$.Server"
            ],
            "ValueOf": "$.Latency"
        },
        "LogFormat": "JSON",
        "LogGroupNames": [
            "/aws/lambda/emf-test"
        ]
    }