Простейшее использование Elasticsearch для работы с журналом регистрации

Простейшая настройка выгрузки журнала регистрации в Elasticsearch для ускорения поиска.

Работа была сделана для устранения проблем долгого поиска информации "кто виноват" и т.п., в базах РИБ по журналам регистрации. Все наработки находятся в git: https://github.com/smilut/uploadRegJornal2Elastic.git

Разработка и тестирование велись на платформе 8.3.13.1513. Функционал запуска по расписанию тестировался в конфигурации Бухгалтерия предприятия 3.0.70.50.

Первоначально хотелось использовать filebeat, но после некоторых попыток прямого обращения к файлам журнала регистрации, показалось более простым реализовать "filebeat" в виде обработки с запуском по регламентному заданию. Данные от обработки принимаются в logstah и после небольшой трансформации помещаются в индекс Elasticsearch.

Описание файлов git:

ОбработкаВыгрузкиЖРсЗапускомПоРасписанию.epf — обработка, которая загружается как дополнительная обработка и запускается по расписанию (функционал БСП). В этой обработке указываются параметры подключения к logstash для выгрузки данных и параметры подключения к Elastic для выполнения запросов. Обработка выполнения запросов еще в вяло текущей разработке, т.к. ее наличие не критично для поиска данных. Скорее обработка формирования запросов необходима пользователям, которые не хотят менять привычный интерфейс 1С на что-то другое. Добавляет к данным журнала регистрации реквизит с указанием строки подключения к базе, из которой выгружается журнал регистрации.

export.json — настроенные в нашей системе дашборды и сопутствующие объекты.

oncjornallog_template.json — образец запроса создания шаблона для индекса журнала. В шаблон добавлен анализатор, который разбивает содержимое некоторых полей на лексемы, что позволяет искать данные по не полностью набранному слову. С настройками по-умолчанию такого поведения добиться не удалось.

oneclog.conf — файл конфигурации logstash, при условии что сервис принимает данные только от 1С, если надо завести данные от нескольких систем настройка немного усложняется. В своих настройках мы разделяли обработку данных используя ключ "tag".

 

 oneclog.conf для приема данных с нескольких источников

Обработка выгрузки журнала построена на том же принципе, что и filebeat, с небольшим ограничением или усовершенствованием. При запуске запуске можно указать нижнюю границу загрузки, которая будет смещаться при каждой успешной передаче данных в Elastik. Если дата начала выгрузки не указана, то отступаем на три месяца от текущей даты.

 

 Код работы с периодом выгрузки журнала регистрации

Конечно же существует возможность задвоения переданных данных, например процесс передал порцию данных и упал до обработки ответа (выключение питания, перезагрузка и т.д.). В этом случае граница чтения данных не сдвинется и данные будут переданы повторно, но в данном случае это не критично. Elastic позиционируется, как система быстрого поиска и если в результате поиска будут найдены две абсолютно идентичные записи в логах это не исказит описанного в них события. Filebeat, насколько смог понять документацию, ведет себя также. В своих "недрах" он сохраняет указатель до какого момента вычитан файл лога, что бы в случае сбоя начать с этой позиции. Просто за счет скорости опроса у filebeat  (по-умолчанию, кажется 30ms) порция передаваемых данных, как правило очень маленькая и задвоение маловероятно. Необходимая периодичность выгрузки в 1С зависит от интенсивности работы пользователей, обменов, регламентных заданий и т.п. В тестовых системах устанавливали по 2 минуты.

 

 Код выгрузки данных журнала регистрации в Elastic

Если кому-то лень качать с git прикладываю архив файлов в текущем состоянии разработки.

Буду рад замечаниям, критике указаниям на ошибки и вопросам, даже если не смогу на них ответить ).

 

 

7 Comments

  1. goleaff2006

    она выгружает за период? Как определяет что уже выгружала а что нет?

    Reply
  2. milut

    В настройках сохраняется граница выгруженных данных. С этого момента начинается следующая выгрузка.

    Reply
  3. milut

    (1) Спасибо. Дописал ответ в статью.

    Reply
  4. malikov_pro

    Зачем logstash, если подготовку данных можно сделать на уровне выгрузки?

    Reply
  5. milut

    (4) Использовали elastic community, в котором есть ограничения настройки прав доступа. Поэтому прямой доступ не открывали. Никаких особенных причин для использования logstash не было.

    Reply
  6. malikov_pro

    Дату последней записи в El можно получить

    {
    «size»: 1,
    «sort»: { «Дата»: «desc»},
    «query»: {
    «term»: {
    «ConnectionString»: «FILE=»E:\1C\BASE\DEMOTRD»;»
    }
    }
    }
    

    Показать

    Для корректного поиска нужен маппинг

    «ConnectionString»: {
    «type»: «keyword»,
    «fields»: {
    «keyword»: {
    «type»: «keyword»,
    «ignore_above»: 256
    }
    }
    },
    

    Показать

    И проверку с ЖР сделать

    Если СоответствиеДанныеИндекса.Количество() = 0 Тогда
    ЭтоНачалоДанных = Истина;
    ИначеЕсли СоответствиеДанныеИндекса.Получить(«Дата») <> Стр_ЖР.Дата Тогда
    ЭтоНачалоДанных = Истина;
    ИначеЕсли
    СоответствиеДанныеИндекса.Получить(«Событие») = Стр_ЖР.Событие
    И СоответствиеДанныеИндекса.Получить(«Сеанс») = Стр_ЖР.Сеанс
    И СоответствиеДанныеИндекса.Получить(«ПредставлениеДанных») = Стр_ЖР.ПредставлениеДанных
    Тогда
    
    ЭтоНачалоДанных = Истина;
    ТочноеСовпадение = Истина;
    КонецЕсли;
    

    Показать

    ELK узлы спокойно прикрываются BasicAuth от NGINX + HTTPS

    Reply
  7. milut

    (6) наверняка можно и так. Мы смотрели в сторону nginx, но как ограничить доступ только передачей данных не нашли. Всегда оставался доступ к api. А крайнюю дату определял на стороне 1С только по субъективным причинам, тем способом который показался наиболее подходящим.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *