Instalación de Loki

DockerBeginner
Practicar Ahora

Introducción

Grafana Loki es un sistema de agregación de logs (registros) altamente escalable horizontalmente, de alta disponibilidad y multi-tenant, inspirado en Prometheus. Está diseñado para ser muy rentable y fácil de operar. A diferencia de otros sistemas de logging, Loki no indexa el contenido de los logs, sino un conjunto de etiquetas (labels) para cada stream de logs.

En este laboratorio, realizará una instalación básica de Grafana Loki utilizando su imagen oficial de Docker. Aprenderá a crear un archivo de configuración mínimo y a lanzar el servicio Loki como un contenedor. Este es el primer paso fundamental para construir una pila de logging (stack de registro) completa con Loki.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Obtener la Imagen Docker de Loki

En este paso, descargará la imagen oficial de Grafana Loki desde Docker Hub. El comando docker pull obtiene una imagen o un repositorio desde un registro. Su entorno de laboratorio ya tiene Docker instalado y configurado.

Ejecute el siguiente comando en la terminal para descargar la imagen más reciente de Loki:

docker pull grafana/loki

Verá una salida que indica el progreso de la descarga. Docker descargará la imagen con la etiqueta latest por defecto.

Salida esperada (los números de versión pueden variar):

latest: Pulling from grafana/loki
a48641c1b8a9: Pull complete
...
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/loki
docker.io/grafana/loki

Crear el Archivo loki-config.yaml Básico

En este paso, creará un archivo de configuración mínimo para Loki. Este archivo, loki-config.yaml, le indica a Loki cómo ejecutarse, dónde almacenar los datos y qué esquema utilizar. Para este laboratorio, configuraremos Loki para que utilice el sistema de archivos local para el almacenamiento.

Usaremos el editor de texto nano para crear el archivo. Ejecute el siguiente comando para abrir un nuevo archivo llamado loki-config.yaml:

nano loki-config.yaml

Ahora, copie y pegue el siguiente contenido YAML en el editor nano:

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  ring:
    kvstore:
      store: inmemory

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: /tmp/loki/index
    cache_location: /tmp/loki/cache
  filesystem:
    directory: /tmp/loki/chunks

ruler:
  alertmanager_url: http://localhost:9093

limits_config:
  allow_structured_metadata: false

Esta configuración mantiene todo lo que Loki necesita bajo /tmp/loki dentro del contenedor, lo que evita problemas de permisos y mantiene la configuración fácil de entender. Deshabilita la autenticación, habilita un anillo en memoria (in-memory ring) para uso en un solo nodo, y almacena los bloques y los índices en el sistema de archivos local.

A continuación, se explica lo que hace cada sección del archivo:

  • auth_enabled: false: Desactiva la autenticación para que pueda comunicarse con Loki sin credenciales adicionales. Esto simplifica las pruebas locales; habilitaría la autenticación en producción.
  • server.http_listen_port: 3100: Indica a Loki que escuche las solicitudes HTTP en el puerto 3100. Cuando usa curl localhost:3100, está accediendo a este puerto.
  • common.path_prefix: Establece la carpeta base donde Loki almacena datos temporales dentro del contenedor. Cada otra ruta en este archivo se construye a partir de /tmp/loki para que todo permanezca en un solo lugar.
  • common.storage.filesystem: Indica a Loki dos carpetas para almacenar fragmentos (chunks) de datos de logs y archivos de reglas. Dado que no montamos nada especial en el contenedor, usar /tmp/loki evita dolores de cabeza con los permisos.
  • common.ring.kvstore.store: inmemory: Mantiene la información de membresía en memoria. Para un laboratorio de un solo nodo, esto es perfecto; un clúster real usaría un almacén compartido como Consul o etcd.
  • schema_config: Define cómo Loki debe organizar el índice para los datos de logs. Establecemos una fecha de inicio, elegimos el almacén boltdb-shipper y mantenemos el índice en el sistema de archivos. El prefix y el period controlan cómo se nombran los archivos y con qué frecuencia se crea un nuevo archivo de índice (cada 24 horas).
  • storage_config: Proporciona las carpetas exactas para el índice boltdb-shipper (active_index_directory y cache_location) y para el almacenamiento de fragmentos brutos. Todas las rutas nuevamente residen bajo /tmp/loki para mantener las cosas ordenadas.
  • ruler.alertmanager_url: Prepara el componente de reglas (ruler) de Loki para enviar alertas a un Alertmanager en http://localhost:9093. Nada fallará si Alertmanager no se está ejecutando; Loki simplemente registrará una advertencia cuando intente enviar una alerta.
  • limits_config.allow_structured_metadata: false: Deshabilita una característica avanzada para que Loki se adhiera a los metadatos de logs de texto plano más simples que esperan los principiantes.

