En pocas palabras
Backend de agregación de logs que indexa etiquetas y conserva el contenido para consulta.
Qué problema resuelve
Coste de indexar todo el texto de los logs y correlación difícil con otras señales.
Cuándo utilizarlo
Aplicaciones distribuidas. Ejemplo: consultar errores de un servicio durante un incidente.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
En el Radar compartido: Trial (valoración de la edición aportada).
Cómo funciona
Organiza logs en streams identificados por etiquetas y utiliza LogQL para filtrarlos. En despliegues escalables emplea almacenamiento de objetos y componentes distribuidos.
Ejemplo de uso
Consultar {service_name=“pagos”} |= “timeout” en el intervalo del incidente. Seguir un trace_id del contenido para inspeccionar la traza relacionada en Grafana.
Etiquetas: la decisión más importante
Loki indexa solo las etiquetas; el contenido de las líneas se comprime y se recorre en la consulta. Cada combinación única de etiquetas crea un stream.
| Buena etiqueta (baja cardinalidad) | Mala etiqueta (alta cardinalidad) |
|---|---|
service_name, namespace, env, cluster, level |
user_id, trace_id, request_id, IP |
Los valores de alta cardinalidad van en el contenido o como structured metadata (por ejemplo trace_id), que se adjunta a cada línea sin crear streams nuevos.
LogQL en la práctica
# Filtrado de líneas
{service_name="pagos", env="prod"} |= "timeout" != "healthcheck"
# Parsear JSON y filtrar por un campo
{service_name="pagos"} | json | status >= 500 | line_format "{{.method}} {{.path}} {{.status}}"
# Métrica: errores por segundo por servicio
sum by (service_name) (rate({env="prod"} |= "ERROR" [5m]))
# Percentil de duración extraído de los logs
quantile_over_time(0.95, {service_name="pagos"} | json | unwrap duration_ms [5m]) by (endpoint)
| Operador | Uso |
|---|---|
| ` | =/!=` |
| ` | /! |
| ` | json, |
| ` | unwrap` |
Filtra primero por etiquetas y texto, y parsea después: es mucho más barato.
Modos de despliegue
| Modo | Uso |
|---|---|
| Monolítico | Un binario; desarrollo o volúmenes pequeños |
| Microservicios | Componentes separados (distributor, ingester, querier, compactor) escalados por separado |
| Grafana Cloud | Gestionado |
En producción usa almacenamiento de objetos (GCS, S3) con índice TSDB, y el compactor para aplicar la retención.
Alertas desde logs
El ruler evalúa consultas LogQL métricas como reglas de Prometheus: por ejemplo, alertar si rate({service_name="pagos"} |= "saldo negativo" [5m]) > 0. Útil para eventos de negocio que no tienen métrica propia.
Correlación
Configura en Grafana un derived field que convierta el trace_id del log en un enlace a Grafana Tempo, y envía logs con Grafana Alloy añadiendo las mismas etiquetas de servicio que usan métricas y trazas.
Criterios de implementación
Definir retención y límites por tenant. Autenticación y aislamiento requieren configuración; evaluar consultas amplias, volumen y costes de almacenamiento.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.