Раздел 40 · Elasticsearch и ELK

Data Views и index patterns

junior~15 мин

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

Новая версия payments пишет логи, Elasticsearch принимает документы, а Discover пуст. Дежурный собирается перезапустить Logstash. Но в Kibana выбран источник logs-nginx*: события платежей в него не входят. Это как искать посылку в каталоге писем. Посылка на складе есть, каталог смотрит не на ту полку.

Представление, а не копия

Data view

задаёт, где искать и по какому полю фильтровать время. Старое название index pattern встречается в инструкциях и означает предшественника data view. Не путай его с index_patterns в шаблоне Elasticsearch: тот настраивает будущие индексы, а data view выбирает источники для чтения.

У «Гонца» два data streams:

  • logs-gonets.app-default: JSON-события приложения;
  • logs-nginx.access-default: access-логи nginx.

Шаблон logs-* охватывает оба. Узкий logs-gonets.app-* оставляет приложение. Поле времени в обоих случаях @timestamp, тип date.

Создай view в настоящей Kibana

  1. В Discover открой меню источника и выбери Create a data view.
  2. Назови его Гонец · приложение и задай Index pattern logs-gonets.app-*.
  3. Выбери Timestamp field @timestamp и сохрани.
  4. Задай абсолютный интервал 30 июня 2026. Последние 15 минут сегодня не содержат учебных событий за июнь.

Создание требует прав Kibana Data View Management и права Elasticsearch view_index_metadata. Создать view не значит автоматически получить доступ к документам: права чтения проверяются отдельно.

Сравни две полки

Виджет ниже моделирует выбор источника и времени, но не сохраняет объекты Kibana и не создаёт runtime-поля. Источник задан свойством index.

Попробуй в нижнем виджете service.name : payments. Пустой результат здесь верен: payments не живёт в access-логе. Верни поиск 5xx и сравни время всплеска с верхним виджетом. Два разных источника рассказывают об одном инциденте.

Поле есть, но график не строится

Если один индекс хранит duration_ms числом, а другой строкой, широкий view столкнётся с конфликтом типов. Исправляют маппинг и данные, а не переименовывают колонку в Kibana. Новый view не чинит старые документы.

Runtime-поля

могут вычислять значение при чтении, например категорию ответа по HTTP-коду. Они помогают исследовать данные, но не заменяют согласованную схему для постоянных тяжёлых запросов. В нашей Discover runtime-вычислений нет.

Если событий не видно

Проверяй по порядку: имя источника, абсолютное время и пояс, поле времени и его тип, активный KQL и фильтры, права чтения. Лишь затем проверяй доставку. Поиск непосредственно в _search отличает проблему Kibana от отсутствия документа. В следующем уроке разберём ещё одну причину: старые данные уже удалены политикой хранения.

урок из курса

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

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