Presione Ctrl+X para salir, luego Y para confirmar el guardado, y finalmente Enter para guardar el archivo con el nombre loki-config.yaml.

Ejecutar el Contenedor Loki en el Puerto 3100 con Configuración

Ahora que tiene la imagen de Loki y un archivo de configuración, ejecutará Loki como un contenedor Docker. Utilizará el comando docker run para iniciar el contenedor, montar su archivo de configuración y exponer el puerto necesario.

Ejecute el siguiente comando:

docker run -d --name loki -v $(pwd)/loki-config.yaml:/etc/loki/config.yml -p 3100:3100 grafana/loki -config.file=/etc/loki/config.yml

Analicemos este comando:

  • -d: Ejecuta el contenedor en modo detached (separado, en segundo plano).
  • --name loki: Asigna el nombre loki al contenedor para facilitar la referencia.
  • -v $(pwd)/loki-config.yaml:/etc/loki/config.yml: Monta su archivo local loki-config.yaml dentro del contenedor en /etc/loki/config.yml. Loki leerá su configuración desde este archivo.
  • -p 3100:3100: Mapea el puerto 3100 de la máquina anfitriona (host) al puerto 3100 dentro del contenedor, permitiéndole acceder a la API de Loki.
  • grafana/loki: La imagen a utilizar para el contenedor.
  • -config.file=/etc/loki/config.yml: Un argumento de línea de comandos pasado al proceso de Loki, indicándole dónde encontrar el archivo de configuración.

Después de ejecutar el comando, Docker imprimirá el ID único del contenedor recién creado.

e8a9f2b1c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0

Verificar el Endpoint de Listo (Ready) de Loki en localhost:3100/ready

En este paso, realizará una verificación de estado (health check) para confirmar que el servidor Loki se ha iniciado y está funcionando correctamente. Loki expone un endpoint HTTP /ready que se puede utilizar para este propósito. Una respuesta exitosa indica que el servidor está listo para recibir solicitudes.

Utilice el comando curl para enviar una solicitud a este endpoint. Dado que mapeamos el puerto 3100 en el paso anterior, puede acceder a él a través de localhost:3100.

curl http://localhost:3100/ready

Si Loki se ha iniciado correctamente, responderá con el texto ready y un código de estado HTTP 200 OK.

Salida esperada:

ready

Revisar los Logs de Loki para Confirmación de Inicio

Otra forma de verificar que Loki se inició correctamente es inspeccionando los logs de su contenedor. Esto es útil para depurar problemas de configuración u otros inconvenientes de inicio. El comando docker logs recupera los logs de un contenedor.

Utilice el siguiente comando para ver los logs de su contenedor loki:

docker logs loki

Debería ver una salida detallando el proceso de inicio. Busque una línea que confirme que el servidor está escuchando conexiones. Esto confirma que el servicio se inicializó sin errores críticos.

Fragmento de salida esperado (los detalles del log pueden variar):

level=info ts=... caller=server.go:299 http=[::]:3100 grpc=[::]:9096 msg="server listening on addresses"
level=info ts=... caller=loki.go:372 msg="Loki started"

Resumen

¡Felicidades! Ha completado con éxito este laboratorio (lab).

En este laboratorio, ha aprendido los pasos fundamentales para poner en funcionamiento una instancia de Grafana Loki. Usted ha:

  • Obtenido la imagen oficial de Loki de Docker Hub (Pulled the official Loki Docker image).
  • Creado un archivo básico loki-config.yaml para definir la configuración del servidor y del almacenamiento (storage).
  • Lanzado Loki en un contenedor Docker, montando la configuración y exponiendo el puerto de la API.
  • Verificado que la instancia de Loki se está ejecutando y está saludable utilizando su endpoint /ready y revisando los logs de su contenedor.

Esta configuración básica es el fundamento para construir una arquitectura de logging (registro de logs) más compleja y robusta. A partir de aquí, podría proceder a configurar un agente de envío de logs como Promtail para enviar logs a Loki y utilizar Grafana para consultarlos y visualizarlos.