AWS Elastic Beanstalk
Guia do desenvolvedor

Visualizar logs de instâncias do Amazon EC2 no ambiente do Elastic Beanstalk

As instâncias do Amazon EC2 em seu ambiente do Elastic Beanstalk geram logs que você pode visualizar para solucionar problemas com seu aplicativo ou arquivos de configuração. Os logs criados pelo servidor web, servidor de aplicativos, scripts de Plataforma do Elastic Beanstalk e AWS CloudFormation são armazenados localmente em instâncias individuais. Você pode recuperá-los facilmente usando o console de gerenciamento do ambiente ou a CLI do EB. Também é possível configurar seu ambiente para transmitir logs ao Amazon CloudWatch Logs em tempo real.

Logs finais são as últimas 100 linhas dos arquivos de log usados com mais frequência — logs operacionais do Elastic Beanstalk e logs do servidor web ou servidor de aplicativos. Quando você solicita logs finais no console de gerenciamento do ambiente ou com eb logs, uma instância em seu ambiente concatena as entradas de log mais recentes em um único arquivo de texto e o carrega no Amazon S3.

Logs em pacote são logs completos para uma maior variedade de arquivos de log, incluindo logs do yum e do cron e vários logs do AWS CloudFormation. Quando você solicita logs em pacote, uma instância em seu ambiente empacota todos os arquivos de log em um arquivo ZIP e o carrega no Amazon S3.

nota

As plataformas Windows Server do Elastic Beanstalk não são compatíveis com logs em pacote.

Para fazer upload de logs girados para o Amazon S3, as instâncias em seu ambiente precisam ter um perfil da instância com permissão para gravar no bucket do Amazon S3 do Elastic Beanstalk. Essas permissões são incluídas no perfil da instância padrão cuja criação o Elastic Beanstalk solicita quando você inicia um ambiente no Console do Elastic Beanstalk pela primeira vez.

Para recuperar logs no console de gerenciamento do ambiente, navegue até Logs, selecione Request Logs (Solicitar logs) e escolha o tipo de logs a recuperar. Para obter logs finais, escolha Últimas 100 linhas. Para obter logs em pacote, selecione Logs completos.


      Página Environment Logs (Logs do ambiente) do Console do Elastic Beanstalk

Quando o Elastic Beanstalk concluir a recuperação de seus logs, selecione Download.

O Elastic Beanstalk armazena os logs finais e em pacote em um bucket do Amazon S3 e gera um URL do Amazon S3 pré-assinado que você pode usar para acessar seus logs. O Elastic Beanstalk exclui os arquivos do Amazon S3 após um período de 15 minutos.

Atenção

Qualquer pessoa que possua o URL do Amazon S3 pré-assinado poderá acessar os arquivos antes que eles sejam excluídos. Disponibilize o URL somente para partes confiáveis.

nota

Sua política de usuário deve ter a permissão s3:DeleteObject. O Elastic Beanstalk usa suas permissões de usuário para excluir os logs do Amazon S3.

Para mantê-los, configure o ambiente para publicá-los no Amazon S3 automaticamente depois que forem alternados. Para habilitar a alternância de logs para o Amazon S3, siga o procedimento em Configuração da visualização de logs de instância. As instâncias em seu ambiente tentarão fazer upload dos logs que foram girados uma vez por hora.

Se o aplicativo gera logs em um local que não faz parte da configuração padrão da plataforma do ambiente, você pode estender a configuração padrão usando arquivos de configuração (.ebextensions). É possível adicionar arquivos de log de seu aplicativo aos logs finais, aos logs em pacote e à rotação de logs.

Para streaming de logs em tempo real e armazenamento a longo prazo, configure o ambiente para transmitir logs para o Amazon CloudWatch Logs.

Local do log em instâncias do Amazon EC2

Os logs são armazenados em locais padrão nas instâncias do Amazon EC2 em seu ambiente. O Elastic Beanstalk gera os seguintes logs.

Linux

  • /var/log/eb-activity.log

  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\

  • C:\cfn\logs\cfn-init.log

Esses logs contêm mensagens sobre atividades de implantação, incluindo mensagens relacionadas a arquivos de configuração (.ebextensions).

