Fase 4.3
Loki + Alloy

Loki y Grafana Alloy · Logs

Loki almacena logs con el mismo modelo de labels que Prometheus usa para metricas. Grafana Alloy (sucesor de Promtail) los recolecta de cada pod via Kubernetes API. Juntos forman el pipeline de observabilidad de logs.

01

Loki: La Base de Datos de Logs

Loki es un sistema de agregacion de logs diseniado para ser eficiente en storage. A diferencia de Elasticsearch, no indexa el contenido de los logs — solo indexa los labels (app, namespace, pod). El texto se comprime y almacena en chunks.

31 dias
Retencion
10 Gi
PVC Storage
boltdb-shipper
Storage Backend
filesystem
Object Store
En Oracle Cloud, Loki usa OCI Object Storage como backend. El archivo configmap-oci.yml contiene la configuracion S3-compatible. En el lab local, el backend es filesystem sobre PVC. La migracion es transparente para los queries.
02

Alloy: Recoleccion de Logs

Grafana Alloy es el sucesor de Promtail. Corre como DaemonSet — un pod por nodo — y recolecta logs de todos los contenedores. Usa la API de Kubernetes para descubrir pods y enriquecer los logs con labels.

alloy/configmap.yml — pipeline River
discovery.kubernetes "pods" {
  role = "pod"
  namespaces = ["aiops"]
}

discovery.relabel "pods_logs" {
  targets = discovery.kubernetes.pods.targets
  rule {
    source_labels = ["__meta_kubernetes_pod_label_app"]
    target_label  = "app"
  }
}

loki.source.kubernetes "pod_logs" {
  targets = discovery.relabel.pods_logs.output
  forward_to = [loki.write.default.receiver]
}

loki.write "default" {
  endpoint {
    url = "http://loki.aiops.svc.cluster.local:3100/loki/api/v1/push"
  }
}
Kubernetes API
Alloy descubre pods en el namespace aiops
Relabeling
Extrae labels: app, namespace, pod, container
Push a Loki
POST /loki/api/v1/push con los logs etiquetados
03

Query de Logs desde Grafana

Loki usa LogQL, un lenguaje de queries similar a PromQL. Los logs se exploran desde Grafana con el datasource de Loki preconfigurado.

LogQL queries
# Todos los logs del namespace aiops
{namespace="aiops"}
# Logs de error de un pod especifico
{namespace="aiops", app="n8n"} |= "error"
# Conteo de errores por app en las ultimas 2h
sum by(app) (count_over_time({namespace="aiops"} |= "error" [2h]))

El workflow 2 de n8n (Log Analysis) usa exactamente estas queries via la API HTTP de Loki. Cada hora consulta logs de error, los procesa con LLM y envia un reporte a Discord.

Siguiente: Grafana Dashboards

Con metricas en Prometheus y logs en Loki, Grafana unifica la visualizacion. Dashboards preconfigurados con panels de cluster, SLOs y estado de servicios.

Grafana