Problema
Você pode configurar o agente Python para log a saída. Essa configuração permite que o agente rastreie se está se conectando corretamente ao New Relic e se ocorre algum erro. Esta informação será útil para o suporte da New Relic se você tiver problemas.
Solução
O registro debug
detalhado pode ajudar a solucionar problemas de instalação do agente Python padrão.
Importante
Alguns parceiros utilizam procedimentos diferentes:
Para ativar o registro debug
:
Abra seu newrelic.ini, geralmente localizado na hierarquia do seu aplicativo.
Remova o comentário
#log_file = /tmp/newrelic-python-agent.log
. Certifique-se de ter permissões de gravação no local do log, alterando o caminho e o nome do arquivo, se necessário. Se não houver um local de arquivo adequado, você poderá definirlog_file
comostderr
.Altere
log_level
paradebug
(deinfo
).Cuidado
O registro em
debug
pode gerar muitos dados muito rapidamente. monitor o tamanho do seu arquivo de log de perto, alterandolog_level
de volta parainfo
conforme você conclui a resolução de problemas.Salve e feche o arquivo. Reinicie seu aplicativo para que as configurações tenham efeito.
Gere alguns minutos de tráfego para seu aplicativo.
Se estiver enviando seu arquivo de log para o suporte da New Relic, anexe seu newrelic.ini ao seu ticket de suporte e informe ao suporte seu fuso horário.
Importante
Quando resolver problemas com seu agente New Relic Python, certifique-se de que ele tenha sido configurado para gerar arquivos de log de nível de depuração e monitor de perto o tamanho de seu arquivo de log. Usar log_level = debug
gera muitos dados muito rapidamente. Após reproduzir seu problema, retorne o arquivo de log para log_level = info
.
Log em um arquivo
O agente usa o módulo de log do Python para gerar a mensagem do log. A saída do agente deve, portanto, ser levada em consideração na estratégia geral de log do seu aplicativo.
Se você não estiver usando o módulo de log, o agente fornecerá uma maneira simplificada de ativar um arquivo de log para o agente Python. Para usar isso, defina as opções log_file
e log_level
no arquivo de configuração do agente.
Example:
log_file = /tmp/newrelic-python-agent.loglog_level = info
O caminho fornecido para log_file
deve ser gravável para o usuário com o qual seu aplicativo é executado.
Dica
Se estiver usando Apache/mod_wsgi
o usuário Apache restringiu o acesso ao sistema de arquivos. Crie um diretório especial no qual o arquivo de log possa ser colocado e que seja gravável para o usuário Apache. É recomendado usar um caminho absoluto e não um caminho relativo.
O nível de log usado pode ser error
, warning
, info
ou debug
. Em circunstâncias normais, use info
. Opções de depuração mais detalhadas são usadas para debug
. Não use essas opções de depuração detalhadas por um longo período de tempo. Eles podem gerar saída excessiva e o manipulador de arquivo de log do módulo de registro é o manipulador de arquivo padrão e não executa nenhuma rotação de arquivo de log.
Log no erro padrão
Para alguns provedores de hospedagem, talvez não seja possível usar um arquivo de log distinto para o agente. Configure o módulo de registro para log na saída de erro padrão. Essa saída é capturada no arquivo de log de erros normal do seu mecanismo de hospedagem.
Para fazer isso no arquivo de configuração do agente:
log_file = stderrlog_level = info
O valor stdout
também pode ser usado em vez de stderr
.
Log todos os dados ( log de auditoria)
Se precisar registrar e visualizar informações sobre dadosall transmitidos entre o processo de monitoramento e o coletor New Relic, você poderá ativar o registro de auditoria por curtos períodos de tempo. Isso é útil, por exemplo, para depuração ou auditoria, quando você precisa de informações detalhadas sobre o que exatamente está sendo transmitido.
Solucionar problemas de conflitos do módulo de log
Se nenhum registro for capturado, poderá haver um conflito com a forma como o módulo de registro do Python está sendo inicializado e/ou configurado. Podem surgir problemas usando as seguintes funções:
Consulte a documentação de qualquer framework ou aplicativo da web em uso. Pode fornecer um mecanismo especializado para configurar o módulo de registro do Python. Por exemplo, ao usar o Django, a abordagem de dicionário para configurar o módulo de registro do Python é suportada automaticamente, com as definições sendo definidas no atributo LOGGING
dentro do módulo de configurações do Django.
Para obter mais informações, consulte a documentação de configuração de log do Django .
Alternar arquivo de log do agente
Ao usar a opção log_file
na configuração do agente, o manipulador de arquivo padrão do módulo de geração de registros é usado. Isso não faz nenhuma rotação do arquivo de log. A rotação do arquivo de log não é feita automaticamente, pois não saberemos que tipo de manipulador de arquivo de log rotativo você pode querer usar, além disso, os manipuladores de arquivo de log rotativo padrão fornecidos com Python não são necessariamente seguros para uma configuração de vários processos. Como tal, pode ser necessário baixar e usar um dos manipuladores de arquivo de log rotativos de terceiros ou usar um sistema de registro dedicado.
Se seu aplicativo for executado em um único processo, você poderá usar com segurança um dos manipuladores RotatingFileHandler
ou TimedRotatingFileHandler
fornecidos com o módulo de geração de registros. Para usar isso apenas para a saída do agente Python, inclua no início do arquivo ou módulo de script WSGI, mas antes da importação do módulo newrelic
, o seguinte:
_LOG_FORMAT = ( "%(asctime)s (%(process)d/%(threadName)s)" " %(name)s %(levelname)s - %(message)s")
_logger = logging.getLogger("newrelic")_handler = logging.handlers.TimedRotatingFileHandler( "agent.log", when="midnight", backupCount=7)_formatter = logging.Formatter(_LOG_FORMAT)_handler.setFormatter(_formatter)_logger.addHandler(_handler)_logger.setLevel(logging.INFO)
Esse código acessa a instância do agente raiz newrelic
, anexa o manipulador de arquivo de log rotativo a ela e define o nível de log para mensagens a serem enviadas para esse arquivo de log. Também mostramos como configurar o formato da mensagem do log, mas isso é opcional.
Se o módulo de registro como um todo for inicializado, qualquer saída log será propagada e registrada por qualquer manipulador associado ao agente raiz, incluindo possivelmente o erro padrão. Para evitar duplicatas, configure o manipulador de log para o agente root.
O código acima também pode ser simplificado usando a função logging.fileConfig()
e um arquivo de configuração. Para obter mais detalhes sobre o uso de um arquivo de configuração, consulte a documentação do módulo de log do Python em Logging configuração.
Girar log na configuração de vários processos
Os manipuladores rotativos de arquivo de log fornecidos no módulo de registro padrão não são totalmente seguros para uso em uma configuração de servidor multiprocessos. Os problemas que podem ocorrer são a mistura de mensagens de vários processos e tentativas de vários processos de executar a rotação do arquivo de log ao mesmo tempo.
Para um mecanismo de rotação de arquivo de log mais robusto, use um manipulador de log de terceiros em conjunto com o módulo de log do Python.
Uma dessas implementações disponíveis no PyPi é:
Para uma solução mais complexa, você também pode considerar um serviço de registro como:
Consulte também a lista de outros manipuladores fornecidos como padrão no módulo de registro do Python, pois aqueles para envio para um soquete ou postagem para uma URL HTTP também podem ser soluções razoáveis em algumas circunstâncias.