Tiempo de lectura estimado: 5 minutos
Motivación para la automatización de tareas
Son muchas las tareas que se repiten y mucho el tiempo que les dedicamos a procesarlas. Esto genera que en ocasiones los administradores no puedan enfocarse en otro tipo de tareas como ser investigación, innovación, análisis de problemas o de mejoras, entre otras.
Asimismo, es clave poder identificar los puntos de falla en la gestión de los pedidos. Existen muchos parámetros y variables según clientes, ambientes, funciones y excepciones que manejar. Elementos que, una vez proyectados en una línea de trabajo, son más fáciles y seguros de controlar con un código definido que contemple la lógica que cada administrador debería realizar. Con este método de trabajo podemos realizar una serie de comandos o instrucciones de forma ordenada y controlada, apuntando a garantizar la eficiencia en las tareas que se desarrollaban de forma manual, minimizando además la ocurrencia de errores u omisiones.
En Know-How desde hace un buen tiempo intentamos pensar los nuevos requerimientos que se nos plantean, teniendo en mente el concepto de automatización de tareas que nos aporte valor en cuanto al control de procesos y que nos permita enfocar nuestros recursos en nuevos desafíos.
En ese sentido fue que se comenzó a manejar “Jenkins” -servidor open source de integración continua- como herramienta de trabajo debido a sus características, popularidad y amplio alcance en cuanto a automatización de tareas e integraciones.
¿Cómo se implementó?
Definimos crear el servicio de forma contenerizada para aprovechar los recursos de infraestructura que tenemos, así como por su portabilidad, facilidad de gestión y mantenimiento, updates, backups, etc.
En la etapa inicial se identificaron una serie de tareas “repetitivas” que involucraban a todos los equipos de trabajo de Know-How -sysAdmins, DBA y Operaciones- y sobre ellas comenzamos a desarrollar las primeras automatizaciones.
El equipo de Operaciones, dentro de sus responsabilidades, gestiona las solicitudes que realizan los clientes en el sistema de tickets, categorizándolas y derivándolas a los equipos técnicos que corresponda.
Simplemente había que enlazar de alguna forma las diferentes solicitudes con una tarea Jenkins, que con determinados datos de entrada e interfaz amigable y fácil de usar, el operador podría ejecutar.
Primeros casos de uso
Si bien se hicieron pruebas con tareas simples, el primer caso de uso complejo fue aplicado para resolver los despliegues de aplicaciones de un servicio que se encuentra en producción a nivel nacional y que suele administrarse como desarrollo de “integración continua”. Tal cosa significa un constante rediseño de la aplicación en busca de mejoras, fixes e integraciones de nuevas funcionalidades según el negocio lo requiera. Por otra parte, a nivel de administración, significa “copiar y pegar” el paquete entregado por el equipo desarrollador y parametrizar contextos para el ambiente adecuado y los organismos o clientes adecuados. Estos parámetros serán entonces las entradas necesarias y excluyentes, que se definen como inputs en Jenkins con el objetivo de ejecutar la serie de instrucciones de forma ordenada. De esta forma, despliegues que eran realizados manualmente por sysAdmins y que consumían mucho tiempo y controles manuales, pasaron a ser ejecutados por el grupo de Operaciones en forma eficiente, controlada y generando una traza de ejecución para su posterior revisión en caso de ser necesario.
A medida que comenzaron a integrarse los jobs, facilitando una serie de tareas que antes ameritaban horas y que luego solo involucraban a los administradores cuando se encontraba algún mensaje de “error” -lo cual era completamente normal en un sistema que se encontraba en constante cambio-, aguardamos avanzar a una etapa de mayor maduración del proyecto para incluir tareas de “responsabilidad compartida”, dándoles las herramientas necesarias al operador para ejecutar tareas de alto impacto y permisos elevados como puede ser reiniciar cluster de tomcats.
No todas las tareas creadas en Jenkins fueron para procesar tareas tras un pedido. También decidimos automatizar la resolución de problemas según una serie de indicadores, alertas y reclamos. Por ejemplo, reiniciar una serie de servidores tomcat cuando se detecta que el uso de memoria es elevado, ya que la idea es prevenir que los servicios “crasheen” o fallen, liberando espacio en algún filesystem donde se detectó el alto porcentaje de uso. Como el mismo equipo de Operaciones trabaja con el monitoreo activo de las plataformas de los clientes, brindamos de esta forma la posibilidad de tomar acciones correctivas “con un solo click”, logrando mantener los niveles de servicios acordados con los clientes. Este tipo de situaciones antes debían ser atendidas por sysAdmins, ya sea en horario normal como en guardias.
Integración de otras tecnologías
Una vez que dominamos dicho flujo de trabajo, avanzamos un poco más y desarrollamos tareas que unen métricas e indicadores del sistema de monitoreo con el sistema de tareas automáticas :
- Reiniciar tomcats automáticamente
- Limpiar FS de logs automáticamente
- Despejar SWAP automáticamente
- Creación de tickets y notificación por mail por cada evento para registro y visión de la administración del servicio
Por otra parte, también construimos tareas que unen el sistema integrado ELK -Elastic Search- con sistemas visuales como Grafana, con la finalidad de observar en un mismo dashboard la cantidad de jobs ejecutados, sus tiempos, los usuarios / administradores que los ejecutan, etc.
Integración entre diferentes equipos
A medida que evolucionó el sistema, se integraron los equipos de SysAdmin y DBA para crear tareas más complejas, además de integrar distintos elementos como ws o apis tanto propias como de terceros.
Un caso de uso bastante completo es, por ejemplo, el de crear VM (VMaaService). Se manejan inputs como “Nombre de VM”, IPs, FS, RAM y CPU para que, por medio de scripts -de lenguaje bash, python, ansible, o mixtas-, interactúen contra las APIs de vmware u otro sistema de virtualización y se realice un deploy de una VM de forma rápida y sencilla, totalmente automatizado.
Aquí se integra instalación, configuración del SO base, prueba de servicios del tipo mta, dns, proxy, etc., instalación y configuración de motores de bases de datos MySQL o Postgres, ya sea en topología standalone como configuraciones master slaves. Este tipo de automatizaciones también contemplan la configuración de los monitoreos de los componentes desplegados, así como el respaldo de los mismos. En resumen, a partir de una serie de parámetros de entrada que se le indican al job Jenkins, se logra desplegar VMs Linux con motores de base de datos operativos en modalidad master/slave, con bases y usuarios operativos, monitoreándose y respaldándose a nivel de Linux y base de datos y, además, logrando reportes automatizados de uso de recursos generados en PDF.
El recorrido de probar, desarrollar y trabajar con Jenkins ha demostrado que, en cuestión de meses, luego de introducirnos en automatizar tareas en la herramienta, se han podido agregar nuevos jobs al tiempo que se resuelven más procesos para cada tipo de pedidos, ya sea con menor o mayor complejidad.
Ejemplos de esto son los siguientes:
- Construir un client de tomcat nuevo
- Construir una serie de tareas programadas -crontab-
- Construir parámetros de logging.properties de tomcat
- Generar reportes automáticos
- Desplegar bases de datos de diversos motores y versiones
- Modo Single Master
- Modo Master / Slave
- Desplegar agentes de monitoreo con sus respectivas customizaciones
- Reportes
- BaaS
En conclusión, en este camino hemos encontrado varios y grandes beneficios. Hemos logrado, trabajando colectivamente entre diferentes equipos de Know-How, grandes avances en cuanto a la integración y adopción de nuevas y distintas tecnologías, motivándonos a seguir mejorando y sobre todo valorando lo brindado a cada servicio que atendemos.
Implementando tareas con mayor rapidez, acompañado de un alto índice de satisfacción en resultados tanto internos como externos, descubrimos que, como la ley de acción-reacción, el tiempo dedicado a automatizar tareas fue tiempo ganado en aprendizaje, investigaciones y análisis de mejoras.
Autor: Christian Lorenzo, System Admin