Cada aplicativo e servidor web armazena logs em uma pasta própria:

  • Apache/var/log/httpd/

  • IISC:\inetpub\wwwroot\

  • Node.js/var/log/nodejs/

  • nginx/var/log/nginx/

  • Passenger/var/app/support/logs/

  • Puma/var/log/puma/

  • Python/opt/python/log/

  • Tomcat/var/log/tomcat8/

Local dos logs no Amazon S3

Ao solicitar logs finais ou em pacote do ambiente ou quando as instâncias fazem upload de logs alternados, eles são armazenados no bucket do Elastic Beanstalk no Amazon S3. O Elastic Beanstalk cria um bucket chamado elasticbeanstalk-region-account-id para cada região da AWS na qual você cria ambientes. Dentro desse bucket, os logs são armazenados no caminho resources/environments/logs/logtype/environment-id/instance-id.

Por exemplo, os logs da instância i-0a1fd158, no ambiente e-mpcwnwheky do Elastic Beanstalk na região us-west-2 da AWS na conta 123456789012, são armazenados nos seguintes locais:

  • Logs finais

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158

  • Logs em pacote

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158

  • Logs alternados

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

nota

Você pode localizar o ID do ambiente no console de gerenciamento do ambiente.

O Elastic Beanstalk exclui automaticamente os logs finais e em pacote do Amazon S3 15 minutos depois de serem criados. Os logs girados persistem até você excluí-los ou movê-los para Glacier.

Configurações de rotação de log no Linux

Em Plataformas Linux, o Elastic Beanstalk usa logrotate para fazer o rodízio dos logs periodicamente. Se configurado, depois que um log é alternado localmente, a tarefa de alternância de logs seleciona-o e faz upload dele no Amazon S3. Por padrão, os logs que são alternados localmente não são exibidos em logs finais ou em pacote.

Você pode encontrar os arquivos de configuração do Elastic Beanstalk para logrotate em /etc/logrotate.elasticbeanstalk.hourly/. Essas configurações de rotação são específicas da plataforma e podem mudar em futuras versões dela. Para obter mais informações sobre as definições disponíveis e configurações de exemplo, execute man logrotate.

Os arquivos de configuração são chamado de trabalhos cron em /etc/cron.hourly/. Para obter mais informações sobre cron, execute man cron.

Extensão da configuração padrão da tarefa de log

O Elastic Beanstalk usa arquivos em subpastas de /opt/elasticbeanstalk/tasks (Linux) ou C:\Program Files\Amazon\ElasticBeanstalk\config (Windows Server) na instância do Amazon EC2 para configurar tarefas para logs finais, logs em pacote e rotação de logs.

No Linux:

  • Logs finais

    /opt/elasticbeanstalk/tasks/taillogs.d/

  • Logs em pacote

    /opt/elasticbeanstalk/tasks/bundlelogs.d/

  • Logs alternados

    /opt/elasticbeanstalk/tasks/publishlogs.d/

No Windows Server:

  • Logs finais

    c:\Program Files\Amazon\ElasticBeanstalk\config\taillogs.d\

  • Logs alternados

    c:\Program Files\Amazon\ElasticBeanstalk\config\publogs.d\

Por exemplo, o arquivo eb-activity.conf no Linux adiciona dois arquivos de log à tarefa de logs finais.

/opt/elasticbeanstalk/tasks/taillogs.d/eb-activity.conf

/var/log/eb-commandprocessor.log /var/log/eb-activity.log

Você pode usar arquivos de configuração do ambiente (.ebextensions) para adicionar seus próprios arquivos .conf a essas pastas. Um arquivo .conf lista os arquivos de log específicos para o aplicativo, que o Elastic Beanstalk adiciona às tarefas de arquivo de log.

Use a seção files para adicionar os arquivos de configuração às tarefas que você deseja modificar. Por exemplo, o texto de configuração a seguir adiciona um arquivo de configuração de log a cada instância em seu ambiente: Este arquivo de configuração de log, cloud-init.conf, adiciona /var/log/cloud-init.log a logs finais.

files: "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" : mode: "000755" owner: root group: root content: | /var/log/cloud-init.log

Adicione esse texto a um arquivo com a extensão de nome de arquivo .config em seu pacote de origem em uma pasta chamada .ebextensions.

