You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让运行在AWS Lambda上的Starlette Python代理将日志发送到Elastic APM服务器

你完全可以保留Starlette框架,无需切换到Django或其他框架,Elastic APM原生支持AWS Lambda环境下的Starlette服务数据采集。本地正常、Lambda无数据的问题主要是Lambda运行环境的特殊机制和APM Agent的适配问题,按以下步骤排查修复即可:

核心原因说明

Lambda的无服务器运行环境和本地服务器差异很大,APM Agent默认的后台异步上报逻辑在Lambda执行完请求后会被环境冻结中断,还可能存在权限、网络、配置参数适配问题,和你使用的Starlette框架无关。

具体修复步骤

1. 调整为适配Lambda的Elastic APM Agent配置

不要使用默认的HTTP服务端Agent配置,需要开启Lambda专属适配参数:

  • 强制开启同步上报:Lambda执行完函数逻辑后会快速冻结运行环境,默认的异步批量上报逻辑还没执行就会被中断,需要设置SYNC参数为True,SEND_REQUEST_TIMEOUT调整为2秒以内
  • 关闭非必要的后台请求:设置CENTRAL_CONFIG为False,不需要实时指标的场景可以将METRICS_INTERVAL设为0s,减少额外网络请求
  • 所有配置通过环境变量或硬编码写入,不要依赖本地配置文件,避免Lambda环境下配置读取失败

对应的初始化代码示例:

from elasticapm.contrib.starlette import ElasticAPM, make_apm_client
from starlette.applications import Starlette

apm_config = {
    'SERVICE_NAME': '你的服务名称',
    'SECRET_TOKEN': '你的APM服务密钥',
    'SERVER_URL': '你的Elastic APM服务器地址',
    'ENVIRONMENT': 'production',
    'SYNC': True,
    'SEND_REQUEST_TIMEOUT': 2,
    'CENTRAL_CONFIG': False,
    'METRICS_INTERVAL': '0s'
}
apm_client = make_apm_client(apm_config)

app = Starlette()
app.add_middleware(ElasticAPM, client=apm_client)

2. 配置Lambda执行环境权限与网络

  • 确认Lambda的安全组已经开放出站到Elastic APM服务器对应端口的访问权限,如果APM服务器部署在VPC内,需要把Lambda也加入对应VPC,配置正确的子网和安全组
  • 如果APM服务器是公网地址,确认Lambda已经配置了NAT网关或者开启了公网访问权限
  • 不要在Lambda执行角色里添加多余的出站访问限制,确保请求可以正常发送到APM服务器

3. 适配Lambda的触发逻辑

如果你用API Gateway触发Lambda运行Starlette服务,需要确保Mangum(Lambda ASGI适配层)版本和APM Agent兼容,同时在Lambda handler里主动调用flush方法,确保所有待上报数据在Lambda冻结前完成发送:

from mangum import Mangum

handler = Mangum(app)

def lambda_handler(event, context):
    try:
        return handler(event, context)
    finally:
        if apm_client:
            apm_client.flush()

4. 日志排查

在Lambda的环境变量里添加ELASTIC_APM_LOG_LEVEL=debug,触发一次请求后查看CloudWatch日志,确认是否有APM Agent的报错信息,比如连接超时、权限拒绝、配置错误等,针对性修复即可。

验证方法

部署修改后的代码,触发一次请求后等待5-10秒,查看Elastic APM控制台的事务记录,正常情况下就可以看到对应的数据上报。

内容的提问来源于stack exchange,提问作者user3898695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:08