Налаштування 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/Kyiv
    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