Provides tools for searching and retrieving logs from Graylog, including Lucene/GELF queries, UUID/trace ID searches, and stream-based log retrieval with automatic field normalization.
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
📦 Установка
Глобальная установка
Использование через npx (рекомендуется)
Не требует установки - см. раздел "Настройка в Cursor"
🚀 Быстрый старт
Запуск вручную
Параметры командной строки
Параметр | Обязательный | Описание | По умолчанию |
| ✅ | URL вашего Graylog сервера | - |
| ✅ | Personal Access Token | - |
| ❌ | Проверка SSL сертификата |
|
| ❌ | Режим отладки |
|
🔌 Настройка в Cursor
Настройки → MCP Servers → Add custom server
Вариант 1: Через npx (рекомендуется)
Вариант 2: С переменными окружения (безопаснее)
Вариант 3: Глобальная установка
🛠 Доступные инструменты
1. graylog.search_logs
Поиск логов с использованием Lucene/GELF запросов.
Параметры:
query(string, обязательный): Lucene/GELF запросrangeSec(number, по умолчанию 3600): Временной диапазон в секундахlimit(number, опционально): Максимальное количество результатов (макс. 500)offset(number, опционально): Смещение для пагинацииfilter(string, опционально): Дополнительный фильтр (например,stream:<STREAM_ID>)
Пример запроса:
2. graylog.search_uuid
Умный поиск по UUID, request ID, trace ID и другим идентификаторам. Автоматически проверяет множество распространенных полей.
Параметры:
uuid(string, обязательный): UUID или идентификатор для поискаrangeSec(number, по умолчанию 86400): Временной диапазон в секундах (24 часа)limit(number, опционально): Максимальное количество результатов (макс. 500)
Автоматически ищет в полях:
request_id,requestId,req_idtrace_id,traceId,trace.idspan_id,spanId,span.idtransaction_id,transactionIdcorrelation_id,correlationId_id
Пример запроса:
3. graylog.search_stream
Получение сообщений из конкретного потока (stream).
Параметры:
streamId(string, обязательный): ID потока в GraylograngeSec(number, по умолчанию 3600): Временной диапазон в секундахlimit(number, опционально): Максимальное количество результатов (макс. 500)
Пример запроса:
📊 Формат ответа
Все инструменты возвращают нормализованный JSON со следующей структурой:
Автоматическая нормализация полей
Сервер автоматически извлекает и нормализует следующие поля из различных форматов:
Поле | Альтернативные имена |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
💻 Локальная разработка
Установка зависимостей
Сборка проекта
Запуск в режиме разработки
Тестирование собранной версии
🔧 Структура проекта
🔒 Безопасность
Personal Access Token (PAT)
Создайте PAT в Graylog: System → Users → [Your User] → Edit → Create Token
Токен должен иметь права на чтение целевых потоков
Сервер автоматически пробует два формата авторизации:
token:YOUR_PATYOUR_PAT:token
SSL/TLS
Production: Используйте валидный CA сертификат и
--ssl-verify=trueDevelopment/Self-signed: Используйте
--ssl-verify=falseАльтернатива: Установите
NODE_EXTRA_CA_CERTSна путь к доверенному CA
Рекомендации
✅ Используйте переменные окружения для токенов
✅ Не коммитьте токены в git
✅ Используйте минимально необходимые права для PAT
✅ Регулярно ротируйте токены
🐛 Устранение неполадок
401/403 ошибки
Проверьте валидность PAT
Убедитесь, что у токена есть права на чтение потоков
Проверьте формат URL (должен включать протокол:
https://)
TLS/SSL ошибки
Нет результатов
Попробуйте простой запрос:
query: "*"Проверьте временной диапазон (увеличьте
rangeSec)Убедитесь, что в выбранных потоках есть данные
Проверьте синтаксис Lucene запроса
Debug режим
Запустите с флагом --debug для диагностики:
🤝 Примеры использования
Пример 1: Поиск ошибок за последний час
Пример 2: Поиск по trace ID
Пример 3: Получение логов конкретного сервиса
Пример 4: Поиск HTTP 5xx ошибок
📝 Примечания
Сервер использует Graylog REST API через
/api/search/universal/relativeи/api/streams/{id}/messagesМаксимальное количество результатов на запрос: 500
По умолчанию возвращается 150 записей
Поддерживается пагинация через параметры
limitиoffsetВсе временные метки в UTC
🔗 Полезные ссылки
📄 Лицензия
MIT © Aliaksei Buzo
🙏 Вклад
Contributions приветствуются! Пожалуйста, создайте issue или pull request в GitHub репозитории.