Как настроить индексацию логов веб-сервера (например, Nginx) для мониторинга?

Ответ

Для эффективной индексации и анализа логов веб-сервера я использовал стек **EFK (Elasticsearch, Fluentd/Fluent Bit, Kibana)** или его вариацию **ELK (с Logstash)**. Вот типичный pipeline для Nginx. **Архитектура:** `Nginx Access/Error Logs` → `Fluent Bit (агент)` → `Kafka (буфер, опционально)` → `Fluentd (агрегатор)` → `Elasticsearch` → `Kibana (визуализация)`. **1. Конфигурация Fluent Bit для сбора логов (устанавливается на каждой ноде с Nginx):** ```ini # /etc/fluent-bit/fluent-bit.conf [SERVICE] Parsers_File /etc/fluent-bit/parsers.conf [INPUT] Name tail Path /var/log/nginx/access.log Parser nginx Tag nginx.access Mem_Buf_Limit 5MB [OUTPUT] Name forward Match * Host fluentd-aggregator.example.com Port 24224 ``` **2. Парсер для формата Nginx (parsers.conf):** ```ini [PARSER] Name nginx Format regex Regex ^(?[^ ]*) (?[^ ]*) (?[^ ]*) [(?

Ответ 18+ 🔞

Да ты посмотри, что люди придумывают, ёпта! Вот сидишь ты с этими логами от Nginx, а они, сука, как вода из дырявого ведра — льются и льются. И как в этом всём разобраться? Ну, есть же нормальные, рабочие способы, не то что эти кустарные скрипты на коленке. Слушай сюда, я тебе сейчас популярно объясню, как это обычно крутят. Берут стек **EFK (Elasticsearch, Fluentd/Fluent Bit, Kibana)** или его брата-близнеца **ELK (там вместо Fluentd — Logstash)**. Схема, в принципе, простая, но овердохуища надёжная. **Вот как это всё обычно едет:** `Логи Nginx (доступ и ошибки)` → `Fluent Bit (он как агент-сборщик)` → `Kafka (это буфер, на всякий пожарный, можно и без него)` → `Fluentd (главный агрегатор, всё собирает в кучу)` → `Elasticsearch (тут всё хранится)` → `Kibana (тут ты это всё разглядываешь красиво)`. **1. Настраиваем Fluent Bit, чтобы он на каждой машине с Nginx за логами следил.** Конфиг примерно такой, чувак: ```ini # /etc/fluent-bit/fluent-bit.conf [SERVICE] Parsers_File /etc/fluent-bit/parsers.conf [INPUT] Name tail Path /var/log/nginx/access.log Parser nginx Tag nginx.access Mem_Buf_Limit 5MB [OUTPUT] Name forward Match * Host fluentd-aggregator.example.com Port 24224 ``` **2. А без парсера — нихуя не получится. Он строки в структуру разбирает.** Вот тебе пример для стандартного формата Nginx: ```ini [PARSER] Name nginx Format regex Regex ^(?[^ ]*) (?[^ ]*) (?[^ ]*) [(?