Зауважимо: коли логів більше 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:
- Налаштуйте 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 впроваджень.







