Skip to content

Grafana

Esta herammienta nos brinda la posibilidad de tomar una fuente de datos, por ejemplo Prometheus u otra, y generar graficas que se actualizan interactivamente, reflejando algún estado de un micro-servicio, fundamental aspecto para monitorizarción de infraestructura de software moderna.

Instalación de Grafana

Grafana desde Docker

bash
docker run -d -p 3030:3000 --name=grafana grafana/grafana-oss

Esto inicia un servicio que se puede consultar desde el navegador usando: http://localhost:3030/login
La credeciales por defecto son admin como usuario y contraseña (esta última se cambia al iniciar por primera vez)

Una vez se ha ejecutado el comando anterior, las siguientes veces que se requiera iniciar el servicio simplemente se ejecuta:

bash
docker start grafana

Iniciando con fuentes de datos en Grafana

Una vez configurado e iniciado el entorno de Grafana, lo que se debe hacer a continuación es establecer o configurar una conexión a partir de una fuente de datos.

Actualmente, encontramos dentro del menú Connections la opción Add new connection, podemos elegir como Data source (fuente de datos) el conector Infinity para instalarlo (si no se tiene aún instalado). Luego de esto podemos usar, dentro del Data Source (Infinity) la opción Add data source (o simplemente buscamos esta opción a partir de Data Source). Allí procedemos a guardas las configuraciones (que correspondan por defecto). Esto muestra un enlace para crear un Dashboard así que damos clic en él. Seleccionamos el Data Source y podemos ver una pantalla de contrucción de Dashboard con uns parámetros para usar json.

Podrímo usar una url, que apunte a un json o API, pero en este caso usaremos como source la opción inline, esto con el fin de copiar un json.

Para el ejemplo, podríamos tener un json con el siguiente contenido:

json
[ 
  {"name": "Argentina", "code": "AR", "group": 1, "points": 10},
  {"name": "Australia", "code": "AU", "group": 6, "points": 0},
  {"name": "Brazil", "code": "BR", "group": 1, "points": 6},
  {"name": "Canada", "code": "CA", "group": 2, "points": 4},
  {"name": "China", "code": "CN", "group": 6, "points": 1},
  {"name": "Colombia", "code": "CO", "group": 1, "points": 9},
  {"name": "France", "code": "AT", "group": 4, "points": 7},
  {"name": "Germany", "code": "AT", "group": 4, "points": 5},
  {"name": "Mexico", "code": "MX", "group": 5, "points": 2},
  {"name": "Spain", "code": "ES", "group": 4, "points": 8},
  {"name": "United States", "code": "US", "group": 2, "points": 3}
]

Una vez copiamos nuestro json en la propiedad Data podemos visualizar los datos como una tabla. También podemos definir las columnas y atributos si se desea personalizar (por ejemplo: name y points), y quizás aplicar una gráfica de tipo Bar Chart (cuyas opciones se encuentra en la barra a la derecha). De este modo, podemos guardar el Dashboard y compartirlo o simplemente visualizarlo.

Loki para gestión de logs con Grafana

Loki es un sistema de agregación de logs desarrollado por Grafana Labs, diseñado para trabajar de forma nativa con Grafana. A diferencia de otras soluciones como Elasticsearch, Loki no indexa el contenido de los logs, sino solo las etiquetas (labels), lo que lo hace más eficiente y económico.

Características principales

  • Inspirado en Prometheus: Usa el mismo modelo de etiquetas
  • Eficiente: No indexa texto completo, solo metadatos
  • Integración nativa: Funciona perfectamente con Grafana
  • Escalable: Diseñado para manejar grandes volúmenes de logs

Instalación con Docker

Crea un archivo de configuración (loki.yml) con las siguientes sentencias:

bash
mkdir loki-config
cat > loki-config/loki.yml << EOF
auth_enabled: false

server:
  http_listen_port: 3100

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /loki/boltdb-shipper-active
    cache_location: /loki/boltdb-shipper-cache
    shared_store: filesystem
  filesystem:
    directory: /loki/chunks
EOF

Prepara el contendor para Loki ejecutando:

bash
docker run -d \
  --name loki \
  -p 3100:3100 \
  -v $PWD/loki-config:/etc/loki \
  -v loki-data:/loki \
  grafana/loki:latest \
  -config.file=/etc/loki/loki.yml

Promtail para recolección de logs

Promtail es el agente que envía logs a Loki. También requiere un archivo de configuración (promtail-config.yml) que puedes establecer con las siguientes sentencias:

bash
cat > promtail-config.yml << EOF
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*log
EOF

Prepara el contendor para Promtail ejecutando:

bash
docker run -d \
  --name promtail \
  -v $PWD/promtail-config.yml:/etc/promtail/config.yml \
  -v /var/log:/var/log:ro \
  grafana/promtail:latest \
  -config.file=/etc/promtail/config.yml

Configurar Loki en Grafana

  1. En Grafana, ir a Configuration > Data Sources
  2. Agregar Loki como fuente de datos
  3. URL: http://localhost:3100
  4. Guardar y probar la conexión

Consultas básicas en Loki

Loki usa LogQL, un lenguaje de consulta similar a PromQL. Aquí algunos ejemplos:

sql
{job="varlogs"}

{job="varlogs"} |= "error"

rate({job="varlogs"}[5m])

sum(rate({job="varlogs"} |= "error" [1m]))

Las sentencias de arriba coresponden a las siguientes funciones:

  1. Ver todos los logs de un job
  2. Filtrar por contenido
  3. Métricas de rate
  4. Contar errores por minuto

Ventajas de Loki

  • Costo-efectivo: Menor uso de almacenamiento que soluciones tradicionales
  • Fácil configuración: Integración simple con Grafana
  • LogQL: Lenguaje de consulta similar a PromQL
  • Etiquetas: Organización eficiente usando labels
  • Escalabilidad: Arquitectura distribuida opcional

Loki es ideal para equipos que ya usan Grafana y Prometheus, proporcionando una solución completa de observabilidad (métricas, logs y trazas) en un ecosistema unificado.