Una aproximación ágil a las arquitecturas de servicios. Gestión distribuida de logs mediante contenedores Docker y Elastic Stack.

  • Javier García Ros
  • Jorge d’Ors Vilardebó

UNIVERSIDAD DE MURCIA

JORNADAS TÉCNICAS DE REDIRIS - Noviembre, 2016

Origen del proyecto (I)

Oh my LOGS!!
Oh my LOGS!!

Gestión de logs

  • Sofware elegido de gestión de logs
Elastic Stack (anteriormente ELK)
Elastic Stack (anteriormente ELK)

Origen del proyecto (II)

  • Devops
  • Gestión-de-configuración puppet
  • Contenedores Docker
  • Desarrollo Ágil
  • Otros: Integración-Continua, Microservicios, etc.
  • Oportunidad: incorporación de desarrollador al equipo

Manifiesto Ágil

Manifiesto Desarrollo Ágil
Manifiesto Desarrollo Ágil

http://agilemanifesto.org/iso/es/manifesto.html

Manifiesto Arquitecturas

Mi Manifiesto Desarrollo Ágil Arquitecturas :-)
Mi Manifiesto Desarrollo Ágil Arquitecturas :-)

Why?

“Code is Law”. Lawrence Lessig.

Docker: New kid…

Contenedores
Contenedores

El simil

Problema del transporte antes-60
Problema del transporte antes-60

Solución

Contenedor intermodal
Contenedor intermodal

Docker: contenedor código

Portable, autocontenido, …
Portable, autocontenido, …

Docker vs VM (I)

Arquitectura de una VM
Arquitectura de una VM

Docker vs VM (II)

Arquitectura Docker
Arquitectura Docker

Amigable Devops

  • Amigable para Desarrolladores y Administradores
Separación de intereses
Separación de intereses

Funciona con un click

A golpe de cl-ick (comand line :-)
A golpe de cl-ick (comand line :-)

docker run ubuntu echo Hello World

LAGAR

Recipiente donde se pisa la uva para obtener el mosto. RAE

Objetivo funcional

Facilitar el acceso y la explotación de la información

  • Visualización
  • Métricas
  • Tendencias

Objetivos técnicos

  • Procesado de logs para el área TI
  • Acceso independiente para aplicaciones/grupos
    • Autenticación con SSO (CAS)

Herramientas

  • ELK como plataforma de gestión
  • Docker para el despliegue
  • Puppet para configuración de hosts
  • Redis como tubería

ELK stack + Redis

  • Elasticsearch
    • Motor de consulta-noSQL
    • Basado en Lucene (índices)
  • Logstash
    • Recolector y procesador de logs
  • Kibana
    • Frontend Web
  • Redis
    • BD en memoria (cola de mensajes)

ELK

Captura de pantalla de ejemplo
Captura de pantalla de ejemplo

Fase I: Objetivos

  • Partiendo de un enfoque tradicional
  • Toma de contacto con Docker y ELK
  • Trabajo en local (Infrastructure as Code)
  • Prueba básica de funcionamiento

Fase I: Resultados

  • La Prueba es satisfactoria
  • Información útil desde el inicio
    • Detección de tráfico inesperado
    • Un servidor dentro de un cluster que no envía logs adecuadamente
    • Contenido de logs que no sigue buenas prácticas

Fase I: Arquitectura

Arquitectura y flujo de logs
Arquitectura y flujo de logs

Fase I: Efectos secundarios

  • Necesidad de RAM
  • Ocupación del disco: 100%
    • Persistencia de contenedores
  • Grok nightmare: importancia de normalizar los logs (JSON)

Fase II: Objetivos

  • Cambio de enfoque hacia una arquitectura flexible
    • Múltiples contenedores
  • Servicios vs. Contenedores
    • 1 contenedor = 1 proceso
  • Un contenedor por aplicación
  • Redis
  • Control de la ocupación del disco (índices)

Fase II: Resultados

  • Configuraciones independientes mucho más sencillas
  • Varias etapas de procesado
  • Basado en canales Redis
    • es posible escuchar en 2º plano
  • Procesado de 5 aplicaciones enviando logs
  • Script de auto mantenimiento (basado en Curator)

Fase II: Arquitectura

Fase II: Efectos secundarios

Fase II: Efectos secundarios

  • La arquitectura se vuelve más compleja (OFM!)
  • Pérdida de logs (UDP)
  • Procesado de logs multilínea

Fase III: Objetivos

  • Ausencia de AAA en Kibana (X-Pack)
    • Autenticación y Autorización basada en SSO (CAS)
  • Contenedores por sección
  • Transmisión confiable (RELP)
  • Geoetiquetado
  • Logs multilínea

Fase III: Resultados

  • Autenticación CAS:
    • Nginx-frontend + Apache2.4-CAS + Nginx-backend VHost
  • Acceso independinte por sección
    • Contenedor Kibana por cada sección
  • Procesado en origen: rsyslog.
    • MaxMessageSize=“32KB”

Fase III: Arquitectura

Fase III: Efectos secundarios

  • Do your grok grok?

grok (verb) understand (something) intuitively or by empathy.

Fase IV: Objetivos

  • Alta disponibilidad/cluster
  • Procesado de logs masivo: Aula Virtual/OFM
  • Estudiar el comportamiento de la arquitectura
  • Solucionar los problemas (github)

Fase IV: Resultados

  • Cluster ELK
  • Cluster Redis vs. balanceo (múltiples Redis)
    • Listas Redis
  • Ampliar recursos en etapas críticas
  • Github: docker, elastic, redis, rsyslog

Fase IV: Arquitectura

Fase IV: Efectos secundarios

Lecciones aprendidas

  • Aprendizaje
  • Recursos hardware y humanos
  • Normalizar vs. transformar la realidad
    • Cada aplicación conoce su formato
  • Github

Vías futuras

  • Centralizar logs
  • Archivado y firmado (ENS)
  • Apache Kafka como alternativa a Redis
  • Soluciones para la gestión de contenedores
    • Docker swarm mode
    • Kubernetes
  • Monitorización
  • Autogestión
  • Mucho trabajo por hacer, mucho por mejorar

Consideraciones finales

¿Preguntas?

Gracias

“All genuine learning comes from experience” - John Dewey

  • Javier García Ros
  • Jorge d’Ors Vilardebó