首页 > 解决方案 > 使用 CloudWatch 指标筛选器报告内存消耗百分比

问题描述

我们广泛使用 AWS Lambda 作为我们基础设施的一部分。为了获得更好的可见性,我希望能够报告一个自定义 CloudWatch 指标,其值为 memory_used/memory_allocated,这可以使用 CloudWatch 日志和指标过滤器来实现。

考虑以下日志消息:

REPORT RequestId: de96230a-70c1-491f-97f5-f76805227173  Duration: 811.71 ms Billed Duration: 900 ms Memory Size: 256 MB Max Memory Used: 122 MB

对于上述消息,度量的计算值应该是122/256=0.476

当时,我无法克服metric filter syntax。对此的任何帮助将不胜感激。

标签: amazon-web-servicesamazon-cloudwatchamazon-cloudwatchlogs

解决方案


我不认为您可以直接使用一个指标过滤器来做到这一点。你可以这样做:

1. 将 MemorySize 和 MaxMemoryUsed 提取为 2 个单独的指标

创建 2 个指标过滤器,都具有相同的规则[type=REPORT, ...]。这将过滤掉以 REPORT 开头的行,并为该行的每一列创建变量。在这种情况下,它将创建$type, $2, $3, ...多达$19(日志行中有 19 个空格分隔的单词)的变量。

您需要的值位于变量$13$18中,因此在创建 2 个指标过滤器时,请在指标值字段中$13用于第一个指标和$18第二个指标。指标名称和命名空间可以是任何你想要的。我将使用and作为名称和命名空间。MemorySizeMaxMemoryUsedCustomLambdaMetrics

2. 使用度量数学来计算您需要的值。

现在您已经有了 2 个指标,您可以创建一个具有这样来源的小部件来获取平均使用情况(您的情况可能不同的地区):

{
    "metrics": [
        [ { "expression": "m2/m1", "label": "Average memory usage", "id": "e1" } ],
        [ "CustomLambdaMetrics", "MemorySize", { "id": "m1", "visible": false } ],
        [ ".", "MaxMemoryUsed", { "id": "m2", "visible": false } ]
    ],
    "view": "timeSeries",
    "stacked": false,
    "region": "us-east-1",
    "stat": "Sum",
    "period": 60
}

有关度量数学的更多信息,请参见此处:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html


推荐阅读