Publicación de métricas personalizadas de un entorno en Amazon CloudWatch - AWS Elastic Beanstalk

Publicación de métricas personalizadas de un entorno en Amazon CloudWatch

Puede publicar los datos recopilados mediante informes de estado mejorado de AWS Elastic Beanstalk en Amazon CloudWatch como métricas personalizadas. Gracias a la publicación de métricas en CloudWatch, puede supervisar los cambios que se producen con el tiempo en el rendimiento de la aplicación e identificar posibles problemas, ya que puede hacer un seguimiento del uso de los recursos y la escala de latencia de las solicitudes con carga.

Cuando se publican métricas en CloudWatch, también se pueden utilizar con gráficos de supervisión y alarmas. Al utilizar informes de estado avanzados, se habilita automáticamente una métrica gratuita: EnvironmentHealth. Todas las métricas personalizadas, excepto EnvironmentHealth, generan cargas en CloudWatch.

Para publicar métricas personalizadas sobre un entorno en CloudWatch, primero deben habilitarse los informes de estado avanzados en el entorno. Para obtener instrucciones, consulte Habilitación de informes de estado mejorado de Elastic Beanstalk.

Métricas de informes de estado avanzados

Cuando habilite los informes de estado avanzados en el entorno, el sistema de informes de estado avanzados publica automáticamente una métrica personalizada de CloudWatch, EnvironmentHealth. Para publicar otras métricas en CloudWatch, configure el entorno con dichas métricas utilizando la consola de Elastic Beanstalk, la CLI de EB o .ebextensions.

Puede publicar las siguientes métricas de estado avanzado desde su entorno en CloudWatch.

Métricas disponibles: todas las plataformas

EnvironmentHealth

Solo se aplica al entorno. Si no se configuran otras métricas, esta es la única métrica de CloudWatch que publica el sistema de informes de estado avanzado. El estado del entorno está representado por uno de los siete estados. En la consola de CloudWatch, estos estados se corresponden con los siguientes valores:

  • 0: OK

  • 1: Info

  • 5: Unknown

  • 10: No data

  • 15: Warning

  • 20: Degraded

  • 25: Severe

InstancesSevere
InstancesDegraded
InstancesWarning
InstancesInfo
InstancesOk
InstancesPending
InstancesUnknown
InstancesNoData

Solo se aplica al entorno. Estas métricas indican el número de instancias del entorno y el estado de cada una. InstancesNoData indica el número de instancias para las que no se reciben datos.

ApplicationRequestsTotal
ApplicationRequests5xx
ApplicationRequests4xx
ApplicationRequests3xx
ApplicationRequests2xx

Se aplica a la instancia y al entorno. Indica el número total de solicitudes completado por la instancia o el entorno, así como el número de solicitudes completadas con el código de estado de cada categoría.

ApplicationLatencyP10
ApplicationLatencyP50
ApplicationLatencyP75
ApplicationLatencyP85
ApplicationLatencyP90
ApplicationLatencyP95
ApplicationLatencyP99
ApplicationLatencyP99.9

Se aplica a la instancia y al entorno. Indica el periodo medio de tiempo, en segundos, que tarda en completarse el porcentaje x de las solicitudes más rápidas.

InstanceHealth

Se aplica solo a la instancia. Indica el estado actual de la instancia. El estado de la instancia está representado por uno de los siete estados. En la consola de CloudWatch, estos estados se corresponden con los siguientes valores:

  • 0: OK

  • 1: Info

  • 5: Unknown

  • 10: No data

  • 15: Warning

  • 20: Degraded

  • 25: Severe

Métricas disponibles: Linux

CPUIrq
CPUIdle
CPUUser
CPUSystem
CPUSoftirq
CPUIowait
CPUNice

Se aplica solo a la instancia. Indica el porcentaje de tiempo que la CPU ha pasado en cada estado durante el último minuto.

LoadAverage1min

Se aplica solo a la instancia. Carga media de la CPU de la instancia durante el último minuto.

RootFilesystemUtil

Se aplica solo a la instancia. Indica el porcentaje de espacio en disco que está en uso.

Métricas disponibles: Windows

CPUIdle
CPUUser
CPUPriveleged

Se aplica solo a la instancia. Indica el porcentaje de tiempo que la CPU ha pasado en cada estado durante el último minuto.

Configuración de métricas de CloudWatch mediante la consola de Elastic Beanstalk

Puede utilizar la consola de Elastic Beanstalk para configurar el entorno de forma que pueda publicar métricas de los informes de estado avanzados en CloudWatch y puedan utilizarse con gráficos de supervisión y alarmas.

Para configurar métricas personalizadas de CloudWatch en la consola de Elastic Beanstalk

  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 Monitoring (Monitorización), seleccione Edit (Editar).

  5. En Health reporting (Informe de estado), seleccione las métricas de instancia y de entorno que desee publicar en CloudWatch. Para seleccionar varias métricas, presione la tecla Ctrl mientras hace la selección.

  6. Seleccione Apply.

Al habilitar las métricas personalizadas de CloudWatch, estas se agregan a la lista de métricas disponibles en la página Monitoring (Supervisión).

Configuración de métricas personalizadas de CloudWatch mediante la CLI de EB

Puede utilizar la CLI de EB para configurar métricas personalizadas. Para ello, guarde la configuración del entorno localmente, agregue una entrada que defina las métricas que se van a publicar y cargue la configuración en Elastic Beanstalk. Puede aplicar la configuración guardada al entorno durante o después de la creación.

Para configurar las métricas personalizadas de CloudWatch con la CLI de EB y las configuraciones guardadas

  1. Inicialice la carpeta del proyecto con eb init.

  2. Cree un entorno ejecutando el comando eb create.

  3. Guarde una plantilla de configuración localmente ejecutando el comando eb config save. En el ejemplo siguiente, se utiliza la opción --cfg para especificar el nombre de la configuración.

    $ eb config save --cfg 01-base-state Configuration saved at: ~/project/.elasticbeanstalk/saved_configs/01-base-state.cfg.yml
  4. Abra el archivo de configuración guardado en un editor de texto.

  5. En OptionSettings > aws:elasticbeanstalk:healthreporting:system:, agregue una clave ConfigDocument para habilitar cada una de las métricas de CloudWatch que desee. Por ejemplo, en el ejemplo siguiente, ConfigDocument publica las métricas ApplicationRequests5xx y ApplicationRequests4xx en el nivel del entorno y la métrica ApplicationRequestsTotal en el nivel de la instancia.

    OptionSettings: ... aws:elasticbeanstalk:healthreporting:system: ConfigDocument: CloudWatchMetrics: Environment: ApplicationRequests5xx: 60 ApplicationRequests4xx: 60 Instance: ApplicationRequestsTotal: 60 Version: 1 SystemType: enhanced ...

    En el ejemplo, 60 indica el número de segundos entre las mediciones. En la actualidad, este es el único valor que se permite.

    nota

    Puede combinar CloudWatchMetrics y Rules en el mismo ajuste de opción de ConfigDocument. Rules se describen en Configuración de las reglas de informes de estado avanzados de un entorno.

    Si ha utilizado previamente Rules para configurar las reglas de estado avanzado, a continuación, el archivo de configuración que recupere mediante el comando eb config save ya tiene una clave ConfigDocument con una sección Rules. No lo elimine; agrega una sección CloudWatchMetrics en el mismo valor de la opción ConfigDocument.

  6. Guarde el archivo de configuración y cierre el editor de texto. En este ejemplo, el archivo de configuración actualizado se ha guardado con otro nombre (02-cloudwatch-enabled.cfg.yml) que sea diferente al del archivo de configuración que se descargó. De este modo, se crea una configuración guardada distinta cuando se cargue el archivo. Puede utilizar el mismo nombre que el del archivo descargado para sobrescribir la configuración existente sin crear una nueva.

  7. Utilice el comando eb config put para cargar el archivo de configuración actualizado a Elastic Beanstalk.

    $ eb config put 02-cloudwatch-enabled

    Si utiliza los comandos eb config get y put con configuraciones guardadas, no incluya la extensión de archivo.

  8. Aplique la configuración guardada en el entorno que está en ejecución.

    $ eb config --cfg 02-cloudwatch-enabled

    La opción --cfg especifica el archivo de configuración designado que se aplica al entorno. Puede guardar el archivo de configuración localmente o en Elastic Beanstalk. Si hay un archivo de configuración con el nombre especificado en las dos ubicaciones, la CLI de EB utiliza el archivo local.

