Monitorización¶
En esta página configuraremos un sistema de monitorización para nuestro servidor Zentyal usando el servicio de AWS Cloudwatch. Además, también haremos uso del servicio de AWS SSM Parameter Store para alojar la configuración del agente de Cloudwatch en nuestro servidor y finalmente, del servicio AWS SNS para las notificaciones de las alertas.
Warning
La implementación de estos servicios tendrán un coste adicional mensual.
SNS¶
Para notificar cualquier alerta que se dispare en CloudWatch haremos uso del servicio SNS, el cual envíará un email a una cuenta de correo. En mi caso, usaré la cuenta creada de it.infra@icecrown.es
.
-
Vamos a
SNS
y creamos un topic llamadoProd-Zentyal-Email-Alerting
: -
Creamos una subscription para la cuenta de correo que recibirá las notificaciones:
-
Finalmente, esperamos a que nos llegue la invitación a la cuenta de correo para activar la suscripción.
Nota
Al tener habilitado la lista gris, nos tardará en llegar unos minutos.
SSM Parameter Store¶
Para monitorizar los recursos del servidor Zentyal usaremos el servicio AWS Cloudwatch, cuyo archivo de configuración almacenaremos en SSM Parameter store.
La configuración que especificaré será:
- La ruta completa al parámetro se llamará
/zentyal/prod/cloudwatch-config
- El namespace en Cloudwatch se llamará
CWA-Prod-Zentyal
. - El intervalo de las métricas será de
60
segundos. - Se configurarán métricas adicionales para:
- RAM
- Swap
- Disco.
- Los 3 volúmenes EBS se incluirán en las métricas de disco.
- Se monitorizará también el log
/var/log/zentyal/zentyal.log
, el cual tendrá una retención de 7 días. - El grupo de logs en CloudWatch se llamará
CWAL-Prod-Zentyal
.
Info
Para añadir configuraciones adicionales o resolver dudas, aquí tenemos la referencia de la configuración.
A continuación se indican las acciones a realizar:
- Nos ubicamos en la región donde tenemos la instancia, que en mi caso es Paris.
- Vamos a
AWS Systems Manager -> Parameter Store -> Create parameter
. -
Creamos el parámetro:
-
Añadimos la configuración del agente en la sección de
Value
:{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "metrics": { "namespace": "CWA-Prod-Zentyal", "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "mem": { "measurement": [ "used_percent", "used", "free", "total", "cached", "buffered" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "used_percent", "used", "free" ], "metrics_collection_interval": 60 }, "disk": { "measurement": [ "used_percent", "used", "free", "total", "inodes_used", "inodes_free", "inodes_total" ], "metrics_collection_interval": 60, "ignore_file_system_types": [ "tmpfs", "vfat", "devtmps" ], "resources": [ "/", "/var/vmail", "/home" ] }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 60, "service_address": ":8125" } } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/zentyal/zentyal.log", "log_group_name": "CWAL-Prod-Zentyal", "log_stream_name": "{instance_id}", "retention_in_days": 7, "timezone": "UTC" } ] } }, "log_stream_name": "Stream-Prod-Zentyal", "force_flush_interval" : 15 } }
-
Con el parámetro creado, crearemos una política de IAM que permita el acceso desde la instancia EC2 al parámetro recién creado. Para ello vamos a
IAM -> Policies
-
Creamos una política que tenga el siguiente contenido:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ParameterStoreZentyal1", "Effect": "Allow", "Action": [ "ssm:GetParameterHistory", "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter" ], "Resource": [ "arn:aws:ssm:eu-west-3:*:parameter/zentyal/prod/cloudwatch-config" ] }, { "Sid": "ParameterStoreZentyal2", "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] }
-
Creamos otra política que permita subir el archivo de log a Cloudwatch:
-
Creamos un rol donde asociaremos las políticas recién creadas y también, la existente llamada
CloudWatchAgentServerPolicy
. Para ello vamos aIAM -> Roles
: -
Finalmente, asociamos el rol recién creado a la instancia de Zentyal. Para ello vamos a
EC2 -> Actions -> Security -> Modify IAM role
:
Cloudwatch¶
Una vez que tenemos el entorno de AWS listo, procederemos a instalar y configurar el agente de CloudWatch para monitorizar el servidor y el archivo de log principal de Zentyal.
-
Descargamos el paquete
.deb
del agente de CloudWatch en nuestro servidor Zentyal: -
Instalamos el paquete:
-
Descargamos también el archivo comprimido que contiene el binario de AWS para la CLI:
-
Instalamos el paquete
unzip
para poder descomprimir el archivo: -
Descomprimimos el archivo y lo instalamos:
-
Configuramos el agente de CloudWatch:
-
Confirmamos que el servicio esté activo:
El resultado que he obtenido:
-
Tras esperar un par de minutos, vamos a
CloudWatch -> All metrics
y comprobamos que el namespace con las métricas personalizas se hayan creado: -
Finalmente, revisamos también que se esté monitorizando el archivo de log de Zentyal, para ello vamos a
CloudWatch -> Log groups
:
Logs¶
Con el archivo principal de Zentyal monitorizado por CloudWatch, vamos a crear un filtro de métrica que compruebe si el archivo de log contiene el evento ERROR>
. La finalidad es poder crear una alerta que notifique vía email a través de AWS SNS cuando se produzca este tipo de eventos.
-
Vamos a
CloudWatch -> Metric filters
y creamos el filtro: -
Una vez creado el filtro y pasado un par de minutos para que CloudWatch recolecte información.
-
Finalmente, verificamos que desde
CloudWatch -> All metrics
tenemos la métrica disponible:Nota
El tipo de métrica mostrado en la imagen es de tipo
Number
como se puede ver en la parte superior.
Dashboard¶
Una vez confirmado el funcionamiento del sistema de monitorización, podremos crear un dashboard que agrupe las métricas más importantes desde CloudWatch -> Dashboard
. A continuación un ejemplo sencillo:
Alertas¶
Lo último que haremos sobre el sistema de monitorización será crear las alertas. Todas las alertas que configuraremos se harán desde CloudWatch -> All alarm
y serán las siguientes:
- CPU:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- RAM:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- Disco de sistema:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- Disco de los correos:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- Disco de de los recursos compartidos:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- DLM para el sistema:
- La comprobación se hará una vez al día.
- El valor de la alerta para que se disparé será igual o superior a 1.
- Para que se envía una notificación, la alerta tendrá que producirse una única vez.
- DLM para el correo:
- La comprobación se hará una vez al día.
- El valor de la alerta para que se disparé será igual o superior a 1.
- Para que se envía una notificación, la alerta tendrá que producirse una única vez.
- DLM para el recursos compartidos:
- La comprobación se hará una vez al día.
- El valor de la alerta para que se disparé será igual o superior a 1.
- Para que se envía una notificación, la alerta tendrá que producirse una única vez.
- Comprobaciones fallidas de EC2:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- Comprobaciones fallidas de la instancia:
- La comprobación se hará cada minuto.
- El valor de la alerta para que se disparé será superior a 80%.
- Para que se envía una notificación, la alerta tendrá que producirse 3 veces consecutivas.
- Errores en el log de Zentyal:
- La comprobación se hará una vez al día.
- El valor de la alerta para que se disparé será igual o superior a 1.
- Para que se envía una notificación, la alerta tendrá que producirse una única vez.
CPU¶
RAM¶
Disco - Sistema¶
Disco - Mail¶
Disco - Shares¶
DLM - Sistema¶
DLM - Mail¶
DLM - Shares¶
EC2 - System¶
EC2 - Instance¶
Log de Zentyal¶
Creado: 12 de abril de 2023