2012-11-18 2 views
0

dotcloud.yml 파일에 새 New Relic 구성 변수를 사용하여 설정 한 Python 응용 프로그램이 있는데 제대로 작동합니다.Dotcloud (Python)에서 NewRelic 환경 설정

그러나 샌드 박스 인스턴스를 테스트/준비 환경으로 실행하려고하므로 newrelic 에이전트의 환경을 설정하여 ini 구성의 다른 구성 섹션을 사용할 수 있기를 원합니다.

나는 사용자 환경 변수에서 SANbox는 "테스트"와 라이브 응용 프로그램으로 설정 한 있도록
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 

이 설정되어있는 "생산"

내가 다음 호출 오전하기 위해 다음과 같이 내 dotcloud.yml이 설정되어 내 uswsgi.py에 다음

NEWRELIC_CONFIG = os.environ.get('NEW_RELIC_CONFIG_FILE') 
ENVIRONMENT = os.environ.get('MY_ENVIRONMENT', 'test') 

newrelic.agent.initialize(NEWRELIC_CONFIG, ENVIRONMENT) 

나는 uwsgi.log 파일에이를 얻을 수 있기 때문에 dotcloud 인스턴스가 이미 newrelic 수있게됩니다 그러나 :

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". 

그래서 uwsgi.py가 호출되기 전에 newrelic 에이전트가 초기화되는 것처럼 보일 것입니다.

그래서 내 질문은 : newrelic 환경을 초기화 할 수있는 방법이

있습니까? 그들은 이상한 일을하지 않는

답변

1

코드를 변경하지 않고이를 수행하는 가장 쉬운 방법은 다음을 수행하는 것입니다.

$ dotcloud create -f sandbox <app_name> 

새로운 샌드 박스 응용 프로그램에 코드를 배포 (샌드 박스 모드에서 응용 프로그램을 만드는 방법에 대한 자세한 내용은 http://docs.dotcloud.com/0.9/guides/flavors/ 참조) dotCloud에 새로운 샌드 박스 응용 프로그램을 만듭니다.

$ dotcloud push 

이제 라이브 및 샌드 박스 앱 모두에서 동일한 코드를 실행해야합니다. 하지만 샌드 박스 앱의 일부 ENV 변수를 변경하려는 경우 한 단계 더 수행해야합니다.

이 페이지 http://docs.dotcloud.com/0.9/guides/environment/#adding-environment-variables에 따르면 ENV 변수를 추가하는 두 가지 방법이 있습니다.

  1. dotcloud.yml의 환경 섹션을 사용하십시오. dotcloud.yml는 각 서비스에 대해 서로 다른 환경 변수를 정의 할 수 있습니다 반면
  2. 사용 dotcloud env CLI는

명령, 전체 응용 프로그램에 대한 dotcloud ENV 환경 변수를 설정.또한 dotcloud 환경 변수로 설정된 환경 변수는 dotcloud.yml에 정의 된 환경 변수보다 우선합니다.

우리는 우리의 샌드 박스 응용 프로그램에 대한 다른 값을 갖고 싶어, 우리는 당신의 dotcloud.yml

에 사람을 무시 것이다, 샌드 박스 응용 프로그램에서 그 변수를 설정하는 dotcloud env 명령을 실행해야한다는 것을 의미

변수를 변경하고 싶으면이 명령을 실행합니다.

$ 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에 대한 설명서를 참조하십시오 http://docs.dotcloud.com/0.4/guides/environment/
  • 환경 변수를 설정하면 응용 프로그램을 다시 시작하여 변수를 설치할 수 있으므로 다운 타임을 제한하려면 모든 명령을 한 명령으로 설정하십시오.
+0

감사합니다. Ken. 다른 앱 이름을 제공하기에 충분하지만 다른 New Relic 고유의 설정 (실시간으로 테스트 또는 매개 변수 캡처에서 브라우저 모니터링을 사용하지 않도록 설정할 수 있음)을 원하면 각 환경에 대한 다른 구성 파일. –

+0

@MarkUnsworth 내가 틀렸다면, 나는 모든 매개 변수가 환경 변수에서 설정 될 수 있다고 생각한다. env 변수를 통해 사용할 다른 ini 파일을 지정할 수도 있습니다. Graham Dumpleton이 가장 잘 알 것입니다. –

+0

감사합니다. Ken. 필자는 각 환경에 대해 별도의 ini 파일을 추가하는 방식을 취했습니다. 그래도 DotCloud 환경 변수를 기반으로 새로운 유적 환경을 덮어 쓸 수 있다면 좋을 것이므로 1 개의 구성 파일 만 유지하면됩니다. 나는 이것을위한 지원 티켓을 모을거야. –

1

, 당신은 수행하여 에이전트 구성 파일에서 제공하는 APP_NAME를 오버라이드 (override) 할 수 있어야한다 :

import newrelic.agent 
newrelic.agent.global_settings().app_name = 'Test Application Name' 

이 newrelic.agent.initialize()를 두 번 호출하지 마십시오.

app_name이 데이터를보고 할 단일 애플리케이션을 나열하는 경우에만 작동합니다.

+0

완벽하게 작동합니다. 감사합니다. 이것은'newrelic-admin runprogram ... '으로 서버를 실행해야 할 필요가 있고 환경 변수를 동적으로 설정할 수없는 경우에도 유용합니다. –