在Dotcloud(Python)上设置NewRelic环境
我有一个Python应用程序,它是使用dotcloud.yml文件中的new Relic配置变量设置的,运行良好 但是,我希望运行一个沙盒实例作为测试/登台环境,因此我希望能够设置newrelic代理的环境,以便它使用ini配置的不同配置部分。My dotcloud.yml的设置如下:在Dotcloud(Python)上设置NewRelic环境,python,dotcloud,newrelic,Python,Dotcloud,Newrelic,我有一个Python应用程序,它是使用dotcloud.yml文件中的new Relic配置变量设置的,运行良好 但是,我希望运行一个沙盒实例作为测试/登台环境,因此我希望能够设置newrelic代理的环境,以便它使用ini配置的不同配置部分。My dotcloud.yml的设置如下: www: type: python config: python_version: 'v2.7' enable_newrelic: True environ
www:
type: python
config:
python_version: 'v2.7'
enable_newrelic: True
environment:
NEW_RELIC_LICENSE_KEY: *****************************************
NEW_RELIC_APP_NAME: Application Name
NEW_RELIC_LOG: /var/log/supervisor/newrelic.log
NEW_RELIC_LOG_LEVEL: info
NEW_RELIC_CONFIG_FILE: /home/dotcloud/current/newrelic.ini
我有自定义的环境变量,因此sanbox设置为“test”,而live应用程序设置为“production”
然后在我的uswsgi.py中调用以下内容
NEWRELIC_CONFIG = os.environ.get('NEW_RELIC_CONFIG_FILE')
ENVIRONMENT = os.environ.get('MY_ENVIRONMENT', 'test')
newrelic.agent.initialize(NEWRELIC_CONFIG, ENVIRONMENT)
但是,dotcloud实例已经启用了newrelic,因为我在uwsgi.log文件中得到了以下信息:
Sun Nov 18 18:50:12 2012 - unable to load app 0 (mountpoint='') (callable not found or import error)
Traceback (most recent call last):
File "/home/dotcloud/current/wsgi.py", line 15, in <module>
newrelic.agent.initialize(NEWRELIC_CONFIG, ENVIRONMENT)
File "/opt/ve/2.7/local/lib/python2.7/site-packages/newrelic-1.8.0.13/newrelic/config.py", line 1414, in initialize
log_file, log_level)
File "/opt/ve/2.7/local/lib/python2.7/site-packages/newrelic-1.8.0.13/newrelic/config.py", line 340, in _load_configuration
'environment "%s".' % (_config_file, _environment))
newrelic.api.exceptions.ConfigurationError: Configuration has already been done against differing configuration file or environment. Prior configuration file used was "/home/dotcloud/current/newrelic.ini" and environment "None".
Sun 11月18日18:50:12 2012-无法加载应用程序0(装入点=“”)(未找到可调用或导入错误)
回溯(最近一次呼叫最后一次):
文件“/home/dotcloud/current/wsgi.py”,第15行,在
初始化(newrelic_配置,环境)
文件“/opt/ve/2.7/local/lib/python2.7/site packages/newrelic-1.8.0.13/newrelic/config.py”,第1414行,在初始化中
日志文件,日志级别)
文件“/opt/ve/2.7/local/lib/python2.7/site packages/newrelic-1.8.0.13/newrelic/config.py”,第340行,在加载配置中
“环境“%s”。”(\u配置文件,\u环境))
newrelic.api.exceptions.ConfigurationError:已针对不同的配置文件或环境进行了配置。以前使用的配置文件是“/home/dotcloud/current/newrelic.ini”和环境“None”。
因此,似乎在调用uwsgi.py之前,newrelic代理已初始化
所以我的问题是:
有没有办法初始化newrelic环境?除非他们做了一些奇怪的事情,否则您应该能够通过执行以下操作覆盖代理配置文件提供的应用程序名称:
import newrelic.agent
newrelic.agent.global_settings().app_name = 'Test Application Name'
不要再次调用newrelic.agent.initialize()
这仅在app_name列出要向其报告数据的单个应用程序时才有效。最简单的方法是,在不更改任何代码的情况下执行以下操作
$ dotcloud env set \
'NEW_RELIC_APP_NAME="Test Application Name"' \
'NEW_RELIC_LOG_LEVEL=debug'
在dotCloud上创建新的沙盒应用程序(有关在沙盒模式下创建应用程序的更多信息,请参阅)
现在,您应该在live和sandbox应用程序中运行相同的代码。但是,因为您想更改沙盒应用程序的一些环境变量,所以还需要执行一个步骤
根据本页,有两种不同的添加环境变量的方法
dotcloud.yml
的环境部分dotcloud env
cli命令dotcloud env
命令在沙盒应用程序上设置这些变量,这将覆盖您的dotcloud.yml
如果我们只想改变变量,我们将运行这个命令
$ dotcloud env set NEW_RELIC_APP_NAME='Test Application Name'
如果我们想一次更新多个,那么我们将执行以下操作
$ dotcloud env set \
'NEW_RELIC_APP_NAME="Test Application Name"' \
'NEW_RELIC_LOG_LEVEL=debug'
要确保正确设置了环境变量,可以运行以下命令
$ dotcloud env list
注释
- 上面的命令使用的是新的dotCloud 0.9.x CLI,如果使用的是旧的,则需要升级到新的,或者参考旧CLI的文档
- 当您设置环境变量时,它将重新启动应用程序,以便安装这些变量,因此为了限制停机时间,请在一个命令中设置所有变量
newrelic admin runprogram…
运行服务器,并且无法动态设置环境变量,这也很好。
$ dotcloud env list