我想直接快速访问AWS lambda中的日志。
我可以查询CloudWatch,但获取数据需要时间。
有可能在Lambda中获取所有执行日志并返回这些数据作为响应吗?
更新时间:2020年6月15日
谢谢@John的回答,我在这里提供更多信息:
我在中使用lambda的专用记录器。净
https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.Logging.AspNetCore
如果出现任何问题,我的应用程序需要进行日志记录以进行调试。
例如;日志";您想访问吗
我只在lambda函数中记录一些不同日志级别的数据,如:
- 记录器。LogDebug("Lambda started")
- 记录器。LogCritical(例外)
- 记录器。LogInfo(businessDataForDebug)
我想获取所有记录的语句,这些语句由日志级别传递,并尽快在lambda响应中返回所有这些信息日志数据必须引用特定的lambda执行否则就没用了。
您正在从CloudWatch寻求什么类型的数据
我需要大部分记录的字符串消息和异常(如果发生)。如果可能的话,最好包括特定日志调用的时间。此外,一些";log";Id作为参考会很好——有一些类似RequestId的东西。
目前,我可以在CloudWatch中获取所有进行查询的日志,但这需要时间,而且速度太慢。我做API调用:StartQueryAsync,然后GetQueryResultsAnc。解决方案应该尽可能快。我可以制作丑陋的自定义记录器,在那里我可以收集所有日志到ex。列出myLogs并简单地以JSON形式返回响应,但我希望有很好的AWS解决方案来实现这一目的。
你说的";执行日志">
我指的是Lambda简单函数运行时中记录器生成的所有日志。
LambdaFunction(request, context){
InitializeLoggerWithLogLevel(debug);
logger.LogInfo("Log Info"); //Not logged due to min log level Debug
logger.LogTrace("Log Trace"); //Logged, trace > debug
logger.LogDebug("Log debug"); //Logged, debug == debug
您指的是存储在Amazon CloudWatch日志中的AWS Lambda函数的输出吗
是的,我可以从那里查询日志,但需要几秒钟的时间。我会更快地获取数据。
我相信AWS没有提供这样的解决方案。解决方法可以是通过ex.SQS将获取日志委托给另一个lambda,或者将执行的特定lambda函数的日志移动到S3 bucket,然后给用户提供下载链接。我的第一个主lambda必须很快,可以像机关枪一样处理许多请求;)。
请告诉我最好的方法。我愿意进一步讨论。
问候,
如果每秒处理50个事务,CloudWatch事务将被抑制。您可以要求增加此限额:https://console.aws.amazon.com/support/home#/case/create?issueType=service-限额增加&limitType=服务代码cloudwatch日志
参考编号:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html
如果可能的话,最好包括特定日志调用的时间。此外,一些"日志"Id作为参考会很好——有一些类似RequestId的东西。目前,我可以在CloudWatch中获取所有进行查询的日志,但这需要时间,而且速度太慢。
如果您正在寻找FAST解决方案,并且您确实在突破CloudWatch的限制,请使用DynamoDB。
您可以将CloudWatch日志流式传输给自己,而不是获取它们。
您可以向CloudWatch日志事件订阅Lambda函数。通过这种方式,您可以实时处理它。
使用这种方法,您可以将其流式传输到ElasticSearch实例,以便于查询和处理。
您还可以让Lambda将这些事件写入S3存储桶。
参考:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html
使用新的aws lambda扩展和日志API可能这个想法是让扩展请求logs-api来获取日志,而不是使用ipc将日志发送到lambda函数(没有成功),或者简单地使用/tmp文件夹通过扩展写入日志,然后从函数中读取。
我试着做一个POC,为一个附带项目返回日志,但没能成功。扩展有自己的生命周期,通常在lambda关闭后接收日志。
有时,当我多次运行函数时,我会收到日志,可能这些日志来自以前的执行。
我认为可行的解决方案是将日志存储到s3存储桶中,并通过s3上传事件触发另一个lambda,该事件将返回日志。根据需求,与订阅云手表相比,这可能是一个可靠的解决方案,因为订阅云手表需要更多的时间。