【问题标题】:Problem writing Lambda logs to CloudWatch, what could be wrong?将 Lambda 日志写入 CloudWatch 时出现问题,可能是什么问题?
【发布时间】:2018-11-25 00:25:53
【问题描述】:

我在尝试将 Lambda 函数日志写入 CloudWatch Logs 时遇到了一些问题。如下所示,这似乎不是授权问题:

PolicyDocument:
    Version: 2012-10-17
    Statement:
        -
          Effect: Allow
          Action:
            - logs:CreateLogGroup
          Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*
        - Effect: Allow
          Action:
            - logs:CreateLogStream
            - logs:PutLogEvent
          Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${FunctionName}:*

我也尝试了更广泛的政策,将arn:aws:logs:*:*:* 作为资源,就像我找到的一些示例一样。

模板在 CloudFormation 上运行良好,并且资源已根据需要创建,当我执行 lambda 函数作为测试时,一切正常,但未写入日志。它创建日志组和日志流,但日志流中没有任何内容。

这也不是 Lambda 函数的问题。我在创建模板之前手动部署了该函数,CloudWatch Logs 在这种情况下运行良好。我完全按照手动创建模板的方法中所写的方式复制了角色和策略。

这是 CloudFormation/SAM/Lambda 中的某种已知错误吗?还是我做错了什么我没有注意到?

如果您需要更多信息来理解上下文,请告诉我。谢谢!

【问题讨论】:

  • 嗯,这很奇怪,你是怎么写日志的?你有我可以看看的 github repo 吗?如果你愿意,我可以分享我的 github 用户名。
  • 感谢@MrkFldig 的回答。我有,这是link。随意提出任何问题,因为它还没有很好的记录。它在 Java 中,我使用 log4j appender 来记录。
  • 所以在黑暗中拍摄,因为我遇到了同样的问题 Bunyan,为 log4j 设置的日志级别是多少?您看起来主要使用 INFO,如果 Log4j 的默认值是高于您将看不到的日志级别?检查一下:docs.aws.amazon.com/lambda/latest/dg/… - 尝试 system.out 方法或证明我在说什么,将信息语句更改为错误。
  • 日志级别,在项目的log4j2.xml中可以看到是INFO。我正是使用您链接到的示例来创建我的 log4j2 appender,它完全相同,我没有更改任何内容。我在问题中说过,当我手动部署 CloudWatch Logs 时,它工作得非常好,这个问题只有在我通过 CloudFormation 部署时才会发生。
  • 您是否将 Lambda 部署为同一 CloudFormation 模板的一部分?如果是这样,您是否附加了一个允许其写入 CloudWatch 的角色?

标签: aws-lambda amazon-cloudformation amazon-cloudwatchlogs aws-sam


【解决方案1】:

最后我能够解决问题,但从我编写的策略中删除 CloudWatch Logs 权限并使用 AWS 的管理策略: ManagedPolicyArns: - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" 这样,日志就被正常写入了 LogGroup。

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多