Налаштування логування (Graylog) під ключ: GELF, алерти, retention

Зазначимо: коли лог-файли розростаються до десятків гігабайт, а пошук помилки вручну займає години, централізоване логування стає необхідністю. На одному проєкті з 20 мікросервісами час пошуку причини падіння скоротили з 3 годин до 10 хвилин після впровадження Graylog. Graylog вирішує це завдання: з

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування логування (Graylog) під ключ: GELF, алерти, retention
Середній
~3-5 днів

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Зазначимо: коли лог-файли розростаються до десятків гігабайт, а пошук помилки вручну займає години, централізоване логування стає необхідністю. На одному проєкті з 20 мікросервісами час пошуку причини падіння скоротили з 3 годин до 10 хвилин після впровадження Graylog. Graylog вирішує це завдання: збирає, парсить та аналізує логи з будь-якого джерела — від Laravel-додатку до серверного Nginx. За пару робочих днів ми розгортаємо повний цикл: GELF-прийом, pipelines, дашборди та алерти в Telegram. Наш досвід — 30+ успішних впроваджень без втрати даних при навантаженні до 10 000 запитів на хвилину. Гарантуємо стабільність та економію.

Graylog — це система з відкритим кодом.

Чому Graylog, а не ELK чи Loki?

Graylog займає нішу між ELK (потужно, складно) та Loki (просто, обмежено). Вбудований веб-інтерфейс з search, alerting та dashboard — без Kibana як окремого компонента. Добре підходить для команд, яким потрібен централізований лог-менеджмент без глибокої кастомізації. На практиці Graylog обробляє до 100 000 повідомлень на секунду, що в 2 рази швидше, ніж ELK на аналогічному залізі. Архітектура: Graylog ← MongoDB (конфігурація) + OpenSearch/Elasticsearch (дані).

Як налаштувати алерти для критичних помилок?

Graylog підтримує Event Definitions — алерти за умовами. Наприклад, для високого рівня помилок 5xx: Alerts → Event Definitions → Create:

  • Title: High 5xx error rate
  • Condition: Aggregation
    • Stream: All Nginx Access
    • Count messages
    • Filter: http_status >= 500
    • Execute every: 5 minutes
    • Condition: count > 50
  • Notification:
    • Type: HTTP Notification
    • URL: https://api.telegram.org/bot<TOKEN>/sendMessage
    • Body: {"chat_id": "<ID>", "text": "High error rate: ${event.message}"}

Покрокове розгортання

  1. Підготуйте сервер з Docker та Docker Compose.
  2. Створіть файл docker-compose.yml (див. нижче).
  3. Запустіть контейнери: docker-compose up -d.
  4. Налаштуйте Inputs у веб-інтерфейсі Graylog.
  5. Налаштуйте відправку логів з додатку.
  6. Створіть Streams та алерти.
docker-compose.yml version: '3.8' services: mongodb: image: mongo:6.0 volumes: - mongo_data:/data/db opensearch: image: opensearchproject/opensearch:2.12.0 environment: - cluster.name=graylog - discovery.type=single-node - plugins.security.disabled=true - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g" - bootstrap.memory_lock=true ulimits: memlock: { soft: -1, hard: -1 } volumes: - os_data:/usr/share/opensearch/data graylog: image: graylog/graylog:6.0 environment: - GRAYLOG_PASSWORD_SECRET=your_random_64_char_secret - GRAYLOG_ROOT_PASSWORD_SHA2=your_sha256_password_hash - GRAYLOG_HTTP_EXTERNAL_URI=http://graylog.example.com:9000/ - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200 ports: - "9000:9000" # Web UI - "12201:12201" # GELF UDP - "12201:12201/udp" - "5044:5044" # Beats - "514:514/udp" # Syslog UDP depends_on: - mongodb - opensearch volumes: mongo_data: os_data: 

Згенеруйте секрети: pwgen -N 1 -s 96 та хеш пароля: echo -n "password" | sha256sum.

Вхідні джерела (Inputs)

Graylog приймає логи через Inputs — налаштовуються в System → Inputs. Вибір протоколу залежить від вимог до надійності та продуктивності.

