La distribución de los contenedores en los diferentes servidores, se siguen ciertos criterios:
* Analizar las cargas de los servidores
* Analizar las cargas de los servidores.
* Dependencias entre servicios, si hay dependencia entre servicios, y siempre que sea posible se despliegan en el mismo servidor para reducir la latencia de transferencia de datos.
!!! tip
Cuando un servicio hace uso intensivo de disco, por ejemplo caché de Nginx, se pueden montar varios volúmenes (EBS) en diferentes directorios, y repartir la caché entre estos discos. De esta forma se reduce la latencia de acceso a disco.
Esto será solo posible si el servicio permite el uso de varios directorios de trabajo.
### Portainer
[Portainer](https://portainer.io){: target="_blank"} es un servicio para manejar el entorno Docker Swarm de manera gráfica, lo que facilita ver el estado del sistema.
[Portainer](https://portainer.io){: target="_blank"} es un herramienta web para manejar el entorno Docker Swarm, lo que facilita ver el estado del sistema sin tener que acceder a los servidores directamente.
Como todo buen sistema, es necesario contar con una herramienta que permita analizar el rendimiento del sistema, con el fin de detectar problemas, optimizar recursos, actuar en picos de alta demanda, etc.
Como en todo buen sistema, es necesario contar con una herramienta que permita analizar el rendimiento del sistema, con el fin de detectar problemas, optimizar recursos, actuar en picos de alta demanda, etc.
[SwarmProm](https://github.com/stefanprodan/swarmprom){: target="_blank"}, es la base para realizar monitorización de REDMIC. Este proyecto aglutina diferentes herramientas de recolecta y visualización de métricas. En el siguiente diagrama muestra un esquema básico de las funciones que realiza cada componente.
[SwarmProm](https://github.com/stefanprodan/swarmprom){: target="_blank"}, es la base para realizar la monitorización de REDMIC. Este proyecto aglutina diferentes servicios de recolecta y visualización de métricas. En el siguiente diagrama se muestra un esquema básico de las funciones que realiza cada componente.
{: .center}
Todas las herramientas que se exponen a continuación son instaladas como contenedores en los servidores que correspondan.
Todas las herramientas que se exponen a continuación son instaladas como contenedores en los servidores que correspondan, esto automatiza la instalación en nuevos servidores.
### Prometheus
[Prometheus](https://prometheus.io){: target="_blank"} es la herramienta básica encargada de recolectar todas las métricas expuestas por los diferentes servicios, así como de alertar de problemas. Para ello, cada cierto tiempo recoge las métricas expuestas por los servicios que son monitorizados, si una métrica no responde durante un tiempo ese servicio se da por eliminado. Todas estas métricas son almacenadas en una base de datos, para su posterior consulta.
@@ -43,7 +47,11 @@ Todas las herramientas que se exponen a continuación son instaladas como conten
[Node-exporter](https://github.com/prometheus/node_exporter){: target="_blank"} es una herramienta que expone métricas del servidor donde está instalado, para ello recopila datos sobre usos de memoria, disco o CPU, así como de tráfico E/S.
[Node-exporter](https://github.com/prometheus/node_exporter){: target="_blank"}, herramienta que expone métricas del servidor donde está instalado, para ello recopila datos sobre usos de memoria, disco o CPU, así como de tráfico E/S. Esta herramienta permitirá una pieza fundamental por varios motivos:
* Repartición de la distribución de los contenedores, dependiendo de la carga de CPU, RAM, uso de disco, etc.
* Adelantarse a que un disco se quede sin espacio.
Los contenedores tienen un chequeo de salud, que permite comprobar si el contenedor está funcionando correctamente. Si el chequeo detecta que el funcionamiento no es correcto, el contenedor es parado y se arranca una nueva instancia.
Todos los contenedores tienen un chequeo de salud que se realiza cada cierto tiempo mientras están en ejecución, esto permite comprobar si el contenedor está funcionando correctamente. Si el chequeo detecta que el funcionamiento no es correcto, el contenedor es parado y se arranca una nueva instancia.
Además de los contenedores, todos los servidores cuentan con servicio que chequea si la salud del servicio "docker", este servicio es monitorizado desde el servicio de Elastic Load Balancing, proveído por Amazon, el cual permite reiniciar un servidor si el servicio de salud del servidor no responde.
Además de los contenedores, todos los servidores cuentan con un servicio que comprueba la salud del servicio "docker", este servicio es monitorizado desde el servicio de Elastic Load Balancing, proveído por Amazon, el cual permite reiniciar un servidor si el servidor no responde.
---
## Logs
CloudWatch centraliza los logs de los diferentes contenedores.
No newline at end of file
Los logs de una aplicación son una herramienta importante para descubrir errores, es por ello que un sistema como REDMIC compuesto por múltiples servicios sea necesario centralizar en un sitio común todos ellos. Para este acometido se ha usado CloudWatch, es una herramienta de Amazon para la gestión de logs centralizada.