Graylog MCP Server

Graylog MCP Server

Enables AI assistants to search and analyze logs in Graylog using three powerful tools: generic log search with Lucene queries, smart UUID/trace ID lookup across multiple fields, and stream-specific message retrieval with automatic field normalization.

Category
Visit Server

README

graylog-mcp

🔍 Model Context Protocol (MCP) сервер для интеграции Graylog с AI-ассистентами

Минималистичный MCP сервер, предоставляющий инструменты для поиска логов в Graylog через stdio протокол. Работает с Cursor, Claude Desktop и другими MCP-клиентами.

✨ Особенности

  • 🚀 Три мощных инструмента для поиска логов
  • 🔒 Поддержка Personal Access Token (PAT) аутентификации
  • 🌐 Работа с self-signed TLS сертификатами
  • 📦 Простая установка через npm/npx
  • 🎯 Автоматическая нормализация полей логов
  • 🔍 Умный поиск по UUID/trace ID/request ID

📋 Требования

  • Node.js >= 18
  • Graylog сервер с настроенным Personal Access Token

📦 Установка

Глобальная установка

npm i -g @alexbuzo/graylog-mcp

Использование через npx (рекомендуется)

Не требует установки - см. раздел "Настройка в Cursor"

🚀 Быстрый старт

Запуск вручную

graylog-mcp \
  --graylog-url https://graylog.example.com \
  --token YOUR_GRAYLOG_PAT \
  --ssl-verify=false

Параметры командной строки

Параметр Обязательный Описание По умолчанию
--graylog-url URL вашего Graylog сервера -
--token Personal Access Token -
--ssl-verify Проверка SSL сертификата true
--debug Режим отладки false

🔌 Настройка в Cursor

Настройки → MCP Servers → Add custom server

Вариант 1: Через npx (рекомендуется)

{
  "mcpServers": {
    "graylog": {
      "command": "npx",
      "args": [
        "-y",
        "@alexbuzo/graylog-mcp@latest",
        "--graylog-url", "https://graylog.example.com",
        "--token", "YOUR_GRAYLOG_PAT",
        "--ssl-verify", "false"
      ],
      "name": "Graylog Search"
    }
  }
}

Вариант 2: С переменными окружения (безопаснее)

{
  "mcpServers": {
    "graylog": {
      "command": "bash",
      "args": [
        "-lc",
        "npx -y @alexbuzo/graylog-mcp@latest --graylog-url \"$GRAYLOG_URL\" --token \"$GRAYLOG_TOKEN\" --ssl-verify=false"
      ],
      "env": {
        "GRAYLOG_URL": "https://graylog.example.com",
        "GRAYLOG_TOKEN": "YOUR_GRAYLOG_PAT"
      },
      "name": "Graylog (secure)"
    }
  }
}

Вариант 3: Глобальная установка

{
  "mcpServers": {
    "graylog": {
      "command": "graylog-mcp",
      "args": [
        "--graylog-url", "https://graylog.example.com",
        "--token", "YOUR_GRAYLOG_PAT",
        "--ssl-verify", "false"
      ],
      "name": "Graylog"
    }
  }
}

🛠 Доступные инструменты

1. graylog.search_logs

Поиск логов с использованием Lucene/GELF запросов.

Параметры:

  • query (string, обязательный): Lucene/GELF запрос
  • rangeSec (number, по умолчанию 3600): Временной диапазон в секундах
  • limit (number, опционально): Максимальное количество результатов (макс. 500)
  • offset (number, опционально): Смещение для пагинации
  • filter (string, опционально): Дополнительный фильтр (например, stream:<STREAM_ID>)

Пример запроса:

{
  query: "level:ERROR AND service:api",
  rangeSec: 3600,
  limit: 100,
  filter: "stream:507f1f77bcf86cd799439011"
}

2. graylog.search_uuid

Умный поиск по UUID, request ID, trace ID и другим идентификаторам. Автоматически проверяет множество распространенных полей.

Параметры:

  • uuid (string, обязательный): UUID или идентификатор для поиска
  • rangeSec (number, по умолчанию 86400): Временной диапазон в секундах (24 часа)
  • limit (number, опционально): Максимальное количество результатов (макс. 500)

Автоматически ищет в полях:

  • request_id, requestId, req_id
  • trace_id, traceId, trace.id
  • span_id, spanId, span.id
  • transaction_id, transactionId
  • correlation_id, correlationId
  • _id

Пример запроса:

{
  uuid: "550e8400-e29b-41d4-a716-446655440000",
  rangeSec: 86400,
  limit: 200
}

3. graylog.search_stream

Получение сообщений из конкретного потока (stream).

Параметры:

  • streamId (string, обязательный): ID потока в Graylog
  • rangeSec (number, по умолчанию 3600): Временной диапазон в секундах
  • limit (number, опционально): Максимальное количество результатов (макс. 500)

Пример запроса:

