Отметим: когда логов больше 100 ГБ в день, grep и tail перестают работать. Мы сталкивались с проектами, где поиск ошибки занимал часы, а алерты настраивали вручную через cron. Однажды на проекте с 200 микросервисами мы потратили неделю на разбор инцидента, потому что логи были разбросаны по 50 хостам. Наш опыт настройки Graylog — это избавление от хаоса: централизованный сбор, быстрый поиск и гибкий алертинг под ключ. Мы не просто разворачиваем Graylog — мы настраиваем его под вашу инфраструктуру: от Docker Compose до production-кластера с OpenSearch и балансировкой. Гарантируем стабильную работу и сокращение MTTR в 3-5 раз. При правильной конфигурации стоимость хранения логов снижается на 30–50% за счёт эффективного retention и сжатия.
Проблемы, которые решаем
- Разрозненные логи — логи на сотнях серверов, собранные в кучу на одной файловой системе. Graylog агрегирует их в единое хранилище с поиском за секунды.
- Шум и алерты — бесполезные уведомления на каждый чих. Настраиваем streams и pipeline rules, чтобы алерты приходили только на реальные ошибки.
- Долгий поиск инцидентов — grep по логам из 50 ГБ занимает минуты. Graylog с OpenSearch отвечает миллисекундами.
Почему Graylog, а не ELK?
ELK — мощный стек, но требует отдельных настроек Logstash, Kibana и Elasticsearch. Graylog даёт тот же функционал, но с меньшим порогом входа: встроенный UI для парсинга, алертов и управления потоками.
| Критерий | Graylog | ELK |
|---|---|---|
| Встроенный алертинг | Да, с порога | Нужен ElastAlert или Watcher |
| Парсинг логов | Pipeline rules + Extractors в UI | Только Logstash отдельно |
| Формат данных | GELF — нативный, произвольные поля | JSON, но нужно настраивать mapping |
| Сложность развёртывания | Docker Compose за 1 час | Требуется больше компонентов |
По отзывам клиентов, после внедрения Graylog время анализа инцидентов сократилось с часов до минут, а нагрузка на команду снизилась вдвое.
Как мы это делаем
Развёртывание через Docker Compose
# docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:6.0
volumes:
- mongo-data:/data/db
restart: unless-stopped
opensearch:
image: opensearchproject/opensearch:2.11.0
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "action.auto_create_index=false"
- plugins.security.disabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- os-data:/usr/share/opensearch/data
restart: unless-stopped
graylog:
image: graylog/graylog:5.2
environment:
GRAYLOG_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
GRAYLOG_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2}
GRAYLOG_HTTP_EXTERNAL_URI: http://graylog.example.com:9000/
GRAYLOG_MONGODB_URI: mongodb://mongodb/graylog
GRAYLOG_ELASTICSEARCH_HOSTS: http://opensearch:9200
GRAYLOG_TIMEZONE: Europe/Kiev
depends_on:
- mongodb
- opensearch
ports:
- "9000:9000" # Web UI
- "1514:1514" # Syslog TCP
- "1514:1514/udp" # Syslog UDP
- "12201:12201" # GELF TCP
- "12201:12201/udp" # GELF UDP
- "5044:5044" # Beats
volumes:
- graylog-data:/usr/share/graylog/data
restart: unless-stopped
volumes:
mongo-data:
os-data:
graylog-data:Генерация GRAYLOG_ROOT_PASSWORD_SHA2: выполните echo -n "YourPassword" | sha256sum | cut -d" " -f1.
GELF: нативный формат Graylog
GELF (Graylog Extended Log Format) — JSON-формат, специально разработанный для Graylog. Преимущество перед syslog — поддерживает произвольные поля без парсинга:
{ "version": "1.1",
"host": "app-server-01",
"short_message": "Payment processing failed",
"timestamp": 1705312800.123,
"level": 3,
"_user_id": "u-12345",
"_order_id": "ord-987654",
"_payment_provider": "stripe",
"_error_code": "card_declined",
"_amount_cents": 4999 }Поля с _ префиксом — дополнительные. В Graylog они сразу доступны как отдельные поля для фильтрации и агрегации.
Как отправить логи в Graylog через GELF
Чтобы начать отправлять логи в Graylog:
- Настройте input типа GELF в Graylog (по умолчанию порт 12201 TCP/UDP).
- В вашем приложении подключите библиотеку GELF appender (например, для Java используйте logback-gelf).
- Добавьте статические поля (application, env, version) для удобной фильтрации.
Пример для Java (logback):
<!-- logback.xml -->
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
<graylogHost>graylog</graylogHost>
<graylogPort>12201</graylogPort>
<maxChunkSize>508</maxChunkSize>
<useCompression>true</useCompression>
<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<includeRawMessage>false</includeRawMessage>
<includeMarker>true</includeMarker>
<includeMdcData>true</includeMdcData>
<staticField>app_name:payment-service</staticField>
<staticField>env:production</staticField>
</encoder>
</appender>После этого все логи приложения будут автоматически отправляться в Graylog с нужными полями. Подробнее о настройке GELF см. официальную документацию.
Pipeline Rules: трансформация без Logstash
Graylog Processing Pipelines — это DSL для трансформации сообщений прямо внутри Graylog. Пример правила для обогащения HTTP-логов:
rule "parse_http_status"
when
has_field("http_status_code")
then
let status = to_long($message.http_status_code);
let category = if(status >= 500, "server_error", if(status >= 400, "client_error", if(status >= 300, "redirect", "success")));
set_field("status_category", category);
end Как настроить алертинг в Graylog?
Streams — механизм маршрутизации сообщений в Graylog. Stream с условием application_name:payment-service AND level:<=3 выделяет все ошибки платёжного сервиса в отдельный поток, к которому можно привязать alert condition и отдельный index set с другим retention.
Alert condition через API:
POST /api/streams/{stream_id}/alerts/conditions
{
"type": "message_count",
"title": "Too many errors",
"parameters": {
"time": 5,
"threshold_type": "MORE",
"threshold": 100,
"grace": 2,
"backlog": 10
}
} Процесс работы
| Этап | Длительность | Результат |
|---|---|---|
| Аудит текущей системы логирования | 1-2 дня | Отчёт с рекомендациями |
| Проектирование архитектуры | 1 день | Схема инстансов, streams, retention |
| Развёртывание Graylog | 1-2 дня | Рабочий кластер с OpenSearch |
| Настройка inputs, pipeline rules, streams | 1-2 дня | Приём логов, парсинг, маршрутизация |
| Настройка алертинга и дашбордов | 1 день | Уведомления по email/Slack, визуализация |
| Обучение команды и передача документации | 0.5 дня | Runbook, доступы, контакты |
Сроки ориентировочно
Полное развёртывание Graylog с настройкой Inputs, Pipeline Rules, Streams и алертинга — от 3 до 5 дней. Включает тестирование и передачу в эксплуатацию. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта.
Типичные ошибки при внедрении Graylog
- Забывают настроить rotation индексов — через неделю диск переполняется.
- Используют syslog для структурированных логов — теряют поля. Лучше GELF.
- Не настраивают pipeline rules — логи приходят как строки, искать по ним невозможно.
- Слишком частые алерты — истощают команду. Настройте грации и уровни критичности.
Что входит в работу
- Развёртывание Graylog (Docker Compose или кластер)
- Подключение inputs (syslog, GELF, Beats, JSON)
- Настройка pipeline rules для парсинга и обогащения
- Создание streams и алертинга
- Интеграция с вашими системами оповещения (email, Slack, Telegram)
- Документация и обучение
- Гарантия на конфигурацию 30 дней
Закажите настройку Graylog под ключ — оценим ваш проект за 1 день. Опыт 7+ лет, более 50 внедрений.







