Grafana Loki

Un servidor para consultar registros de Loki desde Grafana.

Documentación

Servidor MCP de Grafana-Loki

Test PyPI version codecov License: MIT

Un servidor FastMCP que permite consultar registros de Loki desde Grafana.

Configuración del Servidor MCP

{
  "mcpServers": {
    "loki": {
      "command": "uvx",
      "args": [
        "grafana-loki-mcp",
        "-u",
        "GRAFANA_URL",
        "-k",
        "GRAFANA_API_KEY"
      ]
    }
  }
}
  • GRAFANA_URL: URL de tu instancia de Grafana
  • GRAFANA_API_KEY: Clave API de Grafana con los permisos adecuados

Características

  • Consulta registros de Loki a través de la API de Grafana
  • Obtén etiquetas y valores de etiquetas de Loki
  • Formatea los resultados de las consultas en diferentes formatos (texto, JSON, markdown)
  • Soporte para protocolos de transporte stdio y SSE

Requisitos

  • Python 3.10+
  • FastMCP
  • Requests

Instalación

Usando pip

pip install grafana-loki-mcp

Configuración de Desarrollo

  1. Clona este repositorio
  2. Instala las dependencias usando uv:
# Install uv
pip install uv

# Create and activate virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
uv pip install -e ".[dev]"

Uso

Variables de Entorno

Configura las siguientes variables de entorno:

  • GRAFANA_URL: URL de tu instancia de Grafana
  • GRAFANA_API_KEY: Clave API de Grafana con los permisos adecuados

Argumentos de Línea de Comandos

También puedes proporcionar estos valores como argumentos de línea de comandos:

grafana-loki-mcp -u https://your-grafana-instance.com -k your-api-key

Opciones adicionales:

  • --transport: Protocolo de transporte a utilizar (stdio o sse, predeterminado: stdio)

Ejecutando el Servidor

# Using environment variables
export GRAFANA_URL=https://your-grafana-instance.com
export GRAFANA_API_KEY=your-api-key
grafana-loki-mcp

# Using command line arguments
grafana-loki-mcp -u https://your-grafana-instance.com -k your-api-key

# Using SSE transport
grafana-loki-mcp --transport sse

Desarrollo

Pruebas

Ejecuta el conjunto de pruebas:

pytest

Ejecuta con cobertura:

pytest --cov=. --cov-report=term

Linting y Formateo

# Run ruff linter
ruff check .

# Run black formatter
black .

# Run type checking
mypy .

Herramientas Disponibles

query_loki

Consulta registros de Loki a través de Grafana.

Parámetros:

  • query: Cadena de consulta de Loki
  • start: Hora de inicio (formato ISO, marca de tiempo Unix o tiempo relativo estilo Grafana como 'now-1h', predeterminado: hace 1 hora)
  • end: Hora de fin (formato ISO, marca de tiempo Unix o tiempo relativo estilo Grafana como 'now', predeterminado: ahora)
  • limit: Número máximo de líneas de registro a devolver (predeterminado: 100)
  • direction: Dirección de la consulta ('forward' o 'backward', predeterminado: 'backward')
  • max_per_line: Caracteres máximos por línea de registro (0 para ilimitado, predeterminado: 100)

get_loki_labels

Obtén todos los nombres de etiquetas de Loki.

get_loki_label_values

Obtén valores para una etiqueta específica de Loki.

Parámetros:

  • label: Nombre de la etiqueta

format_loki_results

Formatea los resultados de consultas de Loki en un formato más legible.

Parámetros:

  • results: Resultados de consulta de Loki de query_loki
  • format_type: Formato de salida ('text', 'json' o 'markdown', predeterminado: 'text')
  • max_per_line: Caracteres máximos por línea de registro (0 para ilimitado, predeterminado: 0)

Ejemplo de Uso

# Example client code
from mcp.client import Client

async with Client() as client:
    # Query Loki logs with max_per_line limit
    results = await client.call_tool(
        "query_loki",
        {
            "query": '{app="my-app"} |= "error"',
            "limit": 50,
            "max_per_line": 100,  # Limit log lines to 100 characters
            "start": "now-6h",    # Grafana-style relative time: 6 hours ago
            "end": "now"          # Current time
        }
    )

    # Format the results
    formatted = await client.call_tool(
        "format_loki_results",
        {
            "results": results,
            "format_type": "markdown",
            "max_per_line": 100  # Can also limit at formatting time
        }
    )

    print(formatted)

Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.