Visualización de métricas de AWS CloudWatch con Grafana

Buenas a todos!

El propósito de esta práctica es poder visualizar las métricas de nuestros recursos en Amazon Web Services con la herramienta Grafana, obteniendo estas del servicio Amazon CloudWatch.

Vamos a empezar dando una breve definición de ambos elementos:

  • Amazon CloudWatch: es un servicio de Amazon Web Services que permite monitorizar los recursos existentes en la nube de aws
  • Grafana: es una herramienta que permite formatear y visualizar métricas, dando la posibilidad de definir orígenes de datos, entre ellos bases de datos o servicios en la nube.

El escenario de la práctica que vamos a realizar es el siguiente:

Partimos de que tenemos una instancia EC2 corriendo (en mi caso es esta, que sirve este sitio web):

Lo primero que vamos a hacer es crear una política IAM para dar acceso a AWS CloudWatch a:

  • La instancia EC2
  • La aplicación Grafana

Este sería el código JSON de la política:

Lo siguiente que debemos hacer es crear un rol, el cual asignaremos a la instancia EC2. Desde IAM creamos un rol y le adjuntamos la política que acabamos de crear:

Asignamos el rol que acabamos de crear a la instancia:

Comprobamos que la instancia en cuestión tiene el rol asignado:

Lo siguiente que vamos a hacer es crear un usuario con acceso programático:

Adjuntamos la política creada al usuario grafanaUser:

Una vez creado el usuario, descargamos el fichero .csv, que es el que contendrá las credenciales del usuario IAM.

Instalación de la herramienta Grafana

Tenemos esta herramienta disponible para varias plataformas:

En Debian/Ubuntu podemos instalar Grafana de las siguientes maneras:

Una vez instalado, comprobamos que el servicio está activo y en ejecución:

Accedemos a Grafana y en el apartado de configuración creamos un «origen de datos»:

Seleccionamos CloudWatch como origen de datos:

En la instancia, creamos un fichero «/home/{usuario}/.aws/credentials» e indicamos las claves del usuario «grafanaUser» de la siguiente manera:

[default]
aws_access_key_id = ***********************
aws_secret_access_key = ****************************************
region = eu-west-1

En grafana, en la configuración del origen de datos indicamos que obtenga las credenciales de un fichero (el que acabamos de crear). Si lo hemos creado en la ruta indicada en el paso anterior, no es necesario indicar nada más. Pinchamos en «Save & test» y comprobamos que se realiza con éxito la conexión con CloudWatch:

Una vez configurado el origen de datos, ya podemos crear paneles con gráficas de las métricas de Amazon CloudWatch:

Como vemos, cada métrica se obtiene de CloudWatch realizando una consulta. Uno de los parámetros de estas consultas es el Namespace. Las métricas de CloudWatch están agrupadas en Namespaces. Amazon CloudWatch proporciona muchas métricas por defecto, bajo el Namespace AWS/{servicio}. Sin embargo, hay ciertas métricas que, por privacidad, aws no nos las proporciona y debemos configurarlas nosotros (como por ejemplo las de consumo de RAM y uso de disco), ya sea mediante el agente de cloudwatch o utilizando scripts para tal fin (es la opción que uso yo). Según la manera que utilicemos de crear esas métricas personalizadas, éstas tendrán un namespace u otro. En este caso las métricas personalizadas se obtienen mediante unos scripts escritos en Perl, y su namespace es System/Linux.

En la siguiente captura se aprecian las métricas disponibles en mi cuenta de AWS agrupadas por su namespace:

Procedemos entonces a crear la primera consulta para obtener la métrica del uso de memoria RAM indicando:

  • La region en la que se encuentra el recurso (Irlanda)
  • El namespace de la métrica. En este caso es System/Linux al ser una métrica personalizada
  • El id del recurso. En nuestro caso el id de la instancia a monitorizar.

Como vemos podemos personalizar bastante la visualización de las gráficas que creamos:

Podemos incluso también crear alertas que respondan a eventos como, por ejemplo, que el consumo de memoria supere el 70%:

Podemos ir añadiendo paneles para crear tantas gráficas basadas en métricas como deseemos:

Procedemos ahora a crear una gráfica para la métrica de uso de CPU:

Podemos añadir «puntos» en los que si posicionamos el ratón sobre ellos, se proporciona la información de la métrica en ese momento, facilitando así la visualización bastante:

Procedemos ahora a crear una gráfica con dos consultas, una para el tráfico entrante y otra para el saliente:

Y este sería el resultado. Un panel en el que podemos consultar el estado de las métricas de nuestros recursos de AWS:

Con docker todo sería más sencillo, como siempre. Basta una sola captura jjejej:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *