Grafana Metrics Stack
La actividad consiste en obtener y visualizar la métrica de nuestra red simulada en incus para ello deberemos crear y configurar varias instancias de ubuntu 24.04 cada una con su función que se describe brevemente a continuación:
- Grafana : Web UI app para la visualización de Pasos
- Crear red asir network
incus$ incus network create asirnetwork \
ipv4.address = 10.10.82.1/24 \
ipv4.nat = true \
ipv4.dhcp.ranges = 10.10.82.100-10.10.82.200 \
ipv4.dhcp.routes = 0.0.0.0/0,10.10.82.1 \
ipv6.address = none
incus$ incus network show asirnetwork
- Crear instancias para las máquinas:
- grafana
- alloy
- loki
- mimir
- tempo
- srv1
- srv2
- srv3
incus$ incus launch images:ubuntu/24.04 grafana --network asirnetwork
incus$ incus list -n4st
Instalación de paquetes y repositorios necesarios
incus$ incus exec <instance> -- bash -c 'apt-get update && apt-get -y install aptitude wget bash-completion gpg nano xsel vim'
incus$ incus exec <instance> -- bash -c 'wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor > /etc/apt/keyrings/grafana.gpg'
incus$ incus exec <instance> -- bash -c 'echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list'
Grafana
Instalar y configurar grafana
- Añadir repositorios zabbix
incus$ incus exec grafana -- bash -c ' apt-get update && apt-get -y install grafana'
incus$ incus shell grafana
- Habilitar servicio al arranque
grafana$ systemctl enable grafana-server.service
grafana$ systemctl start grafana-server.service
- Comprueba que el servicio está escuchando
grafana$ ss -atunp
- Logging (admin/admin)
http://<ip-grafana>:3000
Alloy
Alloy permite la recolección y procesamiento de los datos de telemetría de diferentes fuentes
incus$ incus exec alloy -- bash -c ' apt-get update && apt-get -y install alloy'
incus$ incus shell alloy
- Habilitar servicio al arranque
alloy$ systemctl enable alloy.service
alloy$ systemctl start alloy.service
- Comprueba que el servicio está escuchando
alloy$ ss -atunp
- Fichero configuración
/etc/default/alloy
/etc/alloy/config.alloy
- Permitir acceso remoto al UI
/etc/default/alloy
...
CUSTOM_ARGS = "--server.http.listen-addr=0.0.0.0:12345"
...
/etc/alloy/config.alloy
livedebugging {
enabled = true
}
Podemos consultar el correcto funcionamiento de Alloy a través de su API
curl alloy-ip:12345/-/ready
curl alloy-ip:12345/-/healthy
Tareas
- Configurar alloy para que obtenga métricas de si mismo tutorial
- Obtener métrica de incus server y visualizar en grafana tutorial
- Enviar los logs de incus server a loki tutorial
- Obtener métricas de un servidor linux a través de node exporter
- Obtener remote syslogs y reenviar a loki tutorial
Loki
Loki almacena de forma eficiente los logs que pueden ser explorados mediante un lenguaje de consulta (LogQL)
incus$ incus exec loki -- bash -c ' apt-get update && apt-get -y install loki'
incus$ incus shell loki
Warning
La configuración por defecto de loki no permite iniciar el servicio de forma correcta. Es necesario desactivar la opción enable_multi_varian_queries: true del fichero de configuración /etc/loki/config.yml
- Habilitar servicio al arranque
alloy$ systemctl enable loki.service
alloy$ systemctl start loki.service
- Comprueba que el servicio está escuchando
alloy$ ss -atunp
Podemos comprobar el correcto funcionamiento de loki consultando la API
curl loki-ip:3100/ready
curl loki-ip:3100/services
Mimir
Mimir es una base de datos compatible con prometheus que permite configurar alertas.
incus$ incus exec mimir -- bash -c ' apt-get update && apt-get -y install mimir'
incus$ incus shell mimir
Configuración Tras la instalación, debemos modificar la configuración de mimir, puedes descargar una configuració operativa para nuestros propósitos con el siguiene comando:
wget -O /etc/mimir/config.yml https://raw.githubusercontent.com/ASIR2-SGD/asir2-sgd.github.io/refs/heads/main/resources/files/mimir_config.yml
Reiniciar el servicio tras la configuración y comprobar que está activo al arranque
mimir$ systemctql restart mimir
mimir$ systemctl status mimir
Comprueba que el servicio está escuchando
mimir ss -atunp
Comprueba el estado de mimir consultando la [API](Podemos comprobar el correcto funcionamiento de loki consultando la API
curl mimir-ip:8080/ready
curl mimir-ip:8080/api/v1/user_stats
curl mimir-ip:8080/api/v1/status/flags
curl mimir-ip:8080/config
Note
Para configurar mimir como datasource en grafana deberás indicar la siguietne ruta en el campo Connection_http://mimir-ip:port/prometheus

Métricas de incus
Incus facilita enormemente la tarea de obtener valores de métrica de sus instancias que podemos obtener con el comando bash incus query /1.0/metrics. Debemos exponerlas para que sean accesibles medianta la API, deberemos llevar a cabo algunos cambios en la configuración global
incus$ incus config set core.https_address ":8443"
incus$ incus config set core.metrics_address ":8444"
incus$ incus config set core.metrics_authentication false
De esta forma exponemos incus en la red , accede a bash https://incus-ip:8443 y sigue los pasos para crear una conexión TLS necesaria.
Incus también puede enviar los logs a loki llevando a cabo los siguientes cambios en la configuraición global.
incus$ incus config set logging.loki01.target.type loki
incus$ incus config set logging.loki01.target.address http://<loki-ip>:3100
incus$ incus config set logging.loki01.lifecycle.types instance
incus$ incus config set logging.loki01.types lifecycle,network-acl,logging
Comprueba y corrige la configuraición global de incus en caso de que sea necesario mediante los comandos.
incus$ incus config show
incus$ incus config edit
Actividad. Métricas apache/mysql
Se propone en la siguiente actividad que el alumno sea capaz de configurar los componentes vistos para visualizar la información e métrica de un servidor web apache. Pasos
- [ ] Crear nueva instancia en incus denominada apache
- [ ] Instala y configura el servidor apache
- [ ] Expón los datos de métrica del servidor apache tutorial
- [ ] Configurar alloy para que recoja los datos de métrica de apache y los almacene en mirmir.Manual
- [ ] Muestra los datos en grafana
I