CloudWatch Agent es un programa que podemos instalar en servidores (EC2, servidores físicos o incluso servidores en otras nubes) para que recolecte datos detallados y los envíe a AWS CloudWatch.
Puede recolectar datos como uso de memoria RAM (¡por defecto EC2 no reporta memoria!), Uso de disco (lectura, escritura, espacio libre), Detalles avanzados de CPU (por núcleo, I/O wait, etc.). Uso de red a nivel de sistema operativo.
Tambier archivos de logs como /var/log/syslog, Logs de aplicaciones (Nginx, Apache, aplicaciones personalizadas). Y se usa para monitorear mejor tu infraestructura. Para crear alertas más inteligentes. Para detectar problemas (como disco lleno, errores en aplicaciones) antes de que afecten a los usuarios. Para centralizar los logs de varios servidores en un solo lugar (CloudWatch Logs).
Para instalar el agente en cualquier SO debemos tener un rol de IAM el cual se utilizará para escrinir métricas en CloudWatch.
Vamos a IAM -> roles -> crear Rol -> Tipo de Identidad de Confianza: AWS Service -> Seleccionamos EC2 en la lista desplegable.
Esto permitirá que las instancias EC2 utilicen el rol. -> Next.
Ahora necesitamos adjuntar una política d permisos -> Buscamos la que dice CloudWatchAgentServerPolicy

-> Next.
Le asignamos un nombre por ejemplo: AgenteCloudWatch. -> Crear Rol.
A este rol no tiene permiso para realizar la acción ssm:PutParameter
de AWS Systems Manager (SSM), el cual vamos a utilizar mas adelante.
Con el Rol que creamos AgenteCloudWatch vamos a Agregar permiso -> Crear politica en linea


En el editor de políticas debemos seleccionar JSON y dejamos solo el siguiente código
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [], "Resource": [] } ] }
Debe verse así ->

Next -> Crear.
Listo.
Vamos a la instancia EC2 a la cual queremos instalar el agente CloudWatch y l adjuntamos el rol
Seleccionamos la instancia -> Acciones -> seguridad -> Modificar rol AIM.
Luego, seleccionamos el rol que creamos en la lista desplegable. -> Actualizar
Accedemos a la instancia por ssh (Ubuntu Linux)
Comprobamos que tenemos instalada la AWS CLI
En caso de no estar instalada
sudo apt update sudo apt install unzip curl -y sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" sudo unzip awscliv2.zip sudo ./aws/install
Verificamos
aws –version
Nos logueamos
Debemos estar logueados en AWS con
aws configure
Nos pedirá nuestras credenciales de seguridad.
Si no tenemos creada una Access Key aquí te muestro como
Ver video crear access key en AWS (abrir en nueva pestaña)Instalación del cloudWatch Agent
Obtenemos el instalador
sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
Lo instalamos con
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
Verificamos
which amazon-cloudwatch-agent
Lo Iniciamos
sudo systemctl start amazon-cloudwatch-agent sudo systemctl enable amazon-cloudwatch-agent
Ejecutamos el comando para iniciar el asistente de configuracion de cloudwatch
sudo systemctl start amazon-cloudwatch-agent

Seleccionamos la opcion que requerimos. En este caso la default o presionamos la opcion 1 de Linux.
Seguidamente nos pregunta si estamos en una instancia EC2 o una maquina On-premises

Presionamos la opcion 1 – EC2.
Ahora especificamos el usuario que ejecutará el agente.

Elegimos root
Las siguientes opciones las definiremos así:



Intervalos de 60 segundos
Debemos tener en cuenta que las métricas de mayor resolución tienen un mayor costo.
El resto de las opciones podemos dejarlas por defecto.

Nos preguntará si estamos de acuerdo con la configuración

Presionamos enter.
En la siguiente, nos pregunta si tenemos otrop agente de CloudWatch. En este caso le decimos que no

Si queremos los archivos de registro del monitor generados por la aplicación podríamos decir que si y especificar el nombre de la carpeta que queremos monitorear. En este caso le diremos que no

La siguiente opción le decimos que no

Con la siguiente opción comenzamos la configuración en un almacén de parámetros SSM

Esto nos proporciona un almacenamiento seguro y jerárquico para administrar los datos de configuración y las claves secretas. (Contraseñas, cadenas de conexión a las bases de datos, códigos de licencia como valores de parámetros. etc.)
De forma predeterminada se llamará así:

Si tiene mas parámetros, seria conveniente colocarle un nombre mas especifico.
También debeos especificar la región donde queremos almacenar la configuración en el almacén de parámetros.

Ahora debemos especificar las credenciales de AWS que se deben usar para enviar la configuración json al almacén de parámetros.
Ya lo configuramos anteriormente cuando usamos AWS configure.

Y por ultimo se requiere se una identidad de AWS (usuario IAM, rol IAM o instancia EC2 con rol asignado) con permisos explícitos para ejecutar la acción ssm:PutParameter
, necesaria para enviar configuraciones en formato JSON al Parameter Store.
Podemos usar el mismo que hemos configurado al principio.

Una vez terminada la configuración nos debe mostrar el siguiente mensaje

Antes de iniciar el servicio, debemos hacer algunos ajustes.
Creamos el directorio
sudo mkdir -p /usr/share/collectd/
Creamos el archivo
sudo touch /usr/share/collectd/types.db
Iniciamos el agente de CloudWatch con el siguiente comando
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-linux -s
Para comprobarlo
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
Mostrará el mensaje:

Desde ahora nuestro agente de CloudWatch está recopilando datos y enviándolos a CloudWatch para que podamos analizarlo.
En un par de horas puedes ir a CloudWatch y revisar tus métricas.