Ingeniería

Monitoreo de AWS EC2 con Metricbeat

A partir de la versión 7.0, incluimos un módulo nuevo en Metricbeat para monitorear Amazon Web Services. Al momento de la versión inicial en 7.0.0-beta1, este módulo de AWS proporciona la capacidad de recolectar métricas de monitoreo de AWS EC2 desde Cloudwatch con Metricbeat y las almacena en un conjunto de métricas denominado ec2. Estas métricas proporcionan visibilidad de todas las instancias de EC2 en todas las regiones sin necesidad de instalar Metricbeat directamente en las instancias.

Antecedentes

Las instancias de Amazon Elastic Compute Cloud (EC2) son servidores virtuales creados en la plataforma AWS para proporcionar a los usuarios una capacidad informática segura y redimensionable en la cloud pública. EC2 es probablemente el servicio más fundamental de los cientos de servicios que proporciona AWS; prácticamente todos necesitan acceso a los recursos informáticos sin procesar.

El monitoreo centralizado de instancias de EC2 para ayudar a los usuarios a detectar y depurar problemas resulta desafiante. Metricbeat ya puede recolectar métricas de recursos detalladas usando el módulo system, pero es necesario instalar una instancia de Metricbeat en cada una de tus instancias de EC2. Si bien las métricas que recolecta son muy detalladas y granulares, a veces solo buscas una forma rápida de obtener visibilidad del uso de recursos de todas tus instancias de EC2 a un nivel alto.

Es entonces cuando AWS Cloudwatch entra en juego. Cloudwatch recolecta y centraliza automáticamente las métricas de uso de recursos básicas de todas tus instancias de EC2. Estos datos se recolectan de forma predeterminada con una granularidad de 5 minutos, y puedes suscribirte al monitoreo detallado para obtener mayor granularidad y métricas más avanzadas.

Configuración de Metricbeat AWS

Antes de comenzar con Metricbeat, necesitarás un Elastic Stack en ejecución, lo que incluye Elasticsearch para almacenar e indexar los datos y Kibana para la exploración de datos. Para ello, puedes crear un clúster en Elasticsearch Service en Elastic Cloud o configurar el Elastic Stack en tu máquina local.

Una vez que hayas cargado Kibana, puedes navegar a la UI Add Data (Agregar datos) desde la pantalla de inicio y seguir las instrucciones de configuración del módulo de AWS desde allí.

Despliegue de Metricbeat para AWS EC2

En este blog te guiaremos en más detalle a continuación.

Habilitar el módulo de AWS

En la configuración de fábrica de Metricbeat, solo el módulo system está habilitado de forma predeterminada, por lo que deberás habilitar explícitamente el módulo de AWS. El comando siguiente habilita la configuración de AWS en el directorio modules.d en los sistemas MacOS y Linux:

./metricbeat modules enable aws

Configurar las credenciales de AWS en el archivo de configuración

Hay dos tipos diferentes de credenciales de AWS que pueden usarse: claves de acceso y credenciales de seguridad temporales. El ID de clave de acceso y la clave de acceso secreta son las dos partes que componen las claves de acceso. Son credenciales a largo plazo para autenticar a un usuario de IAM o al usuario raíz de la cuenta de AWS cuando realizan llamadas de API de AWS. Las credenciales de seguridad temporales consisten en una ID de clave de acceso, una clave de acceso secreta y un token de seguridad, que tienen una vida útil limitada.

Como las credenciales de seguridad temporales son de corto plazo, una vez que caducan debes generar credenciales nuevas y modificar el archivo de configuración modules.d/aws.yml para incluirlas. A menos que esté habilitada para Metricbeat la característica que permite volver a cargar dinámicamente, deberás reiniciar Metricbeat manualmente después de actualizar la configuración. Esto hará que se detenga la recolección de datos si no se actualiza el archivo de configuración con credenciales nuevas antes de que caduquen las anteriores. Por lo tanto, te recomendamos que, para Metricbeat, uses claves de acceso en el archivo de configuración para permitir que el módulo AWS haga llamadas de API de AWS sin tener que generar credenciales temporales nuevas y actualizar la configuración con frecuencia.

Crear una política de IAM

