Настройка Graylog под ключ: централизованный сбор, алертинг, GELF

Когда логи разбросаны по сотням серверов, поиск ошибки превращается в часы ручного труда, а алерты тонут в шуме. Мы настраиваем Graylog под ключ — от развертывания до настройки pipeline rules и алертинга, чтобы вы получали единую точку сбора и быстрый поиск по всем событиям. Наша команда берет на себя весь цикл работ и обеспечивает стабильную работу системы с последующей поддержкой.
Часто задаваемые вопросы

Отметим: когда логов больше 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:

  1. Настройте input типа GELF в Graylog (по умолчанию порт 12201 TCP/UDP).
  2. В вашем приложении подключите библиотеку GELF appender (например, для Java используйте logback-gelf).
  3. Добавьте статические поля (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 внедрений.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139