Ollama - observabilidad con Prometheus y Grafana

Monitorizar la inferencia local: cuantas peticiones entran, cuanto tarda cada token, que uso de GPU y RAM hay y cuando el modelo deja de responder. Con Prometheus recogiendo y Grafana mostrando.

Configurar Prometheus y Grafana para monitorear un contenedor de Ollama te dará una visibilidad completa del rendimiento de tu LLM.

El proceso implica tres pasos principales:

  1. Recolectar las métricas (usando un Exporter).
  2. Configurar Prometheus para recolectar esas métricas.
  3. Configurar Grafana para visualizar esos datos.

Dado que Ollama es una aplicación que corre dentro de un contenedor, la forma más fácil de empezar es monitorear el nivel del sistema (CPU, RAM, GPU) del contenedor.

Aquí te detallo el proceso paso a paso:


Fase 1: Preparación del entorno

Asegúrate de que tienes los siguientes componentes corriendo:

  1. Ollama: El servicio LLM corriendo en un contenedor.
  2. Docker: Para gestionar el contenedor.
  3. Prometheus: El servidor de monitoreo.
  4. Grafana: La herramienta de visualización.

Fase 2: Recolección de métricas (el exporter)

Para que Prometheus pueda “ver” las métricas de Ollama, necesitas un mecanismo para exponerlas.

Opción A: Monitoreo del Sistema (la forma más fácil)

Utiliza las herramientas de Docker y los Exporters estándar de Prometheus.

  1. Instala el Exporter (Opcional, pero recomendado): Instala el node_exporter en tu host o en un contenedor aparte. Esto recopilará métricas del sistema operativo.
  2. Usa docker metrics: Prometheus puede interactuar directamente con el Docker Engine para obtener métricas básicas del contenedor, como el uso de CPU y memoria.
  3. (Avanzado) Usar Exporters específicos: Si usas GPU, puedes usar el dcgm-exporter o el nvidia-exporter para obtener métricas detalladas de la GPU que Ollama está utilizando.

Opción B: Monitoreo de la Aplicación (Métricas específicas de LLM)

Para obtener métricas de tokens por segundo o latencia, necesitas que Ollama exponga estos datos.

  1. Revisa la Documentación de Ollama: Consulta si Ollama tiene un endpoint de métricas (generalmente expuestas a través de la API) que incluya el throughput o la latencia de la inferencia.
  2. Crear un Exporter Personalizado (Si no hay un endpoint): Si Ollama no expone las métricas de tokens directamente, tendrías que escribir un pequeño script (en Python, por ejemplo) que llame a la API de Ollama periódicamente y luego exponga esos resultados en un formato que Prometheus pueda leer (formato PromQL).

Fase 3: Configuración de Prometheus

Una vez que tienes las métricas expuestas (ya sea del sistema o de la aplicación), debes configurar Prometheus para que las recoja.

  1. Configurar el prometheus.yml: Este archivo le dice a Prometheus dónde buscar las métricas. Necesitarás definir targets (objetivos) que apunten a la dirección donde están las métricas (por ejemplo, la dirección del node_exporter o un endpoint personalizado).
  2. Reiniciar Prometheus: Asegúrate de que Prometheus esté apuntando a tus fuentes de datos.

Fase 4: Configuración de Grafana

Grafana se conecta a Prometheus y usa las queries (consultas) para mostrar los datos de forma visual.

  1. Agregar la Fuente de Datos: En Grafana, añade Prometheus como una fuente de datos.
  2. Crear Paneles (Dashboards):
    • Crea un nuevo dashboard.
    • Añade panels (paneles) que utilicen consultas PromQL (el lenguaje de consulta de Prometheus).
    • Ejemplo de Paneles:
      • Uso de CPU del contenedor.
      • Uso de Memoria del contenedor.
      • Métricas de GPU (si aplica).
      • (Si lograste exponerlas) Tokens por segundo promedio.

Recomendación práctica para empezar

Para un inicio rápido y efectivo, te recomiendo enfocarte primero en el monitoreo del contenedor usando docker stats y luego pasar a la integración de Prometheus.

Flujo Básico Rápido:

  1. Docker (ejecutando Ollama).
  2. Prometheus (configurado para usar node_exporter o docker exporters).
  3. Grafana (conectado a Prometheus, mostrando el uso de CPU/RAM de Ollama).

Para métricas específicas de LLM (tokens/segundo): Esto requerirá que revises la documentación de Ollama o que implementes un exporter personalizado para capturar las llamadas a la API.