Uso de Elastic Beanstalk con Amazon CloudWatch Logs - AWS Elastic Beanstalk

Uso de Elastic Beanstalk con Amazon CloudWatch Logs

Con CloudWatch Logs, puede supervisar y archivar la aplicación de Elastic Beanstalk, el sistema y los archivos de registro personalizados de instancias de Amazon EC2 de sus entornos. También puede configurar alarmas que le ayuden a reaccionar a determinados eventos de transmisión de logs que extraigan los filtros de las métricas. El agente de CloudWatch Logs instalado en cada instancia de Amazon EC2 del entorno publica puntos de datos de métrica en el servicio de CloudWatch para cada grupo de registro que configure. Cada grupo de registros aplica sus propios patrones de filtro para determinar qué eventos de transmisión de registros se envían a CloudWatch como puntos de datos. Las transmisiones de logs que pertenecen al mismo grupo de logs comparten la misma configuración de retención, monitorización y control de acceso. Puede configurar Elastic Beanstalk para que transmita automáticamente los registros al servicio CloudWatch, como se describe en Transmisión de registros de instancias a CloudWatch Logs. Para obtener más información acerca de CloudWatch Logs, incluida la terminología y los conceptos, consulte la Guía de usuario de Amazon CloudWatch Logs.

Además de los registros de instancias, si habilita el estado mejorado de su entorno, puede configurar dicho entorno para que realice la transmisión de la información de estado a CloudWatch Logs. Consulte Transmisión de información sobre el estado del entorno Elastic Beanstalk a Amazon CloudWatch Logs.

En la figura siguiente se muestran la página de Monitoring (Supervisión) y los gráficos de un entorno que está configurado con la integración de CloudWatch Logs. Las métricas de ejemplo de este entorno se denominan CWLHttp4xx y CWLHttp5xx. Uno de los gráficos muestra que la métrica CWLHttp4xx ha disparado una alarma basada en las condiciones especificadas en los archivos de configuración.

En la figura siguiente se muestran la página Alarms (Alarmas) y los gráficos de las alarmas de ejemplo AWSEBCWLHttp4xxPercentAlarm y AWSEBCWLHttp5xxCountAlarm correspondientes a las métricas CWLHttp4xx y CWLHttp5xx, respectivamente.

Requisitos previos para la transmisión de registros de instancias a CloudWatch Logs

Para habilitar la transmisión de registros de instancias desde las instancias Amazon EC2 del entorno a CloudWatch Logs, debe cumplir las condiciones que se describen a continuación.

  • Plataforma: como esta característica solo está disponible en las versiones de plataforma publicadas en esta versión o en las posteriores, si utiliza una versión de plataforma anterior, actualice su entorno a uno actual.

  • Si no tiene las políticas administradas AWSElasticBeanstalkWebTier o AWSElasticBeanstalkWorkerTier de Elastic Beanstalk en el perfil de instancia de Elastic Beanstalk, debe agregar lo siguiente al perfil para habilitar esta característica.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": [ "*" ] } ] }

Cómo Elastic Beanstalk configura CloudWatch Logs

Elastic Beanstalk instala un agente de registro de CloudWatch con la configuración predeterminada en cada instancia que crea. Obtenga más información en la Referencia de agente de CloudWatch Logs.

Cuando habilita la transmisión de registros de instancias en CloudWatch Logs, Elastic Beanstalk envía archivos de registro de instancias de su entorno a CloudWatch Logs. Las distintas plataformas transmiten registros diferentes. En la siguiente tabla se muestran los registros por plataforma.

Plataforma

Registros

Docker

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/docker

  • /var/log/docker-events.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Go

Corretto

.NET Core en Linux

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Node.js

Python

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/web.stdout.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

Tomcat

PHP

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/httpd/access_log

  • /var/log/httpd/error_log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

.NET en Windows Server

  • C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

Ruby

  • /var/log/eb-engine.log

  • /var/log/eb-hooks.log

  • /var/log/puma/puma.log

  • /var/log/web.stdout.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

En la siguiente tabla se enumeran los archivos de registro transmitidos desde instancias en ramas de plataforma basadas en la AMI de Amazon Linux (anterior a Amazon Linux 2), por plataforma.

Plataforma

Registros

Docker

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

  • /var/log/eb-docker/containers/eb-current-app/stdouterr.log

Docker multicontenedor (genérico)

  • /var/log/eb-activity.log

  • /var/log/ecs/ecs-init.log

  • /var/log/eb-ecs-mgr.log

  • /var/log/ecs/ecs-agent.log

  • /var/log/docker-events.log

Glassfish (Docker preconfigurado)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go (Docker preconfigurado)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Python (Docker preconfigurado)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/docker-events.log

  • /var/log/docker

  • /var/log/nginx/access.log

Go

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

Java SE

  • /var/log/eb-activity.log

  • /var/log/nginx/access.log

  • /var/log/nginx/error.log

  • /var/log/web-1.error.log

  • /var/log/web-1.log

Tomcat

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /var/log/nginx/error_log

  • /var/log/nginx/access_log

Node.js

  • /var/log/eb-activity.log

  • /var/log/nodejs/nodejs.log

  • /var/log/nginx/error.log

  • /var/log/nginx/access.log

  • /var/log/httpd/error.log

  • /var/log/httpd/access.log

PHP

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

Python

  • /var/log/eb-activity.log

  • /var/log/httpd/error_log

  • /var/log/httpd/access_log

  • /opt/python/log/supervisord.log

Ruby (Puma)

  • /var/log/eb-activity.log

  • /var/log/nginx/error.log

  • /var/log/puma/puma.log

  • /var/log/nginx/access.log

