Здравствуйте, коллеги.
Представьте ситуацию когда есть три лог-файла (три индекса) которые импортируются в ES с использованием LS. Каждый лог-файл пишет независимое приложение. Лог-файлы представляют запись всех входящих и исходящих запросов в/из данного приложения. При каждом запросе создается уникальный идентификатор, однозначно указывающий на транзакцию. Но этот идентификатор валиден только для приложений, взаимодействующих между собой: т.е. в логах 1 и 2, и в логах 2 и 3. ИДентификатор из приложения/лога 1 никогда не появится в приложении/логе 3. А вся транзакция проходит через все три приложения (но как вы уже поняли сквозного идентификатора нет).
Есть задача: показать все записи из всех логов по одной транзакции. Если перевести это на язык SQL-запроса то все сводиться к возможности использования конструкции INNER JOIN.
Я понимаю, что прямого аналога в ES нет и видел множество вопросов подобного рода на форуме... мой вопрос скорее риторический. Хочется понимать "смотрят" ли разработчики на такой функционал в следующих версиях и как люди решают подобные задачи сейчас? (понятно, что такую логику можно реализовать на клиентском приложении)
P.S. Вопрос возник после того как был проведен пилот с использованием ПО SPLUNK. Там такое мапирование есть
Судя по вашему описанию, все 3 лога можно связать как дочерние документы, если для лога 1 использовать идентификатор из приложения, как идентификатор записи; во втором логе в качестве идентификатора записи использовать идентификатор второго приложения, а в качестве родителя - идентификатор первого приложения; в 3 логе идентификатор второго приложения можно использовать и как идентификатор родителя так и идентификатор записи.
Я не до конца понял ваше предложение про связь через дочерние документы. Позвольте я приведу простой пример. Есть три лог-файла от трех разных программ:
лог приложения 1 10.03.2016 16:00:00 user=ivanov transaction1=101 info1=разная информация
лог приложения 2 10.03.2016 16:00:10 transaction2=101 id2=abc-200-xyz info2=другая информация
лог приложения 3 10.03.2016 16:00:20 id3=abc-200-xyz info3=совсем другая информация
Есть потребность осуществлять поиск по полю user Т.е. при поиске ivanov выводился текст другая информация и совсем другая информация из логов приложения 2 и 3 (поля info2 и info3 соответственно). Линковка этих строк может быть произведена по следующим полям: transaction1=transaction2 и id2=id3.
Можете уточнить, используя данный пример, какую технологию можно применить для облегчения поиска?
P.S. Все логи содержат большое кол-во различных строк. Не все строки лог-файла приложения 1 имеют "продолжение" в лог-файле приложения 2. А так же сам лог приложения 2 имеет записи которые никак не связаны с другими записями логов - т.е. сам по себе самодостаточен и не является лишь продолжением операций в приложении 1.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.