Cómo enviar los registros de aplicaciones de Linux a AWS CloudWatch
AWS CloudWatch es un servicio de monitorización proporcionado por la nube de AWS. AWS proporciona una monitorización por defecto de los parámetros del servidor como la utilización de la CPU, la entrada y la salida de la red, etc. AWS CloudWatch puede utilizarse para una monitorización personalizada como la utilización del disco y la utilización de la memoria (RAM). Para la monitorización personalizada, tenemos que seguir algunos pasos para conseguirla.
Del mismo modo, AWS CloudWatch puede utilizarse para monitorizar los registros del servidor o de la aplicación. Como ésta no es una función predeterminada de AWS por razones obvias, podemos configurarla según nuestras necesidades. Dependerá del usuario qué registros necesitamos enviar a AWS CloudWatch para su monitorización.
No se limita a los recursos de AWS
Aunque AWS CloudWatch sea un servicio de AWS, no significa que sólo se pueda utilizar para las instancias de EC2, también se puede configurar para enviar registros de aplicaciones o servidores de las VMs de otros proveedores de la nube y también de las VMs de la unidad física.
Cómo enviar los registros de la aplicación o del servidor a AWS CloudWatch
Para enviar los registros de la aplicación o del servidor a AWS CloudWatch, tenemos que instalar el agente de CloudWatch en el servidor correspondiente. En este blog utilizaremos la instancia AWS EC2 para lograr nuestro objetivo.
Pasos
- Rol apropiado que debe adjuntarse a la instancia para comunicarse con AWS CloudWatch
- Instalación del agente de AWS CloudWatch
- Configuración del agente de AWS CloudWatch
- Prueba de los registros en el portal de AWS CloudWatch
Rol de IAM
Para enviar los registros de la aplicación o del servidor a AWS CloudWatch, necesitamos adjuntar un rol a la instancia EC2 con los permisos adecuados. El rol permitirá realizar cambios en AWS CloudWatch.
Debe contener las siguientes políticas.
- CrearLogStream
- DescribeLogStream
- CrearLogGrupo
- PutLogEvents
Vamos a crear un rol en AWS IAM.
Ve a la sección IAM de la lista de Servicios de la consola de AWS. Si aún no tienes una cuenta de AWS, crea una desde aquí.
En el panel de control de IAM, ve a Política y luego a Crear Política.
En la página «Crear Política», selecciona «JSON» en la pestaña y pega la siguiente política JSON eliminando la que viene por defecto.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] }
Tu política debería tener el siguiente aspecto. Una vez que hayas terminado, haz clic en el botón «Revisar política» en la parte inferior de la página.
En la siguiente página, tienes que dar el nombre a la política.
Una vez hecho esto, haz clic en el botón «Crear política» en la parte inferior de la página.
Una vez creada la política, serás redirigido a la página del rol IAM. Como ya tenemos la política necesaria creada, crearemos un rol que se adjuntará a la instancia.
En la página «Crear rol», selecciona «EC2». Ya que vamos a adjuntar el rol a la instancia EC2.
Haz clic en el botón «Siguiente: Permiso» en la parte inferior izquierda de la página.
En la siguiente página, se te pedirá que adjuntes una política al rol. Busca el nombre de la política que proporcionaste en el paso anterior. Una vez encontrada, selecciona la política de la lista.
Una vez hecho esto, haz clic en el botón «Siguiente: Etiquetas» en la parte inferior de la página.
En la siguiente página, se te pedirá que des algunas etiquetas al rol. Como se trata de un paso opcional, no he dado ninguna etiqueta al rol y me he saltado el paso.
Una vez que hagas clic en siguiente, se te pedirá que des un nombre al rol.
Tu rol se creará en unos segundos.
Ahora que tenemos la configuración necesaria completada desde el lado de la infraestructura, vamos a configurar el Agente de AWS CloudWatch en la instancia EC2.
Para este paso, necesitas una instancia EC2 en estado de ejecución. Conéctate a la instancia de la forma que quieras. Hay varias formas de conectarse a la instancia. Puedes consultarlas aquí.
Si tienes una instancia de Amazon Linux, sigue los siguientes pasos.
Si es la primera vez que te conectas a la instancia, asegúrate de ejecutar el siguiente comando de actualización.
Puedes seguir los siguientes pasos para las máquinas de Amazon Linux.
sudo yum update -y
Una vez completada la actualización, ejecuta el siguiente comando para instalar el awslogs paquete.
sudo yum install -y awslogs
Una vez instalado el paquete, puedes cambiar la región en/etc/awslogs/awscli.conf archivo.
Ahora, para configurar los registros que quieres enviar en AWS CloudWatch, abre el archivo /etc/awslogs/awslogs.conf y comprueba las siguientes líneas.
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = Amazon-Linux-2
La configuración anterior indica que la ruta del archivo de registro de tu sistema /var/log/messages se va a cargar en AWS CloudWatch. La configuración anterior creará un grupo de registros en AWS CloudWatch con el nombre mencionado en el parámetro log_group_name. Además, tendrá la jerarquía mencionada en log_stream_name. Para el tiempo de búfer, podemos cambiar el valor de buffer_duration . El valor por defecto de buffer_duration es de 5000ms.
Una vez realizados los cambios, reinicia la aplicación ejecutando el siguiente comando. Se reiniciará la aplicación awslog y el agente comenzará a subir los registros a AWS CloudWatch.
$ sudo service awslogsd start
Para instalar y configurar el agente de AWS CloudWatch en RHEL o CentOS, puedes seguir los siguientes pasos.
Ejecuta el siguiente comando para descargar el paquete.
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
Encontrarás un archivo con el nombre awslogs-agent-setup.py en la ubicación actual. Como el archivo descargado es un script de python, necesitas tener python instalado en tu máquina para el siguiente paso. Asegúrate de que tienes un paquete de python instalado y luego ejecuta el siguiente comando. Tienes que especificar la región en el siguiente comando. También puedes cambiarla en la configuración más adelante si lo deseas.
python ./awslogs-agent-setup.py --region ap-south-1
Una vez que ejecutes el comando anterior, te pedirá algunas entradas. Menciona las mismas según los requisitos.
El script anterior generará el archivo de configuración/var/awslogs/etc/awslogs.conf. Los detalles que hayas proporcionado en el script se guardarán en el archivo de configuración.
puedes seguir modificando el archivo de configuración según tus necesidades.
Una vez que hayas realizado todos los cambios, reinicia el agente ejecutando el siguiente comando.
# systemctl start awslogs
Verifica la configuración
1. Vuelve a entrar en tu cuenta de AWS.
2. Busca CloudWatch en la lista de Servicios.
3. Elige la opción Grupo de Registros en los menús de la izquierda.
4. Busca el valor que proporcionaste en el parámetro log_stram_name en la configuración.
5. Verás que los logs se envían desde el servidor a AWS CloudWatch.
Conclusión
Puedes configurar cualquier archivo de registro de tu servidor para que sea empujado a AWS CloudWatch. Esto se puede configurar para los servidores que no están en la nube de AWS. Es decir, puedes empujar los registros desde cualquiera de tus servidores alojados en Azure, GCP o cualquier otro proveedor de la nube o incluso un servidor local.