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-binpara 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.