Formato de los registros de estado avanzados - AWS Elastic Beanstalk

Formato de los registros de estado avanzados

AWS Elastic BeanstalkLas plataformas de utilizan un formato de registro de servidor web personalizado para transmitir información de forma eficiente sobre las solicitudes HTTP al sistema de informes de estado mejorado. El sistema analiza los registros, identifica los problemas y determina convenientemente el estado de la instancia y del entorno. Aunque se deshabilite el proxy del servidor web en el entorno y las solicitudes se envíen directamente desde el contenedor web, es posible seguir utilizando informes de estado avanzado. Para ello, configure el servidor de forma que se generen registros en la ubicación y se aplique el formato que utiliza el agente de estado de Elastic Beanstalk.

nota

La información de esta página solo es relevante para las plataformas basadas en Linux. En la plataforma de Windows Server, Elastic Beanstalk recibe información sobre las solicitudes HTTP directamente del servidor web de IIS. Para obtener más información, consulte Captura de métricas de servidor web en IIS en Windows Server.

Configuración de los registros de servidor web

Las plataformas Elastic Beanstalk están configuradas para generar dos registros con información sobre las solicitudes HTTP. El primero de ellos tiene un formato detallado y proporciona información pormenorizada de la solicitud, como los datos del agente de usuario del solicitante y una marca de tiempo en lenguaje natural.

/var/log/nginx/access.log

El siguiente ejemplo procede de un proxy nginx que se ejecuta en un entorno de servidor web de Ruby, aunque el formato es similar al de Apache.

172.31.24.3 - - [23/Jul/2015:00:21:20 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:21 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17"

El segundo log tiene un formato más escueto. Solo contiene información que es pertinente para los informes de estado avanzados. Esta log se genera en una subcarpeta llamada healthd y rota cada hora. Los logs antiguos se eliminan inmediatamente después de la rotación.

/var/log/nginx/healthd/application.log.2015-07-23-00

En el siguiente ejemplo, se muestra un log con el formato de lectura mecánica.

1437609879.311"/"200"0.083"0.083"177.72.242.17 1437609879.874"/"200"0.347"0.347"177.72.242.17 1437609880.006"/bad/path"404"0.001"0.001"177.72.242.17 1437609880.058"/"200"0.530"0.530"177.72.242.17 1437609880.928"/bad/path"404"0.001"0.001"177.72.242.17

El formato avanzado del log de estado contiene la siguiente información:

  • Hora de la solicitud, en tiempo Unix

  • Ruta de la solicitud

  • Código de estado HTTP del resultado

  • Tiempo de la solicitud

  • Tiempo de subida

  • Encabezado HTTP X-Forwarded-For

En los proxies de nginx, los valores de tiempo se presentan en segundos de punto flotante, con tres decimales. En Apache, se utilizan microsegundos enteros.

nota

Si aparece una advertencia similar a la siguiente en un archivo de registro (donde DATE-TIME es una fecha y una hora) y utiliza un proxy personalizado (por ejemplo, un entorno de Docker con varios contenedores), debe utilizar .ebextension para configurar el entorno de forma que healthd pueda leer los archivos de registro:

W, [DATE-TIME #1922] WARN -- : log file "/var/log/nginx/healthd/application.log.DATE-TIME" does not exist

Puede comenzar a usar .ebextension en el ejemplo de Docker Multicontainer.

/etc/nginx/conf.d/webapp_healthd.conf

En el siguiente ejemplo, se muestra la configuración del registro de nginx con el formato del registro de healthd resaltado.

upstream my_app { server unix:///var/run/puma/my_app.sock; } log_format healthd '$msec"$uri"' '$status"$request_time"$upstream_response_time"' '$http_x_forwarded_for'; server { listen 80; server_name _ localhost; # need to listen to localhost for worker tier if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/access.log main; access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://my_app; # match the name of upstream directive which is defined above proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /assets { alias /var/app/current/public/assets; gzip_static on; gzip on; expires max; add_header Cache-Control public; } location /public { alias /var/app/current/public; gzip_static on; gzip on; expires max; add_header Cache-Control public; } }

/etc/httpd/conf.d/healthd.conf

En el siguiente ejemplo se muestra la configuración de registro de Apache.

LogFormat "%{%s}t\"%U\"%s\"%D\"%D\"%{X-Forwarded-For}i" healthd CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/healthd/application.log.%Y-%m-%d-%H 3600" healthd

Creación de registros para informes de estado avanzados

Para proporcionar logs al agente de estado, debe hacer lo siguiente:

  • Generar logs con el formato correcto, tal y como se explicó en la sección anterior.

  • Generar logs en /var/log/nginx/healthd/

  • Asignar un nombre a los logs que tenga el siguiente formato: application.log.$year-$month-$day-$hour

  • Rotar los logs una vez por hora.

  • No truncar los logs.