Grafana Loki
Un servidor para consultar registros de Loki desde Grafana.
GitHub
29
Prueba este MCPPatrocinadoDocumentación
Servidor MCP de Grafana-Loki
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 GrafanaGRAFANA_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
- Clona este repositorio
- 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 GrafanaGRAFANA_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 (stdioosse, 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 Lokistart: 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_lokiformat_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.