Proporcionar documentos de configuración de métricas personalizadas

El documento de configuración (config) de métricas personalizadas de Amazon CloudWatch es un documento JSON donde se muestran las métricas que se van a publicar en los niveles del entorno y de la instancia. En el ejemplo siguiente, se muestra un documento de configuración que habilita todas las métricas personalizadas disponibles en Linux.

{ "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }

En el caso de la AWS CLI, debe pasar el documento como valor de la clave Value en un argumento de configuración de opciones, que es un objeto JSON. En este caso, las comillas del documento insertado deben escribirse con caracteres de escape.

$ aws elasticbeanstalk validate-configuration-settings --application-name my-app --environment-name my-env --option-settings '[ { "Namespace": "aws:elasticbeanstalk:healthreporting:system", "OptionName": "ConfigDocument", "Value": "{\"CloudWatchMetrics\": {\"Environment\": {\"ApplicationLatencyP99.9\": 60,\"InstancesSevere\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"InstancesUnknown\": 60,\"ApplicationLatencyP85\": 60,\"InstancesInfo\": 60,\"ApplicationRequests2xx\": 60,\"InstancesDegraded\": 60,\"InstancesWarning\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"InstancesNoData\": 60,\"InstancesPending\": 60,\"ApplicationLatencyP10\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"InstancesOk\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60},\"Instance\": {\"ApplicationLatencyP99.9\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": 60,\"ApplicationLatencyP95\": 60,\"ApplicationLatencyP85\": 60,\"CPUUser\": 60,\"ApplicationRequests2xx\": 60,\"CPUIdle\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": 60,\"RootFilesystemUtil\": 60,\"LoadAverage1min\": 60,\"CPUIrq\": 60,\"CPUNice\": 60,\"CPUIowait\": 60,\"ApplicationLatencyP10\": 60,\"LoadAverage5min\": 60,\"ApplicationRequests5xx\": 60,\"ApplicationLatencyP75\": 60,\"CPUSystem\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": 60,\"InstanceHealth\": 60,\"CPUSoftirq\": 60}},\"Version\": 1}" } ]'

En los archivos de configuración .ebextensions de YAML, puede proporcionar el documento JSON tal y como está.

option_settings: - namespace: aws:elasticbeanstalk:healthreporting:system option_name: ConfigDocument value: { "CloudWatchMetrics": { "Environment": { "ApplicationLatencyP99.9": 60, "InstancesSevere": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "InstancesUnknown": 60, "ApplicationLatencyP85": 60, "InstancesInfo": 60, "ApplicationRequests2xx": 60, "InstancesDegraded": 60, "InstancesWarning": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "InstancesNoData": 60, "InstancesPending": 60, "ApplicationLatencyP10": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "InstancesOk": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60 }, "Instance": { "ApplicationLatencyP99.9": 60, "ApplicationLatencyP90": 60, "ApplicationLatencyP99": 60, "ApplicationLatencyP95": 60, "ApplicationLatencyP85": 60, "CPUUser": 60, "ApplicationRequests2xx": 60, "CPUIdle": 60, "ApplicationLatencyP50": 60, "ApplicationRequestsTotal": 60, "RootFilesystemUtil": 60, "LoadAverage1min": 60, "CPUIrq": 60, "CPUNice": 60, "CPUIowait": 60, "ApplicationLatencyP10": 60, "LoadAverage5min": 60, "ApplicationRequests5xx": 60, "ApplicationLatencyP75": 60, "CPUSystem": 60, "ApplicationRequests3xx": 60, "ApplicationRequests4xx": 60, "InstanceHealth": 60, "CPUSoftirq": 60 } }, "Version": 1 }