0

dotcloud.yml ファイルの新しい New Relic 構成変数を使用してセットアップされた Python アプリケーションがあり、正常に動作します。

ただし、テスト/ステージング環境としてサンドボックス インスタンスを実行したいので、ini 構成のさまざまな構成セクションを使用するように newrelic エージェントの環境を設定できるようにしたいと考えています。私の dotcloud.yml は次のように設定されています。

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 

サンボックスが「テスト」として設定され、ライブアプリケーションが「本番」に設定されるように、カスタム環境変数があります

次に、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 環境を初期化する方法はありますか?

4

2 に答える 2

1

彼らが何か変なことをしていない限り、次のようにして、エージェント構成ファイルによって提供された app_name をオーバーライドできるはずです。

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

newrelic.agent.initialize() を 2 回呼び出さないでください。

これは、app_name がデータを報告する単一のアプリケーションをリストしている場合にのみ機能します。

于 2012-11-18T21:36:40.590 に答える
1

コードを変更せずにこれを行う最も簡単な方法は、次のようにすることです。

dotCloud で新しいサンドボックス アプリを作成します (サンドボックス モードでのアプリの作成の詳細については、 http: //docs.dotcloud.com/0.9/guides/flavors/ を参照してください)。

$ dotcloud create -f sandbox  <app_name>

コードを新しいサンドボックス アプリにデプロイします。

$ dotcloud push

これで、ライブ アプリとサンドボックス アプリの両方で同じコードが実行されるはずです。ただし、サンドボックス アプリの ENV 変数の一部を変更する必要があるため、もう 1 つの手順を実行する必要があります。

このページhttp://docs.dotcloud.com/0.9/guides/environment/#adding-environment-variablesによると、ENV 変数を追加する方法は 2 つあります。

  1. dotcloud.ymlの環境セクションを使用します。
  2. dotcloud envcli コマンドの使用

dotcloud.yml ではサービスごとに異なる環境変数を定義できますが、dotcloud env ではアプリケーション全体の環境変数を設定します。さらに、dotcloud env で設定された環境変数は、dotcloud.yml で定義された環境変数に取って代わります。

つまり、サンドボックス アプリに異なる値を設定したい場合は、サンドボックス アプリで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

ノート

于 2012-11-19T13:57:07.083 に答える