Una política de IAM es una entidad que define los permisos respecto a un objeto dentro de tu entorno de AWS. Es necesario crear una política de IAM personalizada para Metricbeat con permisos específicos. Consulta Crear políticas de IAM para ver más detalles. Una vez creada la política de IAM para Metricbeat, debes agregarla al usuario de IAM que proporcionó las credenciales en el paso anterior.

Con el conjunto de métricas EC2, se deben agregar cuatro permisos a la política de IAM de Metricbeat:

  • ec2:DescribeRegions
  • ec2:DescribeInstances
  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricData

Iniciar Metricbeat

Uso en ejecución en Mac y Linux a modo de ejemplo:

./metricbeat -E setup.dashboards.enabled=true -e

Nota: Si ejecutas Metricbeat desde una máquina virtual en una instancia de cloud, como GCP, AWS o Azure, querrás quitar o comentar la entrada add_cloud_metadata en metricbeat.yml.

Una vez habilitado el conjunto de métricas de EC2 en Metricbeat con las credenciales de AWS adecuadas, Metricbeat tomará periódicamente información sobre cada instancia y recolectará métricas de monitoreo de EC2 desde AWS Cloudwatch. El período de recolección predeterminado para el conjunto de métricas de EC2 es de 300 segundos. Si está habilitado el monitoreo detallado de instancias, el período de recolección del conjunto de métricas de EC2 debería cambiarse a 60 segundos, debido a que ese nivel de pago proporciona una recolección de métricas de mayor granularidad. El período de recolección se configura en el archivo modules.d/aws.yml, por ejemplo:

- module: aws
  period: 60s
  metricsets:
    - "ec2"
  access_key_id: '${AWS_ACCESS_KEY_ID:""}'
  secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}'
  session_token: '${AWS_SESSION_TOKEN:""}'
  default_region: '${AWS_REGION:us-west-1}'

El conjunto de métricas de EC2 detectará instancias nuevas automáticamente y comenzará a recolectar métricas de estas. Si se detiene o cierra una instancia de EC2, el conjunto de métricas de EC2 detectará el cambio de estado de la instancia en el próximo ciclo de recolección y enviará la métrica del estado nuevo a Elasticsearch.

Uso del dashboard del módulo de AWS de Kibana

El conjunto de métricas de EC2 incluye un dashboard predefinido, denominado [Metricbeat AWS] EC2 Overview. Con la ejecución del comando de configuración al iniciar Metricbeat, configuraste automáticamente estos dashboards en Kibana. Para obtener más información al respecto, consulta Set up the Kibana dashboards (Configuración de los dashboards de Kibana).

Este dashboard es una visión general de las instancias de AWS EC2. Muestra el estado y las comprobaciones de estado de las instancias, además de los datos de E/S del disco, de la red y del uso de CPU. También existen filtros que puedes aplicar para reducir los datos a una región específica, una zona de disponibilidad o un tipo de máquina.

Dashboard de Kibana para AWS EC2

Con este dashboard, puedes detectar problemas y garantizar la optimización de cada instancia para el uso. Por ejemplo, si observas un uso continuamente alto de CPU y problemas de rendimiento en la misma instancia, posiblemente esto indique que CPU es el cuello de botella y que esta instancia necesita más potencia de CPU. Además, si observas una instancia con bajo uso de CPU durante mucho tiempo, esto significa que la instancia está sobredimensionada en CPU, y posiblemente pueda reducirse o consolidarse con otra instancia.

¿Qué sigue?

Tener una ubicación centralizada para visualizar las métricas de monitoreo de diferentes regiones y servicios de AWS te permite optimizar el uso de recursos y detectar y solucionar problemas más rápido. Pruébalo, cuéntanos lo que piensas, envíanos comentarios y dinos cómo lo usas en nuestro foro de Beats.

El conjunto de métricas de EC2 en el módulo de AWS es solo el comienzo. Ya estamos trabajando duro para agregar más conjuntos de métricas para monitorear otros servicios de uso común, como Amazon S3, SQS, RDS, etc. Si quieres opinar sobre cuál debería ser nuestro próximo paso o deseas contribuir, no dudes en participar en el repositorio de Beats Github.