Ruby (Passenger)

  • /var/log/eb-activity.log

  • /var/app/support/logs/passenger.log

  • /var/app/support/logs/access.log

  • /var/app/support/logs/error.log

Elastic Beanstalk configura grupos de registro en CloudWatch Logs para los diversos archivos de registro que transmite. Para recuperar determinados archivos de registro de CloudWatch Logs, debe conocer el nombre del grupo de registro correspondiente. El esquema de nomenclatura del grupo de logs depende del sistema operativo de la plataforma.

En el caso de las plataformas Linux, anteponga /aws/elasticbeanstalk/environment_name a la ubicación de archivo de log para obtener el nombre del grupo de logs. Por ejemplo, para recuperar el archivo /var/log/nginx/error.log, especifique el nombre el grupo de logs /aws/elasticbeanstalk/environment_name/var/log/nginx/error.log.

En el caso de las plataformas Windows, consulte en la siguiente tabla el grupo de registros correspondiente a cada archivo de registro.

Archivo de log en la instancia

Grupo de registros

C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log

/aws/elasticbeanstalk/<environment-name>/EBDeploy-Log

C:\Program Files\Amazon\ElasticBeanstalk\logs\Hooks.log

/aws/elasticbeanstalk/<environment-name>/EBHooks-Log

C:\inetpub\logs\LogFiles (todo el directorio)

/aws/elasticbeanstalk/<environment-name>/IIS-Log

Transmisión de registros de instancias a CloudWatch Logs

Puede habilitar la transmisión de registros de instancia a CloudWatch Logs mediante la consola de Elastic Beanstalk, la CLI de EB o las opciones de configuración.

Antes de habilitarlo, configure los permisos de IAM para utilizarlos con el agente de CloudWatch Logs. Puede asociar la siguiente política personalizada al perfil de instancia que asigna a su entorno.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "*" ] } ] }

Transmisión de registros de instancia mediante la consola de Elastic Beanstalk

Para transmitir registros de instancia a CloudWatch Logs

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En el panel de navegación, elija Configuration (Configuración).

  4. En la categoría de configuración Software, elija Edit (Editar).

  5. En Instance log streaming to CloudWatch Logs (Streaming de registros de instancias a CloudWatch Logs):

    • Habilite Log streaming (Streaming de registros).

    • Establezca Retention (Retención) en el número de días que se guardarán los registros.

    • Seleccione la opción Lifecycle (Ciclo de vida) que determina si los registros se guardan una vez finalizado el entorno.

  6. Seleccione Apply.

Después de habilitar el streaming de registros, puede volver a la categoría o página de configuración Software y buscar el enlace Log Groups (Grupos de registros). Haga clic en este enlace para ver los registros en la consola de CloudWatch.

Streaming de registros de instancias mediante la CLI de EB

Para habilitar la transmisión de registros de instancias a CloudWatch Logs con la CLI de EB, use el comando eb logs.

$ eb logs --cloudwatch-logs enable

También puede utilizar eb logs para recuperar registros de CloudWatch Logs. Puede recuperar todos los registros de instancias del entorno o utilizar las numerosas opciones del comando para especificar los subconjuntos de registros que se recuperarán. Por ejemplo, el siguiente comando recupera el conjunto completo de registros de instancias correspondientes a su entorno y los guarda en un directorio en .elasticbeanstalk/logs.

$ eb logs --all

En concreto, la opción --log-group le permite recuperar los registros de instancias de un grupo de registros específicos, correspondientes a un determinado archivo de registro en la instancia. Para ello, debe conocer el nombre del grupo de registros que corresponde al archivo de registro que desea recuperar. Puede encontrar esta información en Cómo Elastic Beanstalk configura CloudWatch Logs.

Streaming de registros de instancias mediante archivos de configuración

Al crear o actualizar un entorno, puede utilizar un archivo de configuración para instalar y configurar la transmisión de registros de instancias a CloudWatch Logs. En el siguiente ejemplo, el archivo de configuración habilita el streaming de logs de instancias predeterminado. Elastic Beanstalk realiza la transmisión del conjunto predeterminado de los archivos de registro de la plataforma del entorno. Para utilizar el ejemplo, copie el texto en un archivo con la extensión .config en el directorio .ebextensions en el nivel superior del paquete de código fuente de la aplicación.

option_settings: - namespace: aws:elasticbeanstalk:cloudwatch:logs option_name: StreamLogs value: true

Streaming de archivos de registro personalizados

La integración de Elastic Beanstalk con CloudWatch Logs no admite directamente la transmisión de archivos de registro personalizados que genera su aplicación. Para realizar la transmisión de los registros personalizados, utilice un archivo de configuración para instalar directamente el agente de CloudWatch Logs y para configurar los archivos para su envío. Para ver un archivo de configuración de ejemplo, consulte logs-streamtocloudwatch-linux.config.

nota

El ejemplo no funciona en la plataforma Windows.

Para obtener más información acerca de cómo configurar CloudWatch Logs, consulte la Referencia del agente de CloudWatch Logs en la Guía de usuario de Amazon CloudWatch Logs.

Solución de problemas con la integración de CloudWatch Logs

Si no puede encontrar algunos registros de instancias del entorno que espera en CloudWatch Logs, puede investigar los siguientes problemas comunes:

  • Su rol de IAM carece de los permisos de IAM necesarios.

  • Lanzó su entorno en una región de AWS que no admite CloudWatch Logs.

  • Uno de sus archivos de log personalizados no existe en la ruta que especificó.