如何将指标附加到现有的 Lambda 日志组?

Posted

技术标签:

【中文标题】如何将指标附加到现有的 Lambda 日志组?【英文标题】:How to attach a Metric to an existing Lambda log group? 【发布时间】:2020-06-17 14:02:42 【问题描述】:

我正在尝试使用 CloudFormation 创建自定义指标。我遵循了https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html 的示例。我现有的 lambda 日志记录到 CloudWatch 日志组,该日志组在 CloudWatch 中显示为 /aws/lambda/my-function-name。这是我的 CloudFormation YAML 指标:

  ErrorsLogMetric:
    Type: AWS::Logs::MetricFilter
    Properties:
      LogGroupName: !Sub "/aws/lambda/$AWS::StackName"
      FilterPattern: "[ERROR]"
      MetricTransformations:
        - MetricValue: "1"
          MetricNamespace: "LogMetrics"
          MetricName: "MyCustomMetric"

$AWS::StackName 在运行时解析为“my-function-name”。 CloudFormation 脚本成功运行并表示已创建指标,但当我转到 CloudWatch 的 lambda 日志组时,它显示零过滤器。当通过 CloudFormation 创建此自定义指标时,我需要采取哪些不同的措施才能使该自定义指标显示为我的 lambda 日志组的过滤器?

如果我将该属性硬编码为LogGroupName: "/aws/lambda/my-function-name",那么它可以工作。但我不想对其进行硬编码,因为 $AWS::StackName 的值在不同的用例中是动态的。

【问题讨论】:

您的模板看起来不错。如果日志组错误,则创建将失败。显示可能没有更新。运行多久后,您查看了日志组? 您是否尝试过使用cli的describe-metric-filters来检查过滤器是否存在?我想我和你有类似的经历,在云端创建过滤器后,在控制台中找不到过滤器。 您是否在模板中创建日志组?如果是这样,请将LogGroupName 更改为!Ref LogGroupLogicalId 【参考方案1】:

对我来说,解决方案似乎是添加

DependsOn: LambdaLogGroup

其中 LambdaLogGroup 是前面在我的模板中定义的资源。它让我失望了,因为日志组已经存在了一段时间,我试图更新堆栈并添加指标。即使日志组已经存在并且在我添加 Metric 时未由 CloudFormation 更新,这仍然需要依赖项。

【讨论】:

以上是关于如何将指标附加到现有的 Lambda 日志组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用附加模式将音频录制到现有的音频文件中?

如何将行附加到现有的 SYS_REFCURSOR?

如何附加到现有的 java.io.ObjectStream? [复制]

如何将 Excel 转换为 JSON 并将其附加到现有的 JSON 文件?

如何将 winforms 对话框附加到现有的工具栏/菜单栏(编译的 C++ 应用程序)?

如何使用 fast-csv npm 将新行或新行的数据(新行)附加到现有的 csv 文件