Evaristo R

Técnico Administrador de Sistemas

Piloto de RPAS certificado por AESA/EASA - A1/A3 - A2 - STS

Profesor e-Learning

Evaristo R

Técnico Administrador de Sistemas

Piloto de RPAS certificado por AESA/EASA - A1/A3 - A2 - STS

Profesor e-Learning

Blog Post

«Monitorizando la monitorización» – CloudWatch – assume-role y plugin Check_MK

17 mayo, 2019 AWS
«Monitorizando la monitorización» – CloudWatch – assume-role y plugin Check_MK
En el post de hoy, veremos como implantar un plugin personalizado en Check_MK, que monitorizará las alertas de CloudWatch, en un escenario en el que administramos más de una cuenta de AWS, de una manera modular y escalable.

Nos será útil para estar al tanto del estado de todas las alertas; por poner un ejemplo, en ocasiones puede ocurrir, que como resultado de un autoescalado, haya cambiado el id de una instancia, y el agente de CloudWatch no se esté ejecutando, lo que resultaría en un «Insufficient Data».

Funcionalidad

    • Lambda (Se ejecutará cada X tiempo)
    • Definimos una lista con los «Role Arn» de todas las cuentas de AWS que queremos monitorizar.
    • La lambda recorre dicha lista y mediante «Assume-role» obtiene las credenciales de seguridad temporales necesarias, para cada una de las cuentas definidas anteriormente:
      • Una ID de clave de acceso
      • Una clave de acceso secreta
      • Un token de seguridad.
    • Lo que le permitirá acceder a las alertas configuradas en CloudWatch y obtener los estados de dichas alertas.
    • Esta información la guardará en un bucket S3.
  • Plugin Check_MK
    • Carga periódicamente la información almacenada en el bucket S3.
    • Selecciona las alertas con estado «INSUFFICIENT_DATA» y «ALARM»
    • Calcula cuánto tiempo ha pasado desde la última actualización del estado de la alerta.
    • Sólo en el caso de que éste supere los 30 minutos, prestará atención a las métricas en estado de alerta y notificará a Check_Mk, con un «CRITICAL»
      • en el caso de las alertas con el estado «ALARM»
    • o con un «WARNING»
      • en el caso de las alertas con el estado «INSUFFICIENT_DATA»
A continuación comentaré las políticas de IAM necesarias tanto para la Lambda como para el plugin de Check_MK (Para ver como se configuran tanto las políticas IAM como la Lambda, te recomiendo pasarte por los post anteriores Parte 1 y Parte 2)

Lambda

Permisos necesarios

Necesitamos crear un Rol, que asignaremos a nuestra Lambda, con las siguientes políticas:

AssumeRole-All

Que tenga permiso de hacer sts:AssumeRole en todas las cuentas:

Put S3

En cuanto al S3, que tenga acceso a él para depositar el fichero de datos.
s3:PutObject

Send email

Para el control de errores de la Lambda, que pueda enviar emails:

CloudWatch

Para poder obtener las métricas:
CloudWatchReadOnlyAccess

Logs

Y opcionalmente, para poder escribir los logs de la Lambda:
CloudWatchLogsFullAccess

Código:

Con éste rol ya configurado, solo tendremos que crear nuestra Lambda:

Plugin Check_MK

Permisos necesarios

Get S3

s3:GetObject

Implantación en Check_MK

Descargamos el código a continuación y lo depositaremos en el directorio correcto (más abajo lo detallo) de nuestro sitio Check_MK.
Puede ser uno de los siguientes:

/opt/omd/sites/<sitename>/lib/nagios/plugins
/opt/omd/sites/<sitename>/local/lib/nagios/plugins


En mi caso es el segundo.

 
Además debemos de asegurarnos de que el script tenga tanto los permisos de ejecución como el usuario correctos.
chmod +x script.py

(en mi caso, usuario check_mk)

chown check_mk:check_mk script.py

Configuración Check_MK

La variable que observamos antes del nombre del script, podría ser una de las siguientes, dependiendo de dónde ubicáramos el script:
$USER1$ = /opt/omd/sites/<sitename>/lib/nagios/plugins
$USER2$ = /opt/omd/sites/<sitename>/local/lib/nagios/plugins

Guardamos, y confirmamos los cambios.

Y este sería el resultado, en este caso el código de salida del plugin es (1) por lo que veremos un Warning, al tener 4 alertas que llevan más de 30 minutos en estado de INSUFFICIENT_DATA.

Si le hacemos click, nos daría más información acerca de estas alertas (nombre ARN, etc..) pero no voy a mostrarlo, por ser información sensible de mis instancias.

Aquí termina el post, esto solo es el punto de partida, a partir de aquí podríamos ampliar la funcionalidad todo lo que necesitásemos.

Nos vemos en la próxima!!!

Taggs:
Write a comment

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Si está interesado en leer el aviso de privacidad pinche aquí.

ACEPTAR
Aviso de cookies