~/workspace/my-app |-- .ebextensions | `-- tail-logs.config |-- index.php `-- styles.css

Em plataformas Linux, você também pode usar caracteres curinga em configurações de tarefas de log. Este arquivo de configuração adiciona todos os arquivos com a extensão de nome de arquivo .log da pasta log na raiz do aplicativo aos logs em pacote.

files: "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" : mode: "000755" owner: root group: root content: | /var/app/current/log/*.log

nota

As configurações de tarefas de log não oferecem suporte a caracteres curinga em plataformas Windows.

Para obter mais informações sobre o uso de arquivos de configuração, consulte Personalização avançada de ambiente com arquivos de configuração (.ebextensions).

Assim como é possível estender logs finais e logs de pacote, você pode estender a rotação de log usando um arquivo de configuração. Sempre que o Elastic Beanstalk gira seus próprios logs e faz upload deles para o Amazon S3, ele também gira e faz upload dos logs adicionais. A extensão de rotação de log se comporta de forma diferente dependendo da plataforma do sistema operacional. As seções a seguir descrevem os dois casos.

Extensão de rotação de log no Linux

Como explicado em Configurações de rotação de log no Linux, o Elastic Beanstalk usa logrotate para girar logs em Plataformas Linux. Quando você configura os arquivos de log do aplicativo para a rotação de log, o aplicativo não precisa criar cópias de arquivos de log. O Elastic Beanstalk configura logrotate para criar uma cópia dos arquivos de log do aplicativo para cada rotação. Portanto, o aplicativo deve manter os arquivos de log desbloqueados quando não estiver gravando nesses arquivos.

Extensão da rotação de log no Windows Server

No Windows Server, quando você configura os arquivos de log do seu aplicativo para a rotação de log, o aplicativo deve girar os arquivos de log periodicamente. O Elastic Beanstalk procura arquivos com nomes iniciados pelo padrão que você configurou e seleciona-os para fazer upload para Amazon S3. Além disso, pontos no nome de arquivo são ignorados e o Elastic Beanstalk considera o nome até o ponto como a base do nome do arquivo de log.

O Elastic Beanstalk faz upload de todas as versões de um arquivo de log base, exceto da mais recente, porque considera essa a versão do arquivo de log do aplicativo ativo, que pode ser bloqueado. O aplicativo pode, portanto, manter o arquivo de log ativo bloqueado entre alternâncias.

Por exemplo: o aplicativo grava em um arquivo de log chamado my_log.log e você especifica esse nome no arquivo .conf. O aplicativo periodicamente gira o arquivo. Durante o ciclo de rotação do Elastic Beanstalk, ele localiza os seguintes arquivos na pasta do arquivo de log: my_log.log, my_log.0800.log, my_log.0830.log. O Elastic Beanstalk considera todos eles como versões do nome base my_log. O arquivo my_log.log possui a hora de modificação mais recente, então o Elastic Beanstalk faz upload apenas dos outros dois arquivos, my_log.0800.log e my_log.0830.log.

Fazer streaming de arquivos de log para o Amazon CloudWatch Logs

Você pode configurar seu ambiente para transmitir logs para o Amazon CloudWatch Logs no Console de gerenciamento da AWS ou usando as opções de configuração. Com o CloudWatch Logs, cada instância em seu ambiente faz o streaming de logs para grupos de logs que você pode configurar para serem retidos por semanas ou anos, mesmo depois que seu ambiente for encerrado.

O conjunto de logs transmitido varia por ambiente, mas sempre inclui o eb-activity.log e os logs de acesso do servidor de proxy nginx ou Apache executado à frente do aplicativo.

Você pode configurar o streaming de logs no Console de gerenciamento da AWS durante a criação do ambiente ou em um ambiente existente. No exemplo a seguir, os logs são salvos por até sete dias, mesmo quando o ambiente é encerrado.


        Configurações do CloudWatch Logs

O arquivo de configuração a seguir permite o streaming de logs com retenção de 180 dias, mesmo se o ambiente estiver encerrado.

exemplo .ebextensions/log-streaming.config

option_settings: aws:elasticbeanstalk:cloudwatch:logs: StreamLogs: true DeleteOnTerminate: false RetentionInDays: 180