Раздел 40 · Elasticsearch и ELK

Реальный пример: сбор логов веб-приложения

junior~20 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

У «Гонца» теперь есть политика хранения, шаблон и правила защиты. Осталось связать их в работающий маршрут. Представь почтовую доставку: адрес на конверте, сортировочный центр, ячейка хранения и каталог должны договориться об одном формате. Иначе каждое звено работает, а письмо теряется между ними.

Маршрут двух форматов

nginx access.log ─┐
                 ├→ Filebeat → Logstash → data streams → Kibana
app JSON.log ────┘
  1. Приложение пишет одну JSON-запись на событие, nginx свой access-формат.
  2. Filebeat читает оба файла, добавляет путь и имя хоста. В рабочем конфиге из урока 7 выход output.logstash идёт на порт 5044.
  3. Logstash принимает Beats, выбирает разбор по доверенной метке источника, правит время и удаляет секреты.
  4. Elasticsearch применяет заранее созданные templates с ILM.
  5. Kibana использует отдельные data views и общий обзор инцидента.

На production источники надёжнее различать полем, заданным агентом, а не первой буквой строки. В песочнице stdin приносит только строки, поэтому здесь учебное правило: JSON начинается с {, остальное проходит grok.

Исполни обработку и маршрутизацию

Первая строка превращается в событие приложения, вторая в nginx, healthz не доходит до выхода, сломанная строка сохраняет тег и безопасное сообщение. @metadata задаёт маршрут, но не попадает в документ Elasticsearch.

Виджет показывает события и stdout. Elasticsearch-output движка вычисляет целевой _index; graded-задача ниже проверяет документы выхода (esDocs). Это не сетевое подключение к указанному hostname и не общий сеанс с соседней консолью. В реальном deployment HTTP из этого локального примера заменяют HTTPS, CA и отдельным ограниченным ключом.

Почему здесь index, а не data_stream true

Имена logs-gonets.app-default и logs-nginx.access-default могут быть уже созданными data streams. В примере output использует data_stream: "false", action: "create" и явный index: это явная отправка create-операций в заранее подготовленный источник. ilm_enabled: "false" отключает управление alias-based ILM самим плагином, а не ILM, назначенную Elasticsearch-шаблоном. manage_template: "false" оставляет шаблоны администратору.

Другой рабочий вариант плагина: data_stream: "true" с data_stream_dataset, data_stream_namespace и ECS-совместимостью. Не смешивай такой режим с произвольным index и alias-based настройками: плагин проверяет совместимость конфигурации.

Хранение и поиск отдельным шагом

Эта консоль отдельно индексирует уже обработанное событие, не читает stdout предыдущего виджета. Мы проверяем границы честно: обработку в одном инструменте, маппинг и поиск в другом. На стенде после всей цепочки сравни исходное время, trace.id, тип duration и отсутствие секретов в _source.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.