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
每月下载364次
31KB
543 行
AWS Lambda日志代理
在发送到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