使用CloudWatch指标过滤器报告内存消耗百分比

时间:2020-06-23 20:12:50

标签: amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我们将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。 任何帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您不能使用一个公制过滤器直接进行操作。您可以执行以下操作:

1。将MemorySize和MaxMemoryUsed提取到2个单独的指标中

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

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

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