使用 CloudWatch Metric Filter 报告内存消耗百分比

Oha*_*ita 2 amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我们广泛使用 AWS Lambda 作为我们基础设施的一部分。为了获得更好的可见性,我希望能够报告一个自定义的 CloudWatch 指标,其值为内存已使用/内存分配,这可以使用 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
Run Code Online (Sandbox Code Playgroud)

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

当时,我无法克服度量过滤器语法。对此的任何帮助将不胜感激。

Unk*_*nts 5

我认为您不能直接使用一个指标过滤器来完成此操作。你可以这样做:

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
}
Run Code Online (Sandbox Code Playgroud)

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