【发布时间】:2017-11-03 04:24:02
【问题描述】:
我正在使用 zappa 将 python/django wsgi 应用程序部署到 AWS API Gateway 和 Lambda。
我的环境中有所有这些:
NEW_RELIC_CONFIG_FILE: /var/task/newrelic.ini
NEW_RELIC_LICENSE_KEY: redacted
NEW_RELIC_ENVIRONMENT: dev-zappa
NEW_RELIC_STARTUP_DEBUG: "on"
NEW_RELIC_ENABLED: "on"
我正在我的wsgi.py 中以documented 进行“手动代理启动”:
import newrelic.agent
# Will collect NEW_RELIC_CONFIG_FILE and NEW_RELIC_ENVIRONMENT from the environment
# Dear god why??!?!
# NB: Looks like this IS what makes it go
newrelic.agent.global_settings().enabled = True
newrelic.agent.initialize('/var/task/newrelic.ini', 'dev-zappa', log_file='stderr', log_level=logging.DEBBUG)
我不使用@newrelic.agent.wsgi_application,因为应该自动检测到 django
我添加了一个中间件来在 lambda 冻结之前关闭代理,但日志记录表明只有第一个请求被发送到 New Relic。如果没有关闭,我不会从 New Relic 代理获得任何日志记录,并且 APM 中也没有任何事件。
class NewRelicShutdownMiddleware(MiddlewareMixin):
"""Simple middleware that shutsdown the NR agent at the end of a request"""
def process_request(self, request):
pass
# really wait for the agent to register with collector
# Enabling this causes more log messages about starting data samplers, but only on the first request
# newrelic.agent.register_application(timeout=10)
def process_response(self, request, response):
newrelic.agent.shutdown_agent(timeout=2.5)
return response
def process_exception(self, request, exception):
pass
newrelic.agent.shutdown_agent(timeout=2.5)
在我的newrelic.ini 中,我有以下内容,但是当我登录newrelic.agent.global_settings() 时,它包含默认的应用程序名称(确实在 APM 中创建)并且启用 = False,这导致了上面的一些 hack(环境变量,并在初始化之前编辑newrelic.agent.global_settings():
[newrelic:dev-zappa]
app_name = DEV APP zappa
monitor_mode = true
TL;DR - 两个问题:
- 如何让 New Relic 在不想读取它的 ini 文件时读取它?
- 如何让 New Relic 记录 AWS lambda 中所有请求的数据?
【问题讨论】:
-
我的 newrelic-django-zappa 项目也有类似的问题
-
您如何让 Lambda 使用您的内容创建
/var/task/newrelic.ini? -
@kichik 它在 zappa 上传的 zip 文件中。我已确认该文件存在于该路径中,并将内容读入日志。我已经确认在环境中填充了 NEW_RELIC_CONFIG_FILE 和 NEW_RELIC_ENVIRONMENT。看起来它们并没有像预期的那样被消耗。
-
我之所以这么问,是因为我很难相信 Lambda 允许您将文件提取到根文件夹。您确定它相对于服务器上的源文件夹不存在吗?
-
忽略我。我没有意识到 Lambda 一直在使用
/var/task。
标签: python django aws-lambda newrelic