Mi Primer Mes Oficialmente como DevOps (Aprende los primeros pasos)

Llevaba varios años realizando tareas como DevOps, administrador de servidores,desarrollo Backend y CTO, pero hace algunos meses empecé a trabajar oficialmente como DevOps.

He encontrado esta experiencia muy satisfactoría ya que une de manera transversal todas las áreas de una empresa de tecnología y requiere conocimientos avanzados en Servidores, Computación en la nube, Desarrollo Backend, Frontend, CDN's, pruebas de carga, así cómo también decisiones estratégicas, mejor dicho... Es un ambiente cambiante y de gran exigencia, así mismo de grandes aprendizajes.

Expectativa vs Realidad

En un comienzo se deseaba implementar Kubernetes y Docker desde el día 0, sin embargo, lo pude persuadir para el primer mes "abonar en campo", con esto me refiero a hacer una revisión completa de los servicios, servidores, dominios y todas las configuraciones, de ésta forma encontré:

  • Servidores sin optimización
  • Política de Backups leve
  • Falta de logs centalizados
  • Falta de alertas

Manos a la Obra:

Optimización de CPU

La infraestructura está montada sobre Google Cloud Platform y existía una máquina con XvCPUs y YGB de memoría RAM, el cpu de esta máquina estaba al 100%, fue muy extraño para mi, ya que existían gran cantidad de procesos. Después de auditorear un rato descubrí que cuando supervisor reiniciaba un servicio de uWSGI quedaban procesos "huérfanos" los cuales consumian todo el CPU, después de corregir esto bajo a un 8% de CPU.

Servicios descentralizados

Hice un plan de dividir las aplicaciones web en tres estados/servidores:

  • Desarrollo: Servidor encargado de servir la página web de pruebas, con base de datos local y pocos recursos.
  • Pre-producción: Servidor encargado de servir la página web de pre-producción, con base de datos local y recursos iguales a producción.
  • Producción: Servidor encargado de servir la página web de producción, conectada a una base de datos en otro servidor.

La base de datos en un inicio seguirá en un servidor.

Servidor de tareas:

  • Existen algunos servidores dedicados a realizar tareas repetitivas, acá no puedo dar mayor detalle dada la complejidad del proyecto.
Backups:

En este caso sólo es necesario realizar backup de la base de datos, para la cuál he escrito un script en Python que crea un backup y posteriormente lo almacena en Google Compute Storage ejecutado por un crontab, éste backup se realiza en un datacenter al otro lado del mundo, ya que si por alguna razón Google llega a perder ese datacenter la información está respaldada en otro continente (un poco extremo lo sé, pero así toca pensar a veces).

Logs centralizados

Para toda la administración de Logs he decidido utilizar StackDriver, éste es un servicio de pago adicional en Google, el cual se encarga de almacenar todos los logs en servidores externos, para esto es necesario instalar un plugin para StackDriver, el cual se encarga de envíar métricas del sistema, también se instala otro plugin llamado Google-fluent, el cual lee de un archivo y envía toda la información a StackDriver, allí ya es parseada y se puede visualizar de forma muy fácil.

Una segunda etapa fue definir el nivel de logs para StackDriver, para esto fue necesario sobreescribir el logging de python y retornar un JSON con un nivel de logs que entendiera StackDriver, de esta forma se puede filtrar por nivel de error y encontrar cualquier eventualidad graficamente.

Sistema de Alerta

StackDriver también permite crear alertas basadas en variables del sistema (CPU, Memoria, Disco, Red), logs (dado un log crear una alerta) y Heath Checks (Realiza una petición a una url de forma periodica 1 minuto, 5 minutos, etc). Éstas aletas se pueden envíar por correo electrónico, a la aplicación móvil de Google Console Platform y mi preferida SMS (ya que puedo ir a acampar con tranquilidad).

Conclusiones:
  • Los primeros días como DevOps se debe organizar la infraestructura actual, es decir, optimizar, para que cuando estemos implementando nuevos sistemas no tengamos ningún inconveniente.
  • Este tipo de tareas y reconocimiento nos da un input muy importante para trazarnos un plan estratégico de acción.
  • Se deben utilizar herramientas dadas por los proveedores de Cloud. Obviamente si se utiliza un servicio que no tenga estas características será un poco más complejo montar todo (Podría ser con herramientas como ELK, TIC, Nagios, Zabbix, etc).

Juan Pablo Arias

I constantly discover new technologies and ways to improve IT processes. I'm a fan of automation. I like programming, but my passion is cloud computing.