监控 AWS Lambda Java 函数
编辑监控 AWS Lambda Java 函数
编辑Java APM Agent 可以与 AWS Lambda 一起使用,以监控 AWS Lambda 函数的执行情况。
Note: The Centralized Agent Configuration on the Elasticsearch APM currently does NOT support AWS Lambda.
快速入门
编辑要开始使用 Java AWS Lambda 函数的 APM,请按照以下步骤操作。
先决条件
编辑- 你需要一个 APM Server 来发送 APM 数据。 如果你尚未设置,请按照APM 快速入门进行操作。 为了获得最佳性能,我们建议在与 AWS Lambda 函数相同的 AWS 区域中的 Elastic Cloud 上设置 APM。
-
确保你使用的是受支持的 AWS Lambda Java 运行时之一
标签 Java 运行时 操作系统 支持 11
Java 11 (Corretto)
Amazon Linux 2
是
8.al2
Java 8 (Corretto)
Amazon Linux 2
是
8
Java 8 (OpenJDK)
Amazon Linux 2018.03
否
步骤 1:选择 AWS 区域和架构
编辑从此版本的 APM Lambda 扩展层表格中选择正确的 ARN。
此外,从此版本的 APM Agent 层表格中选择正确的 ARN。
选择的 *AWS 区域* 和 *架构* 必须与 AWS Lambda 函数的 AWS 区域和架构匹配!
步骤 2:将 APM 层添加到 Lambda 函数
编辑Elastic APM AWS Lambda 扩展和 Java APM Agent 都作为 AWS Lambda 层添加到 Lambda 函数。 因此,你需要将相应的层 ARN(标识符)添加到 Lambda 函数。
要通过 AWS 管理控制台将层添加到 Lambda 函数
- 在 AWS 管理控制台中导航到你的函数
- 滚动到“层”部分,然后单击“添加层”按钮
- 选择“指定 ARN”单选按钮
- 将 Elastic APM AWS Lambda 扩展层和 APM 代理层的以下 ARN 复制并粘贴到“指定 ARN”文本输入中
APM 扩展层
EXTENSION_ARN
APM 代理层
AGENT_ARN - 单击“添加”按钮
要通过 AWS 命令行界面添加 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN,请执行以下命令
aws lambda update-function-configuration --function-name yourLambdaFunctionName \ --layers EXTENSION_ARN \ AGENT_ARN
在 SAM template.yml
文件中,按如下所示添加 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN
... Resources: yourLambdaFunction: Type: AWS::Serverless::Function Properties: ... Layers: - EXTENSION_ARN - AGENT_ARN ...
在 serverless.yml
文件中,按如下所示将 Elastic APM AWS Lambda 扩展和 APM 代理的层 ARN 添加到你的函数中
... functions: yourLambdaFunction: handler: ... layers: - EXTENSION_ARN - AGENT_ARN ...
要将 Elastic APM AWS Lambda 扩展和 APM 代理添加到你的函数,请将 ARN 添加到 Terraform 文件中的 layers
属性中
... resource "aws_lambda_function" "your_lambda_function" { ... layers = ["EXTENSION_ARN", "AGENT_ARN"] } ...
要将 Elastic APM AWS Lambda 扩展和 APM 代理添加到基于容器的函数中,请按如下所示扩展函数镜像的 Dockerfile
FROM docker.elastic.co/observability/apm-lambda-extension-IMAGE_ARCH:latest AS lambda-extension AGENT_IMPORT # FROM ... <-- this is the base image of your Lambda function COPY --from=lambda-extension /opt/elastic-apm-extension /opt/extensions/elastic-apm-extension AGENT_COPY # ...
步骤 3:在 AWS Lambda 上配置 APM
编辑Elastic APM AWS Lambda 扩展和 APM Java 代理通过 AWS Lambda 函数上的环境变量进行配置。
对于最少的配置,你需要 *APM Server URL* 来设置 APM 数据的目标以及一个 *APM Secret Token*。 如果你倾向于使用 APM API 密钥 而不是 APM Secret Token,请在以下配置中使用 ELASTIC_APM_API_KEY
环境变量而不是 ELASTIC_APM_SECRET_TOKEN
。
对于生产环境,我们建议使用 AWS Secrets Manager 来存储你的 APM 身份验证密钥,而不是在环境变量中以纯文本形式提供密钥值。
要通过 AWS 管理控制台配置 APM
- 在 AWS 管理控制台中导航到你的函数
- 单击“配置”选项卡
- 单击“环境变量”
- 添加以下必需的变量
AWS_LAMBDA_EXEC_WRAPPER = /opt/elastic-apm-handler # use this exact fixed value ELASTIC_APM_LAMBDA_APM_SERVER = <YOUR-APM-SERVER-URL> # this is your APM Server URL ELASTIC_APM_SECRET_TOKEN = <YOUR-APM-SECRET-TOKEN> # this is your APM secret token ELASTIC_APM_SEND_STRATEGY = background
要通过 AWS 命令行界面配置 APM,请执行以下命令
在你的 SAM template.yml
文件中,配置以下环境变量
... Resources: yourLambdaFunction: Type: AWS::Serverless::Function Properties: ... Environment: Variables: AWS_LAMBDA_EXEC_WRAPPER: /opt/elastic-apm-handler ELASTIC_APM_LAMBDA_APM_SERVER: <YOUR-APM-SERVER-URL> ELASTIC_APM_SECRET_TOKEN: <YOUR-APM-SECRET-TOKEN> ELASTIC_APM_SEND_STRATEGY: background ...
在你的 serverless.yml
文件中,配置以下环境变量
在你的 Terraform 文件中,配置以下环境变量
... resource "aws_lambda_function" "your_lambda_function" { ... environment { variables = { AWS_LAMBDA_EXEC_WRAPPER = "/opt/elastic-apm-handler" ELASTIC_APM_LAMBDA_APM_SERVER = "<YOUR-APM-SERVER-URL>" ELASTIC_APM_SECRET_TOKEN = "<YOUR-APM-SECRET-TOKEN>" ELASTIC_APM_SEND_STRATEGY = "background" } } } ...
为 AWS Lambda 函数配置的环境变量将传递到运行 lambda 函数的容器。 你可以使用其他选项之一(通过 AWS Web 控制台、AWS CLI 等)来配置环境变量或直接在 Dockerfile 中定义它们。
我们建议为你的函数的容器镜像使用官方 AWS Lambda 基础镜像。 在这种情况下,你只需要配置以下三个环境变量
AWS_LAMBDA_EXEC_WRAPPER = "/opt/elastic-apm-handler" ELASTIC_APM_LAMBDA_APM_SERVER = <YOUR-APM-SERVER-URL> # this is your APM Server URL ELASTIC_APM_SECRET_TOKEN = <YOUR-APM-SECRET-TOKEN> # this is your APM secret token ELASTIC_APM_SEND_STRATEGY = "background"
如果你的容器镜像基于不同的基础镜像(不包括 AWS Lambda 运行时实用程序),则不支持 AWS_LAMBDA_EXEC_WRAPPER
配置选项。 在这种情况下,你需要定义一组扩展的环境变量(在上述情况下,这些变量通过包装脚本设置)
JAVA_TOOL_OPTIONS = "-javaagent:/opt/elastic-apm-agent.jar" ELASTIC_APM_AWS_LAMBDA_HANDLER = <HANDLER_CLASS_NAME> # the fully qualified class name of your Lambda handler ELASTIC_APM_METRICS_INTERVAL = "0s" ELASTIC_APM_CENTRAL_CONFIG = "false" ELASTIC_APM_CLOUD_PROVIDER = "none" ELASTIC_APM_LAMBDA_APM_SERVER = <YOUR-APM-SERVER-URL> # this is your APM Server URL ELASTIC_APM_SECRET_TOKEN = <YOUR-APM-SECRET-TOKEN> # this is your APM secret token ELASTIC_APM_SEND_STRATEGY = "background"
|
你可以选择性地微调 Java 代理或配置 Elastic APM AWS Lambda 扩展。
就是这样; 按照上述步骤操作后,你就可以开始了! 从现在开始,应该会跟踪你的 Lambda 函数调用。
请继续阅读,了解有关 AWS Lambda 函数上 Java APM 代理的功能和限制的更多信息。
功能和注意事项
编辑AWS Lambda 作为运行时,其行为与传统的运行时不同。 虽然大多数 APM 和监控概念都适用于 AWS Lambda,但仍有一些差异和限制需要注意。
性能监控
编辑Elastic APM 会自动衡量 lambda 函数执行的性能。 它会记录数据库查询、外部 HTTP 请求以及执行期间发生的其他缓慢操作的跟踪。
默认情况下,代理会跟踪通常支持的技术。 要跟踪其他事件,请查看其他方法跟踪选项,但是请注意,由于其异步性质,基于采样的分析器对于 AWS Lambda 不是一个有效的选项。
错误监控
编辑只要你的函数处理程序方法抛出 Exception
,代理就会向 APM Server 发送错误事件,并且相应的事务将被记录为失败的事务。 与跟踪跨度相关的错误也将被发送。
注意事项
编辑- 不会收集 Lambda 函数的系统和自定义指标。 这既是因为其中大多数是不相关的,也是因为基于间隔的事件发送模型不适合 FaaS 环境。
- 中央配置已禁用,这意味着无法在不重新定义 lambda 环境变量或 APM 代理设置的情况下更改 APM 代理配置。
-
安装代理后,冷启动可能会明显变慢。如果这是一个问题,以下是处理代码启动缓慢的方法:
- 如果冷启动变慢的唯一问题是 Lambda 超时,请考虑增加配置的超时时间。
- 您为函数允许的内存限制越高,这种影响就越小。这与后续的函数调用无关,仅与冷启动有关。
- 大部分启动延迟与已启用的检测数量有关。无论是否适用于您的特定 Lambda 函数,已启用的检测都会增加此开销。您可以通过
enable_instrumentations
配置指定有限的已启用检测列表,从而大大减少相关开销。生成此类列表的自动方法是使用代理的默认配置和log_level
为INFO
或更低的级别来调用您的 Lambda。在第一次 Lambda 调用后,代理将记录一条消息,格式如下:使用的检测组:[aws-lambda, executor, executor-collection, fork-join, ssl-context, urlconnection]
。
- 基于采样的分析器功能将无法工作,因为它依赖于分析会话和随后对收集的数据进行异步处理。