首页 > 解决方案 > 如何让 lambda 监听多个 cloudwatch 日志组?

问题描述

我有一个处理来自 cloudwatch 日志组的日志的 lambda。它将日志保存到 Elasticsearch 集群。我正在使用无服务器将日志组流配置到 lambda:https ://www.serverless.com/framework/docs/providers/aws/events/cloudwatch-log/ 。

但是,它只支持监听一个日志组。如何让我的 lambda 监听多个日志组?我想使用如下模式:

functions:
  myCloudWatchLog:
    handler: myCloudWatchLog.handler
    events:
      - cloudwatchLog: '/aws/lambda/hello*'

在上面的示例中,我希望每当有日志发送到名为 start withs 的日志组时触发我的 lambda /aws/lambda/hello。这样,它会将所有日志保存到 Elasticsearch 进行分析。

我不能在日志组上添加通配符,如果我添加一个我会得到这个错误*

An error occurred (InvalidParameterException) when calling the PutSubscriptionFilter operation: 1 validation error detected: Value '/aws/lambda/hello*' at 'logGroupName' failed to satisfy constraint: Member must satisfy regular expression pattern: [\.\-_/#A-Za-z0-9]+

标签: amazon-web-servicesaws-lambdaamazon-cloudwatchserverless-framework

解决方案


您可以添加多个cloudwatchLog事件

  myCloudWatchLog:
    handler: myCloudWatchLog.handler
    events:
      - cloudwatchLog: '/aws/lambda/hello1'
      - cloudwatchLog: '/aws/lambda/hello2'

如果您想为每个日志组提供不同的过滤模式,您可以使用:

  myCloudWatchLog:
    handler: myCloudWatchLog.handler
    events:
      - cloudwatchLog: 
          logGroup: '/aws/lambda/hello1'
          filter: 'filter1'
      - cloudwatchLog: 
          logGroup: '/aws/lambda/hello2'
          filter: 'filter2'

推荐阅读