OpenShift é uma solução de plataforma como serviço (PaaS) capaz de hospedar aplicativos web usando diversas linguagens, incluindo o agente Python.
Prepare seu aplicativo
Antes de instalar o agente Python, certifique-se de que seu aplicativo Web Python esteja instalado e em execução no OpenShift usando um dos cartuchos Python disponíveis. Consulte os guias dos desenvolvedores do OpenShift para obter mais informações.
Instale o agente Python do APM
OpenShift oferece suporte a duas maneiras diferentes de instalar pacotes Python de terceiros. Você pode listar o pacote como uma dependência no setup.py
do seu aplicativo da web ou no arquivo requirements.txt
usado por pip
.
Se você estiver usando um arquivo setup.py
, instale o agente adicionando newrelic
à lista de módulos de terceiros passados para install_requires
:
from setuptools import setup
setup( name="YourAppName", version="1.0", description="OpenShift App", author="Your Name", author_email="example@example.com", url="https://www.python.org/community/sigs/current/distutils-sig", install_requires=["Flask>=0.7.2", "MarkupSafe", "newrelic"],)
Se você estiver usando pip
, adicione a seguinte linha a requirements.txt
:
newrelic
Quando você envia seu projeto para o OpenShift, isso instalará o pacote do agente Python. Ele usará a versão mais recente do agente Python do espelho OpenShift do Python Package Index (PyPi). As atualizações do espelho OpenShift do PyPi podem ser atrasadas, então você pode ter que esperar até um dia antes que uma nova versão do PyPi esteja disponível no OpenShift.
Atualizar o agente Python
O OpenShift armazenará pacotes em cache e não detectará quando uma versão mais recente do agente Python estiver disponível. Para forçar um upgrade para uma versão mais recente, liste explicitamente a versão em relação ao nome do pacote no arquivo setup.py
ou requirements.txt
e envie seu aplicativo. Use esta sintaxe:
newrelic==A.B.C.D
Substitua A.B.C.D
pela versão do agente Python que você deseja instalar.
Use variáveis de ambiente do agente Python
Para que o agente Python relate dados para a conta correta, você precisa informar a ele o da sua conta New Relic. Para o OpenShift, a maneira mais segura de fornecer a chave de licença é usar uma variável de ambiente configurada na configuração do seu aplicativo usando o comando rhc env set
. Isso evita o armazenamento de informações confidenciais em seu repositório GIT e também funciona se você estiver usando um aplicativo da web dimensionado hospedado em vários hosts físicos.
$rhc env set NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY -a YOUR_APP_NAME
Ao especificar sua chave de licença, informe também ao agente Python onde gravar a mensagem do log:
$rhc env set NEW_RELIC_LOG=stderr -a YOUR_APP_NAME
Para verificar se as variáveis de ambiente estão sendo definidas, execute:
$rhc env list -a YOUR_APP_NAME
Embora definidos, eles só entrarão em vigor na próxima vez que as engrenagens do aplicativo da web forem reiniciadas.
Teste a instalação do agente
Para testar se o pacote do agente Python foi instalado corretamente e se as variáveis de ambiente do agente estão sendo definidas corretamente, você pode ssh
entrar na engrenagem principal do seu aplicativo e executar:
$newrelic-admin validate-config - stdout
Este script administrativo criará uma conexão e reportará dados de transação de teste no aplicativo Python Agent Test em sua conta.
Os dados podem levar até cinco minutos para aparecer na interface. Se não aparecer depois de algum tempo, capture a saída da execução do teste e use os dados para solucionar o problema. Se precisar de mais assistência, obtenha suporte em support.newrelic.com.
Inicialize o agente Python
Os cartuchos OpenShift Python fornecem duas maneiras de executar um aplicativo WSGI.
- O primeiro método usa uma instalação pré-configurada do Apache/mod_wsgi. Neste caso, o ponto de entrada do seu aplicativo WSGI deve ser definido no arquivo
wsgi.py
. - O segundo método depende de você fornecer um script de aplicativo Web Python independente chamado
app.py
. Normalmente, isso iniciará um servidor WSGI Python integrado, com o ponto de entrada do aplicativo WSGI especificado no arquivoapp.py
ou será importado de um arquivo de código Python separado, como o arquivowsgi.py
.
Para qualquer um dos métodos, o OpenShift controla a inicialização do servidor WSGI. Você deve integrar manualmente o agente Python ao seu aplicativo WSGI. Não é possível usar o script wrapper newrelic-admin
na inicialização do servidor WSGI.
Se você estiver usando a abordagem Apache/mod_wsgi, adicione o seguinte código bem no início do arquivo wsgi.py
:
import newrelic.agentnewrelic.agent.initialize()
Certifique-se de que isso precede qualquer outra importação de módulo Python que apareça no arquivo wsgi.py
. Não é necessário fornecer nenhum argumento para a chamada initialize()
, porque as informações da chave de licença e o destino da criação de log são lidos nas variáveis de ambiente.
Se você estiver usando um servidor WSGI Python integrado de app.py
, coloque essas linhas na parte superior do arquivo app.py
, mesmo se você importar o ponto de entrada do aplicativo WSGI de um arquivo wsgi.py
. Ao usar app.py
com wsgi.py
, não adicione essas linhas a wsgi.py
.
Evite usar os servidores de desenvolvimento integrados de qualquer framework web. Além disso, não use o cartucho OpenShift Python 2.6 ou versões mais antigas do Django. Isso ocorre porque esses servidores de desenvolvimento geralmente são baseados no servidor WSGI do módulo wsgiref da biblioteca padrão do Python. O servidor WSGI do módulo wsgiref tinha um bug, o que significava que não era totalmente compatível com WSGI e isso faria com que o agente Python relatasse dados incorretos. Este problema com o módulo wsgiref foi corrigido apenas no Python 2.7.4. O servidor WSGI integrado em versões mais antigas do Django anteriores ao Django 1.4 tinha um problema semelhante.
Envolva o aplicativo WSGI
Se você estiver usando uma framework web Python para a qual o agente fornece encapsulamento automático do ponto de entrada do aplicativo WSGI, isso é tudo o que precisa ser feito. A estrutura web Python com empacotamento automático inclui Django, Flask e Bottle.
Para outros, você deve modificar o arquivo de código Python com o ponto de entrada do aplicativo WSGI para encapsular o objeto do aplicativo WSGI com um wrapper de aplicativo WSGI. Isso iniciará o tempo para as solicitações da web recebidas pelo seu aplicativo.
Ponto de entrada | Código de exemplo |
---|---|
O ponto de entrada é uma função | Envolva-o em um decorador.
|
Enty point é uma função ou objeto importado de um módulo diferente. | Envolva-o em estilo pré-decorador.
|
Substituir o nome do aplicativo
Por padrão, seus dados são registrados com o nome do aplicativo Python Application. Para alterar o nome de exibição, use a interface do usuário do APM. No entanto, do lado do agente, é altamente recomendável mantê-lo como um valor único e imutável, independente de alterações no nome de exibição na interface. Isso é necessário se você pretende administrar vários sites distintos na mesma conta New Relic e deseja que os dados sejam relatados separadamente.
Para substituir o nome do aplicativo, use o comando rhc env set
:
$rhc env set NEW_RELIC_APP_NAME='Web Site (Production)' -a yourappname
Para verificar se a configuração foi atualizada, execute:
$rhc env list -a yourappname
Então procure:
NEW_RELIC_APP_NAME=Web Site (Production)
As alterações nas variáveis de ambiente só terão efeito na próxima vez que você reiniciar o seu aplicativo da web.
Depure o agente Python
Para começar a depuração, colete a saída de log do agente Python. Quando a variável de ambiente NEW_RELIC_LOG
for definida como stderr
, a mensagem do log do agente Python será capturada no web log padrão do aplicativo Python.
Para seguir o log da web do aplicativo no OpenShift, execute:
$rhc tail -a YOUR_APP_NAME
Para obter o log completo, copie de cada um dos seus aplicativos da web o arquivo de log:
$OPENSHIFT_PYTHON_LOG_DIR/python.log
Por padrão, o agente Python log no nível info
. Se o agente exigir um nível alternativo de log, você precisará adicionar manualmente uma variável de ambiente adicional. Por exemplo, para definir a saída de registro como debug
, execute:
$rhc env set NEW_RELIC_LOG_LEVEL=debug -a YOUR_APP_NAME
As variáveis de ambiente não entram em vigor imediatamente, portanto, reinicie o equipamento do seu aplicativo da web.
Execute a geração de registros debug
somente quando solicitado e somente pelo tempo necessário. O log de depuração pode produzir muitos resultados e sobrecarregar seu arquivo de log. Remova essa configuração assim que ela não for mais necessária, executando o seguinte comando e, em seguida, reinicie o seu aplicativo da web:
$rhc env unset NEW_RELIC_LOG_LEVEL -a YOUR_APP_NAME
Use o arquivo de log para solucionar o problema. Se precisar de mais assistência, obtenha suporte em support.newrelic.com
Atualizar arquivo de configuração do agente
Com o OpenShift, a maneira preferida de especificar a chave de licença da sua conta e definir para onde deve ir o registro é usar variáveis de ambiente. Isso significa que não é necessário usar um arquivo de configuração do agente para que o agente funcione. Entretanto, sem o arquivo de configuração do agente, não é possível personalizar outras configurações do agente.
Se você ativar a configuração no lado do servidor para seu aplicativo, não precisará de um arquivo de configuração do agente. Isso é feito a partir de Application settings no aplicativo de interface do usuário do APM. Usando a configuração no lado do servidor você pode substituir as configurações principais do agente. Quando uma alteração é feita em uma configuração por meio da interface, o agente em execução em cada um dos processos do seu aplicativo da web será notificado e coletará as configurações alteradas.
Porém, alguns recursos do agente são incompatíveis com a configuração no lado do servidor. Nesses casos, use um arquivo de configuração do agente enviado com seu aplicativo da web para o OpenShift.
Para adicionar e ativar um arquivo de configuração de agente com OpenShift:
Adicione o arquivo de configuração do agente
newrelic.ini
ao diretório raiz do repositório do projeto que você está enviando para o OpenShift. Ele deve conter uma seção[newrelic]
junto com apenas a definição de configuração específica que você precisa definir. Por exemplo:[newrelic]transaction_tracer.function_trace = mydbm:connectNão use o arquivo de configuração do agente para configurações principais, como a chave de licença ou o nome do aplicativo, pois isso substituirá as configurações da variável de ambiente. Você provavelmente também não deseja a chave de licença como parte do seu repositório GIT, especialmente se o código-fonte do projeto estiver disponível publicamente.
Observe também que se a configuração no lado do servidor estiver habilitada ao mesmo tempo, qualquer configuração que possa ser definida por meio da configuração no lado do servidor sempre substituirá a configuração local. Portanto, use isto apenas para configurações que não podem ser definidas usando a configuração no lado do servidor se a configuração no lado do servidor estiver habilitada.
Agora modifique o arquivo
wsgi.py
ouapp.py
onde você adicionou o código para inicializar o agente Python. Altere o código que você já adicionou:import osimport newrelic.agentrepo_dir = os.environ['OPENSHIFT_REPO_DIR']config_file = os.path.join(repo_dir, 'newrelic.ini')newrelic.agent.initialize(config_file)Confirme o arquivo de configuração em seu repositório e envie a alteração para o OpenShift.