#aws-lambda #lambda #aws #log #proxy #cloud-watch

aws-lambda-log-proxy

在发送到CloudWatch Logs之前,过滤或转换AWS Lambda函数的日志

5个不稳定版本

0.3.0 2024年5月22日
0.2.1 2024年4月16日
0.2.0 2024年4月16日
0.1.1 2024年4月4日
0.1.0 2024年4月2日

网络编程中排名第1756

Download history 283/week @ 2024-04-14 6/week @ 2024-04-21 1/week @ 2024-04-28 147/week @ 2024-05-19 4/week @ 2024-05-26 1/week @ 2024-06-02 4/week @ 2024-06-09 1/week @ 2024-06-16

每月下载364

自定义许可

31KB
543

AWS Lambda日志代理

Codecov Crates.io Version license

log-flow

在发送到CloudWatch Logs之前,过滤或转换AWS Lambda函数的日志。

[!NOTE] 这是一个为开发者准备的库。如果您正在寻找二进制可执行文件,请参阅AWS Lambda日志过滤器

[!CAUTION] 如果您写了很多日志并立即返回,可能会丢失数据。请参阅下面的可能的数据丢失

使用方法

安装

将以下内容添加到您的dependencies中的Cargo.toml

aws-lambda-log-proxy = "0.2"

或运行

cargo add aws-lambda-log-proxy

示例

真实案例: AWS Lambda日志过滤器

文档

常见问题解答

为什么我们需要这个?

我们需要一个解决方案来实现以下功能,而无需修改AWS Lambda函数的现有代码

  • 减少日志量以降低成本。
  • 将现有日志包装在JSON中,并具有可定制的级别和字段名,这样我们就可以使用内置的Lambda日志级别过滤来过滤它们。
  • 但保留EMF日志,这样我们仍然可以检索指标。

它是如何工作的?

我们使用AWS Lambda运行时代理以代理的子进程启动处理器进程(可选禁用_LAMBDA_TELEMETRY_LOG_FD环境变量)以截获日志,然后尽可能抑制invocation/next请求来处理日志。

为什么不只是grep?

实际上,您可以直接创建一个shell脚本,内容如下:exec "$@" 2>&1 | grep --line-buffered xxx,并使用lambda运行时包装脚本来实现简单的过滤。然而,我们需要这个库来实现以下功能

  • 覆盖_LAMBDA_TELEMETRY_LOG_FD环境变量,以确保日志被打印到stdout/stderr而不是遥测日志文件。
  • 尽可能压制invocation/next请求,以便尽可能多地处理日志。

可能的数据丢失

尽管我们已尽可能压制invocation/next请求以处理日志,但如果您写入大量日志(超过数千行)并立即返回,可能有一些日志未被处理。

作为最佳实践,您需要对自己的用例进行彻底的基准测试,以确保日志按预期处理。

变更日志

依赖项

~6–15MB
~176K SLoC