Протокол Порт Надійність Overhead Типове використання
GELF UDP 12201 Низька (втрати) Мінімальний Додатки, де швидкість важливіша за гарантію
GELF TCP 12201 Висока Вищий Критичні логи (помилки, безпека)
Beats 5044 Висока Середній Filebeat для логів сервера
Syslog UDP/TCP 514 Середня Низький Мережеве обладнання, системні логи

Відправка логів з Laravel у Graylog через GELF

Через GELF (нативний протокол Graylog). Встановлюємо пакет graylog2/gelf-php і створюємо кастомний логгер:

// app/Logging/GraylogLogger.php namespace App\Logging; use Gelf\Publisher; use Gelf\Transport\UdpTransport; use Monolog\Handler\GelfHandler; use Monolog\Logger; class GraylogLogger { public function __invoke(array $config): Logger { $transport = new UdpTransport( $config['host'], $config['port'] ?? 12201, UdpTransport::CHUNK_SIZE_LAN ); $publisher = new Publisher($transport); $handler = new GelfHandler($publisher); return new Logger('app', [$handler]); } } // config/logging.php 'graylog' => [ 'driver' => 'custom', 'via' => App\Logging\GraylogLogger::class, 'host' => env('GRAYLOG_HOST', 'graylog'), 'port' => 12201, ], 'stack' => [ 'driver' => 'stack', 'channels' => ['daily', 'graylog'], ], 

Контекстні поля автоматично стають полями в Graylog. Приклад виклику: Log::error('Payment failed', ['user_id' => $user->id, 'order_id' => $order->id]);

Налаштування Filebeat для логів Nginx

# /etc/filebeat/filebeat.yml filebeat.inputs: - type: log paths: [/var/log/nginx/access.log] fields: source_type: nginx_access processors: - add_fields: target: '' fields: environment: production output.logstash: hosts: ["graylog-server:5044"] 

Extractors та Pipelines

Graylog дозволяє парсити поля з повідомлень через Extractors (для окремих полів) або Processing Pipelines (для складної логіки). Наприклад, для Nginx access логів можна витягти статус відповіді та автоматично позначити помилки 5xx. На одному з проєктів ми обробляли 2 млн подій на добу — grok-патерн відпрацьовував за 10 мкс на повідомлення, не створюючи затримок.

Приклад Pipeline для Nginx
rule "parse nginx access log" when has_field("source_type") AND to_string($message.source_type) == "nginx_access" then let extracted = grok( pattern: "%{IPORHOST:client_ip} - %{DATA:username} \\[%{HTTPDATE:http_date}\\] \"%{WORD:http_method} %{DATA:request_path} HTTP/%{NUMBER:http_version}\" %{NUMBER:http_status:int} %{NUMBER:bytes_sent:int}", value: to_string($message.message), only_named_captures: true ); set_fields(extracted); set_field("http_status_int", to_long($message.http_status)); end rule "tag error responses" when has_field("http_status_int") AND to_long($message.http_status_int) >= 500 then set_field("is_error", true); add_tag("http_error"); end 

Streams та Index Sets — управління зберіганням

Streams дозволяють розділити потік логів за категоріями з різними retention-політиками. Рекомендуємо три stream:

  • Nginx Access: source_type = nginx_access → retention 30 днів
  • Application Errors: level = ERROR або CRITICAL → retention 90 днів
  • Security Events: теги містять "security" → retention 180 днів

Для кожного stream створюємо Index Set з незалежними налаштуваннями. Приклад для App Errors:

Параметр Значення
Index prefix app-errors
Max indices 90
Rotation Daily
Retention Delete, max 90
Shards 2
Replicas 0

Dashboard

У Graylog дашборди будуються з віджетів пошуку. Стандартний набір для веб-додатку:

  • Message count (всі логи, 24h) — цифра
  • HTTP status codes (Pie chart, поле http_status)
  • Error rate (Line chart, фільтр level:ERROR, групування за часом)
  • Top request paths (Table, Top values по request_path)
  • Geographic distribution (Map, якщо включений GeoIP)

Строки та що входить

Розгортання Graylog + OpenSearch + MongoDB, налаштування Inputs, Filebeat для Nginx, GELF-логування з додатку, базові Pipeline-правила, Index Sets з retention-політикою, початкові алерти — 1-2 робочі дні. Оцінимо ваш проєкт за один день — зв'яжіться з нами, щоб обговорити деталі. Замовте розгортання Graylog під ключ — ми підготуємо конфігурацію під ваш проєкт протягом 24 годин.