Dashboard e Integración
Arquitectura usada
La integración de logs del laboratorio reutiliza el stack existente de observabilidad en lugar de introducir una plataforma independiente.
Razón del diseño
Grafanaya existe en el laboratorioLokiresuelve almacenamiento y consulta de logs sin agregar una UI nuevaAlloyrecibe syslog nativo y permite normalizar etiquetas antes de escribir en Loki
Lógica de ingesta
Se separó la ingesta por plataforma para evitar ambiguedades entre formatos:
SR OSentra por10.99.1.16:5514/udpSR Linuxentra por10.99.1.16:1514/udp
Esto permite tratar:
SR OScomo flujorfc3164SR Linuxcomo flujorfc5424
La configuración activa de Alloy vive en el archivo configs/logs/config.alloy del repositorio.
Archivos del módulo
| Archivo | Rol |
|---|---|
configs/logs/config.alloy | Collector de entrada; recibe syslog, extrae labels y reenvía a Loki |
configs/logs/loki-config.yml | Configuración de almacenamiento, índice, compactor y retención |
configs/logs/prepare.sh | Script opcional si quieres volver a usar persistencia en host para troubleshooting |
configs/logs/loki-data/ | Placeholder opcional para persistencia en host; no se usa en el modo por defecto |
configs/logs/alloy-data/ | Placeholder opcional para persistencia en host; no se usa en el modo por defecto |
Modo de almacenamiento usado
Por defecto, el laboratorio usa almacenamiento efímero para Loki y Alloy.
Esto significa:
Lokiescribe dentro del filesystem del contenedorAlloyguarda su estado dentro del filesystem del contenedor- al destruir el lab, esos datos desaparecen junto con los contenedores
- el workspace no se llena con logs persistentes ni aparecen problemas de ownership por UID de contenedores
Si en algún momento quieres conservar logs entre recreaciones del lab, puedes volver a montar directorios del host y reutilizar configs/logs/prepare.sh.
config.alloy explicado por bloques
logging
logging {
level = "info"
format = "logfmt"
}
Define el nivel y formato de logs internos de Alloy. No afecta el contenido de los logs Nokia en Loki; solo ayuda a operar el propio collector.
loki.relabel "syslog"
Este bloque toma metadatos generados por el listener syslog y los normaliza en labels consultables en Loki:
__syslog_message_hostname->hostname__syslog_message_app_name->app_name__syslog_message_severity->severity__syslog_message_facility->facility__syslog_connection_ip_address->source_ip
También rellena message_type inicialmente con app_name, para que siempre exista una dimensión mínima de clasificación incluso cuando no se logra extraer un tipo de evento más específico.
loki.process "classify"
Este bloque hace parsing adicional por plataforma:
- para
SR Linuxusa una expresión regular sobre el payloadrfc5424para extraerpayload_level,payload_severityymessage_type - para
SR OSusa una expresión regular para capturar identificadores Nokia del estiloXXXX-YYYY-ZZZ
Su objetivo no es almacenar el log crudo, sino enriquecerlo para que Grafana pueda agrupar por tipo de evento sin depender de inspección manual línea por línea.
loki.source.syslog "nokia"
Aquí viven los listeners reales:
0.0.0.0:5514/udpparaSR OS0.0.0.0:1514/udpparaSR Linux
Se separan porque los formatos no son iguales:
SR OSse procesa comorfc3164SR Linuxse procesa comorfc5424
Además, cada listener ya añade labels base como job, collector, transport y source_platform.
loki.write "local"
Es la salida final hacia Loki:
loki.write "local" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
external_labels = {
lab = "small-isp-lab",
}
}
Todo lo que Alloy recibe y enriquece termina enviándose al endpoint HTTP interno de Loki. El label externo lab=small-isp-lab sirve para diferenciar este entorno si en el futuro compartes un Loki centralizado.
loki-config.yml explicado por bloques
auth_enabled y server
auth_enabled: falsesimplifica el lab y evita manejar autenticación extrahttp_listen_port: 3100define el puerto HTTP interno del contenedor Loki
common
Define el almacenamiento local:
path_prefix: /lokifija la raíz interna de datosreplication_factor: 1confirma que es un despliegue single-nodering ... inmemoryevita depender de un KV externo
schema_config
Usa:
store: tsdbobject_store: filesystemschema: v13period: 24h
Esto significa que Loki rota e indexa la información por períodos diarios usando filesystem local, sin S3 ni backend distribuido.
storage_config
Separa dos áreas:
/loki/chunkspara los datos de log/loki/indexy/loki/index_cachepara índice y caché deltsdb_shipper
Si el uso de disco crece, normalmente el mayor impacto aparece en chunks.
limits_config
La línea más importante para laboratorio es:
retention_period: 1h
Eso equivale a 1 hora. En el modo efímero por defecto, esa retención vive dentro del contenedor Loki y desaparece al destruir el lab.
compactor
El compactor:
- consolida datos periódicamente
- aplica la retención
- procesa borrados sobre filesystem
Sin este bloque, la retención configurada no se aplicaría de forma efectiva.
Retención y consumo de disco
En este lab:
- por defecto, el crecimiento ocurre dentro del contenedor
Loki, no en el repo Alloytambién usa almacenamiento efímero local al contenedor- con
retention_period: 1h, Loki conserva hasta1 horade logs mientras el contenedor exista
Operativamente esto significa:
- para demos cortas, no dejas residuos persistentes en el workspace
- si dejas el lab muchos días generando syslog, el consumo crecerá dentro del almacenamiento Docker del host
- si necesitas un lab más liviano, lo primero a reducir es la retención de Loki, no Alloy
- si reactivas bind mounts persistentes, entonces el crecimiento volverá a verse en
configs/logs/loki-data/
Etiquetas normalizadas en Loki
Alloy genera etiquetas que simplifican el filtrado del dashboard:
| Label | Uso |
|---|---|
source_platform | sros o srlinux |
hostname | nombre del equipo |
app_name | proceso o aplicación emisora |
severity | severidad syslog |
facility | facility syslog |
source_ip | IP de gestión del origen |
message_type | tipo de evento; en SR Linux cae por defecto a app_name |
Dashboard de Grafana
El dashboard Nokia Syslog Overview fue diseñado para no mezclar ambos formatos en la operación diaria.
Filtros
Compartido
Transport
SR OS
SrosHostSrosAppSrosType
SR Linux
SrlHostSrlAppSrlType
Paneles
Log LinesActive StreamsSR OS ErrorsSR OS WarningsSR Linux ErrorsSR Linux WarningsSR OS Lines by TypeSR OS Lines by HostSR Linux Lines by AppSR Linux Lines by HostRaw Syslog - SR OSRaw Syslog - SR Linux
Configuración aplicada en SR OS
La referencia del startup-config quedó documentada en:
Fragmento lógico:
/configure log log-id "77" description "Default System Log to Syslog"
/configure log log-id "77" source main true
/configure log log-id "77" destination syslog "1"
/configure log route-preference primary outband
/configure log syslog "1" description "syslog container"
/configure log syslog "1" address 10.99.1.16
/configure log syslog "1" facility local6
/configure log syslog "1" severity info
/configure log syslog "1" port 5514
/configure log syslog "1" hostname use-system-name
Resultado operativo
MASTERySLAVEpublican eventos administrativos y de sistema hacia Alloy- los eventos mantienen el nombre del equipo
- el dashboard puede filtrar por
BNGMASTER,BNGSLAVE,MASTER,SLAVEy por tipo de evento Nokia
Configuración aplicada en SR Linux
La referencia del startup-config quedó documentada en:
Fragmento lógico:
set /system grpc-server eda-mgmt admin-state disable
set /system logging network-instance mgmt
set /system logging remote-server 10.99.1.16 transport udp
set /system logging remote-server 10.99.1.16 remote-port 1514
set /system logging remote-server 10.99.1.16 format RSYSLOG_SyslogProtocol23Format
set /system logging remote-server 10.99.1.16 facility local6 priority match-above informational
Razón del ajuste eda-mgmt
Durante la validación real se observó este mensaje repetitivo:
sr_grpc_server ... Unable to retrieve TLS profile 'EDA'
La causa fue que grpc-server eda-mgmt estaba habilitado pero referenciaba un perfil TLS inexistente en estos nodos. Para evitar ruido innecesario en Loki y Grafana, se dejó admin-state disable.
Consultas útiles
Todos los logs:
{job="nokia-syslog"}
Solo SR OS:
{job="nokia-syslog", source_platform="sros"}
Solo SR Linux:
{job="nokia-syslog", source_platform="srlinux"}
Solo warnings de SR Linux:
{job="nokia-syslog", source_platform="srlinux", severity="warning"}
Solo errores de SR OS:
{job="nokia-syslog", source_platform="sros", severity="error"}
Validación recomendada
- Abrir Grafana en
http://localhost:3030 - Entrar al dashboard
Nokia Syslog Overview - Confirmar que existan datos en
Raw Syslog - SR OSyRaw Syslog - SR Linux - Filtrar por
SrosHost=MASTERoSrlHost=olt - Revisar que los paneles de warnings y errores cambien según el filtro
Troubleshooting rápido
- Si no ves logs SR OS, revisa que los BNG apunten a
10.99.1.16:5514/udp - Si no ves logs SR Linux, revisa que
OLT,Carrier1yCarrier2apunten a10.99.1.16:1514/udp - Si Loki responde pero Grafana no muestra datos, prueba
{job="nokia-syslog"}en Explore - Si el disco crece más de lo esperado, revisa el uso de almacenamiento de Docker; si reactivaste persistencia en host, revisa
configs/logs/loki-data/