Heroku é uma solução de plataforma como serviço (PaaS) para hospedagem de aplicativos web em várias linguagens de agente, incluindo Python. Com o agente, você pode estender o Heroku com métricas da New Relic.
Este documento descreve considerações especiais para usar o Heroku como serviço de hospedagem com agente Python.
Instale o complemento New Relic
Após implantar seu aplicativo Python no Heroku, instale o agente Python:
A instalação do complemento cria automaticamente uma conta privada New Relic e configura o acesso para hosts Heroku. O agente começará a monitorar o desempenho do aplicativo, a experiência do usuário final e o desempenho do host coletados após a instalação do complemento. Dentro de alguns minutos, os dados deverão começar a aparecer na página Resumo do APM.
Atualizar a partir de uma instalação de agente existente
Se um agente já estiver instalado, reinstale o complemento usando o comando Heroku toolbelt.
$heroku config:set NEW_RELIC_APP_NAME='Your Application Name'
Instale o agente Python
Para instalar um pacote Python de terceiros, como nosso agente Python no Heroku, use pip. O Heroku procura automaticamente um arquivo requirements.txt no diretório raiz do seu projeto. Ele instala tudo o que está listado nesse arquivo quando você envia seu projeto para o Heroku.
Crie ou edite o arquivo
requirements.txt
, adicionando a linha:newrelicDjango users: Modifique a entrada
web
do seuProcfile
, prefixando o valor comnewrelic-admin run-program
. Por exemplo:web: newrelic-admin run-program gunicorn mysite.wsgiEnvie seu projeto para o Heroku.
Isso instalará o pacote do agente Python com a versão mais recente listada no Python Package Index (PyPi).
Atualizar o agente Python
Heroku armazena pacotes em cache e não detecta quando uma versão mais recente do agente Python está disponível. Para forçar uma atualização:
Edite o arquivo
requirements.txt
incluindo a versão específica do agente Python (n.n.n.n
) com o nome do pacote:newrelic==n.n.n.nEnvie seu projeto para o Heroku.
Verifique o complemento New Relic
Para verificar se o complemento New Relic foi ativado, execute:
$heroku run env | grep NEW_RELIC
Isso gera uma lista de variáveis de ambiente específicas do New Relic no Heroku. O agente Python os usa para determinar quais dados de conta e aplicativo da New Relic usar para relatar dados.
No mínimo, você deverá ver:
NEW_RELIC_LOG=stdoutNEW_RELIC_LICENSE_KEY=****************************************NEW_RELIC_APP_NAME=Your app name
O é exclusivo da sua conta New Relic.
Solucione problemas de sua instalação
Alguns minutos após a instalação e configuração do agente, os dados deverão começar a aparecer na página Resumo do APM do seu aplicativo. Se nenhum dado aparecer, teste se as variáveis de ambiente estão sendo detectadas corretamente executando:
$heroku run newrelic-admin validate-config - stdout
Isso criará uma conexão e reportará dados de transação de teste no aplicativo Python Agent Test. Capture a saída da execução do teste e use os dados para solucionar o problema. Se precisar de mais assistência, siga os procedimentos de resolução de problemas do agente Python.
Inicialize o agente Python
Para inicializar o agente Python:
- Na raiz do seu projeto, encontre o
Procfile
- Modifique a entrada
web
emProcfile
para definir o que fazer para iniciar seu aplicativo Web Python. - Consulte os exemplos a seguir para inserir
newrelic-admin run-program
no início do comando. - Execute seu aplicativo Web Python sob o controle do script de administração do agente Python.
Mecanismo de hospedagem | Exemplo de entrada da web |
---|---|
Flask com o host de desenvolvimento integrado |
|
Frasco com gunicórnio |
|
Django com gunicorn listado em |
|
Cuidado
Evite usar hosts de desenvolvimento integrados de qualquer framework web anterior ao Python versão 2.7.4 ou anterior ao Django 1.4. Em vez disso, use gunicorn ou uWSGI.
O host WSGI que usa o módulo wsgiref não era totalmente compatível com WSGI para hosts de desenvolvimento anteriores à versão 2.7.4 do Python. Isso impediu que o agente Python pudesse relatar dados corretos.
Envolvimento de aplicativo WSGI
O agente fornece encapsulamento automático do ponto do aplicativo WSGI para estas estruturas da web:
- Bottle
- Django
- Flask
Se você estiver usando qualquer uma dessas estruturas da web Python, nenhuma etapa adicional será necessária.
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.
Se o ponto de entrada for este... | Fazem isto... |
---|---|
O ponto de entrada é uma função | Embrulhe em um decorador:
|
O ponto de entrada é uma função ou objeto importado de um módulo diferente | Envolva-o no estilo decorador
|
Acompanhe as tarefas do Celery
Para registrar o tempo de execução de tarefas do Celery como tarefas em segundo plano em seu aplicativo da web, envolva a inicialização do host do Celery com o comando newrelic-admin
.
Prefixe o comando de inicialização existente definido pela entrada worker
em seu Procfile
:
worker: newrelic-admin run-program python hellodjango/manage.py celeryd -E -B --loglevel=INFO
Depure o agente Python
Para começar a depuração, colete a saída de log do agente Python. Heroku envia a saída do agente Python para a saída padrão e a captura no log do servidor web.
Para obter acesso ao log do servidor web do Heroku, execute:
$heroku logs
Por padrão, o agente Python log no nível info
. Se o suporte da New Relic solicitar um nível alternativo de registro em log, você deverá adicionar manualmente uma variável de configuração. Por exemplo, para definir a saída de registro como debug
, execute:
$heroku config:add NEW_RELIC_LOG_LEVEL=debug
Seu aplicativo é reiniciado automaticamente quando você altera o nível de log.
Cuidado
O nível de log debug
produz grandes quantidades de saída. Certifique-se de remover esta configuração assim que ela não for mais necessária, executando:
$heroku config:remove NEW_RELIC_LOG_LEVEL
Edite o arquivo de configuração do agente
Ao usar o complemento do Heroku com o New Relic, isso define automaticamente as principais variáveis de ambiente para o agente Python. Você também pode personalizar configurações adicionais com o arquivo de configuração do agente ou usar configuração no lado do servidor.
Não adicione configurações básicas, como chave de licença, nome do aplicativo, etc., ao arquivo de configuração. Heroku adiciona automaticamente essas configurações.
Para personalizar outras configurações, use o arquivo de configuração do agente Python com Heroku:
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 Heroku: Na seção[newrelic]
, inclua a definição de configuração específica; por exemplo:[newrelic]transaction_tracer.function_trace = mydbm:connectEnvie o arquivo de configuração para o seu repositório e envie a alteração para o Heroku.
Use o comando
heroku config:add
para definir a variável de ambienteNEW_RELIC_CONFIG_FILE
para seu aplicativo implantado:bash$heroku config:add NEW_RELIC_CONFIG_FILE=newrelic.ini
Se você estiver usando o programa wrapper newrelic-admin para lançar seu host WSGI, as configurações de sua chave de licença, nome do aplicativo etc. serão obtidas nas variáveis de ambiente definidas pelo Heroku. Quaisquer configurações adicionais definidas no arquivo de configuração do agente também serão aplicadas. Então, quando o agente se registrar no New Relic, qualquer configuração no lado do servidor também será mesclada para criar a configuração final que o agente utilizará.