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
访问服务器

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 репозитории.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选