{
  streamId: "507f1f77bcf86cd799439011",
  rangeSec: 7200,
  limit: 150
}

📊 Формат ответа

Все инструменты возвращают нормализованный JSON со следующей структурой:

{
  "total": 42,
  "messages": [
    {
      "id": "message_id",
      "ts": "2024-01-15T10:30:00.000Z",
      "level": "ERROR",
      "source": "api-server-01",
      "container": "api-service",
      "message": "Database connection failed",
      "short_message": "DB error",
      "http_method": "POST",
      "url": "/api/users",
      "status": 500,
      "latency_ms": 1234,
      "trace_id": "abc123",
      "span_id": "def456",
      "request_id": "req-789",
      "tenant_id": "tenant-001",
      "client_ip": "192.168.1.1",
      "user_agent": "Mozilla/5.0...",
      "service": "user-api",
      "request": {...},
      "response": {...}
    }
  ]
}

Автоматическая нормализация полей

Сервер автоматически извлекает и нормализует следующие поля из различных форматов:

Поле Альтернативные имена
container container_name, kubernetes.container_name
http_method method, http_method, request_method
url path, request_path
status http_status, response_status
latency_ms duration_ms, response_time_ms
trace_id traceId, trace.id
span_id spanId, span.id
request_id req_id, requestId
client_ip remote_addr, ip
service service_name, app

💻 Локальная разработка

Установка зависимостей

npm install

Сборка проекта

npm run build

Запуск в режиме разработки

npm run dev -- --graylog-url https://graylog.example.com --token YOUR_PAT --ssl-verify=false

Тестирование собранной версии

node dist/cli.js --graylog-url https://graylog.example.com --token YOUR_PAT --ssl-verify=false --debug

🔧 Структура проекта

graylog-mcp/
├── src/
│   ├── cli.ts        # CLI интерфейс и точка входа
│   ├── server.ts     # MCP сервер и регистрация инструментов
│   └── graylog.ts    # API клиент для Graylog
├── dist/             # Скомпилированный код
├── package.json      # Метаданные и зависимости
└── tsconfig.json     # Конфигурация TypeScript

🔒 Безопасность

Personal Access Token (PAT)

  1. Создайте PAT в Graylog: System → Users → [Your User] → Edit → Create Token
  2. Токен должен иметь права на чтение целевых потоков
  3. Сервер автоматически пробует два формата авторизации:
    • token:YOUR_PAT
    • YOUR_PAT:token

SSL/TLS

  • Production: Используйте валидный CA сертификат и --ssl-verify=true
  • Development/Self-signed: Используйте --ssl-verify=false
  • Альтернатива: Установите NODE_EXTRA_CA_CERTS на путь к доверенному CA

Рекомендации

  • ✅ Используйте переменные окружения для токенов
  • ✅ Не коммитьте токены в git
  • ✅ Используйте минимально необходимые права для PAT
  • ✅ Регулярно ротируйте токены

🐛 Устранение неполадок

401/403 ошибки

  • Проверьте валидность PAT
  • Убедитесь, что у токена есть права на чтение потоков
  • Проверьте формат URL (должен включать протокол: https://)

TLS/SSL ошибки

# Опция 1: Отключить проверку (не для production!)
--ssl-verify=false

# Опция 2: Указать CA сертификат
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem

Нет результатов

  • Попробуйте простой запрос: query: "*"
  • Проверьте временной диапазон (увеличьте rangeSec)
  • Убедитесь, что в выбранных потоках есть данные
  • Проверьте синтаксис Lucene запроса

Debug режим

Запустите с флагом --debug для диагностики:

graylog-mcp --graylog-url ... --token ... --debug

🤝 Примеры использования

Пример 1: Поиск ошибок за последний час

// Инструмент: graylog.search_logs
{
  query: "level:ERROR",
  rangeSec: 3600
}

Пример 2: Поиск по trace ID

// Инструмент: graylog.search_uuid
{
  uuid: "abc-123-def-456",
  rangeSec: 86400
}

Пример 3: Получение логов конкретного сервиса

// Инструмент: graylog.search_logs
{
  query: "service:auth-api AND level:WARN",
  rangeSec: 7200,
  limit: 50
}

Пример 4: Поиск HTTP 5xx ошибок

// Инструмент: graylog.search_logs
{
  query: "status:[500 TO 599]",
  rangeSec: 3600
}

📝 Примечания

  • Сервер использует Graylog REST API через /api/search/universal/relative и /api/streams/{id}/messages
  • Максимальное количество результатов на запрос: 500
  • По умолчанию возвращается 150 записей
  • Поддерживается пагинация через параметры limit и offset
  • Все временные метки в UTC

🔗 Полезные ссылки

📄 Лицензия

MIT © Aliaksei Buzo

🙏 Вклад

Contributions приветствуются! Пожалуйста, создайте issue или pull request в GitHub репозитории.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured