Service summary - aleiis/grafana-stack-validation GitHub Wiki
Aquí se encuentran todos los servicios desplegados al ejecutar docker compose
:
WASAPhoto (sandbox)
mysql-database
Es un contenedor con MySQL server que contiene la base de datos con todos los datos.
Utiliza el volumen mysql-database
para guardar todos sus datos. También se monta el script mysql-exporter-permissions.sql
en la carpeta /docker-entrypoint-initdb.d/
, una carpeta especial en la cual cualquier script que metamos se ejecutará una única vez en el momento de montar el servidor.
wasaphoto-backend
Este contenedor ejecuta el backend de WASAPhoto. Resuelve solicitudes del frontend y hace uso de la base de datos MySQL.
Utiliza el volumen wasaphoto-data
para guardar todos sus datos. También se monta el YAML de configuración en /app/config.yml (la localización del fichero de configuración para la aplicación se indica con variables de entorno). Además, utilizamos el volumen wasaphoto-bin
para compartir el binario del backend con el agente de instrumentación de OTEL para Go.
wasaphoto-frontend
Este contenedor sirve el frontend en el puerto 9191 mediante un servidor NGINX.
Metrics
Recolectamos métricas con dos agente distintos con objetivos distintos: cAdvisor y MySQL Server Exporter.
cadvisor
cAdvisor recolecta métricas sobre el rendimiento de todos los contenedores que está corriendo Docker y las expone en el puerto 8080.
Necesita acceso a unos volúmenes concretos especificados en su documentación que le permiten hacer la recolección.
database-exporter
Este contenedor despliega el agente MySQL Server Exporter desarrollado por los mismos desarrolladores de Prometheus. Accede a la base de datos MySQL con el usuario creado con el script mysql-exporter-permissions.sql
y recopila métricas sobre el rendimiento de la base de datos y las expone en el puerto 9104.
prometheus
Una instancia de Prometheus que se encarga de recopilar las métricas de los dos agentes mencionados previamente y enviarlas a Cortex.
Utiliza el volumen prometheus-data
para guardar todos sus datos. También se monta la configuración de Prometheus prometheus-config.yaml
.
cortex
Un despliegue de Cortex de forma monolítica para almacenar y consultar métricas. La configuración de Cortex se especifica mediante el fichero cortex-config.yaml
, que se monta en /config/cortex-config.yaml
.
Logs
alloy
Una instancia de Grafana Alloy que permite la recolección e ingesta de logs de Docker. El archivo de configuración config.alloy
especifica los componentes que se utilizan y sus relaciones entre ellos. Necesita acceso al socker de docker /var/run/docker.sock
para realizar la recolección de logs.
loki
Una despliegue de Loki de forma monolítica que permite almacenar y consultar logs. La configuración de Loki se especifica mediante el fichero loki-config.yaml
, que se monta en /config/config.yaml
.
Traces
En nuestra aplicación hay dos partes que generan trazas: el backend y el frontend. El backend está escrito en Go y la instrumentación puede ser manual o automática mediante un agente. El frontend es una aplicación para navegador escrita en Vue y la instrumentación es semi-automática mediante un script de JavaScript introducido antes de construir.
autoinstrumentation-go
Es un agente de autoinstrumentación para Go con OTEL. Monta con volúmenes el binario en Go (wasaphoto-bin
) y el archivo /proc
. Envía directamente las trazas al OTEL Collector.
otel-collector
Una instancia de OpenTelemtry Collector que se encarga de recolectar todas las trazas y enviarlas a Tempo. Es necesario debido a que estamos recolectando trazas generadas por un navegador web y tenemos que lidiar con las políticas CORS.
tempo
Un despliegue de Tempo de forma monolítica para almacenar y consultar trazas. La configuración de Tempo se especifica mediante el fichero tempo-config.yaml
, que se monta en /etc/tempo.yaml
.
Data visualization
grafana
Un contenedor con Grafana con algunos dashboards preinstalados para ver todos los datos de los backends.