Перенос всех логов в Elasticsearch

15.07.20

Интеграция - WEB-интеграция

В качестве стандартного места хранения логов в "1С:Предприятие" используется Журнал регистрации. Также часто для хранения служебных событий создают специальные Регистры сведений. Но у этих решений есть свои недостатки. В статье описан подход для хранения любых логов в самой популярной свободной поисковой системе Elasticsearch.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Подсистема "Логирование":
.cf 64,29Kb
50
50 Скачать (1 SM) Купить за 1 850 руб.

Проблемы 1С-ных подходов к логированию:

Журнал регистрации:

  • жёстко заданная структура
  • проблемы с производительность при чтении и записи большого количества данных (проблемы проявляются в той или иной степени в зависимости от выбранного формата ЖР)

Регистр сведений:

  • логи занимаю много места в базе
  • один неаккуратный запрос (например выборка за пару месяцев) может просадить производительность всей системы
  • данные нужно обслуживать - архивировать, удалять ненужные
  • реляционная база данных не предназначена для хранения логов

Файлы логов:

  • отсутствие стандартизации в формате хранения
  • ручной или полуручной анализ, обработка и обслуживание логов
  • проблемы параллельной записи в файл

Elasticsearch

Elasticsearch – это мощный поисковый движок, написанный на JAVA и позволяющий организовать эффективный поиск в базе данных. Для управления и работы с данными в системе используется REST API. Из коробки Elasticsearch предоставляет богатый функционал для загрузки данных из разных источников, обработки, анализа, репликации и масштабируемости системы.

Совместно с Elasticsearch поставляется система визуализации данных Kibana с веб интерфейсом.

Подробно на процессе установки останавливаться не будем. Перейдем сразу к интеграции с 1С.

Подсистема "Логирование"

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

Ниже описаны объекты подсистемы.

Справочники

  • “Серверы логирования” - определяет инстанс ElasticSearch
  • “Ноды эластик” - определяет настройки подключения к серверам, подчинён справочнику “Серверы логирования”
  • “Индексы логов” - определяет настройки и структуру хранения данных, подчинён справочнику “Серверы логирования”
  • “Политики жизненного цикла” - определяет настройки управления размещением и временем жизни данных, подчинён справочнику “Серверы логирования”

Константы

  • "Индекс журнала регистрации" - определяет индекс, используемый для выгрузки журнала регистрации

Регистры сведений

  • "Данные логов" - хранит записи событий в формате JSON, подготовленные для выгрузки
  • "Состояния индексов" - хранит данные о синхронизации с ElasticSearch
  • "Состояния нод" - хранит данные о состоянии нод

Регламентные задания

  • "Выгрузить лог в эластик" - выгружает и очищает записи регистра "Данные логов" за прошлые часы
  • "Выгрузить журнал регистрации в эластик" - выгружает данные журнала регистрации в индекс, заданный в константе "Индекс журнала регистрации"
  • "Обновить состояние нод" - определяет работоспособность нод

Обработки

  • "Просмотр логов" - предоставляет возможность просматривать выгруженные логи

Связь сущностей 1С и ElasticSearh

Инстанс ElasticSearch представляет из себя кластер рабочих серверов - нод. В простом случае в кластере может быть одна нода, но для работы встроенного механизма репликации и отработки отказа их должно быть минимум две. В сложных случаях ноды также делятся по ролям (Master, Data, Coordinator и т.д.).

Данные в ElasticSearh хранятся в индексах. Для удобства обслуживания индексы разбиваются на части:

  • по датам (дням, месяцам) при использовании ручного управления
  • по номерам в автоматическом режиме при использовании политик жизненного цикла (Index Lifecycle Policies)

Для запроса сразу по нескольким индексам Elasticsearch предоставляет псевдонимы индексов (Aliases). А для автоматического создания и настройки индекса поддерживает шаблоны индексов.

Для автоматического управления расположением индексов на дисках и сроком жизни в Elasticsearch используются политики жизненного цикла (Index Lifecycle Policies). В политике могут быть заданы ограничения по размеру индекса или по времени. После наступления ограничения индекс перемещается на следующую стадию. Всего определены четыре стадии:

  • hot - новые данные, активная запись, активное чтение
  • warm - данные в режиме read-only, активное чтение
  • cold - редкое чтение
  • delete - данные больше не нужны, удаление

Структура индексов ElasticSearch

Индексы в ElasticSearch состоят из осколков (Shards) и реплик (Replicas). Осколки представляют из себя основную структуру хранения данных и могут быть распределены по разным нодам. От количества осколков зависит скорость чтения и записи данных, а также занимаемое место на дисках. Реплики это копии осколков доступные только для чтения. Количество осколков и реплик задаётся при создании индекса или берётся из шаблона индекса.  

Для примера возьмём две ноды, индекс с пятью осколками и одной репликой.

Первая нода будет содержать три первичных осколка (1,2,3) и две реплики (4,5)

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4R |  | 5R |
|____|  |____|  |____|  |____|  |____|

 Вторая нода будет содержать два первичных осколка (4,5) и три реплики (1,2,3)

 ____    ____    ____    ____    ____
| 1R |  | 2R |  | 3R |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

В таком случае при отказе одной из нод данные останутся доступными.

Создание индексов в 1С

Для определения нового типа логов в 1С нужно создать элемент справочника "Индексы логов", заполнить наименование, сервер ElasticSearch, количество осколков, количество реплик и политику жизненного цикла.

При записи нового справочника в ElasticSearch создаётся шаблон с настройками и алиас для доступа к данным.

После этого индекс должен быть инициализирован с помощью выгрузки логов из 1С. При этом ElasticSearch сам подбирает необходимые типы свойств в зависимости от выгружаемых данных.

После инициализации есть возможность загрузить структуру индекса и определить способ отображения данных на стороне 1С.

Запись логов в 1С

Для временного хранения произошедших событий в 1C используется регистр сведений "Данные логов". Запись в регистр выполняется процедурой ЗаписатьЛог общего модуля ЛогированиеНаСервере.

// Регистрирует произошедшие в сисетме события
//
// Параметры:
//  Индекс			 - 	СправочникСсылка.ИндексыЛогов 
//  КоллекцияДанных	 - 	ТаблицаЗначений, Массив - Данные событий в произвольном формате
//
Процедура ЗаписатьЛог(Индекс, КоллекцияДанных) Экспорт

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

Подготовленные к обмену данные записываются с разделением по началу часа времени записи.

Выгрузка логов из 1С в ElasticSearch

Выгрузка логов выполняется регламентными заданиями:

  • "Выгрузить лог в эластик"
  • "Выгрузить журнал регистрации в эластик"

Для выгрузки данных в ElasticSearch используется API массовых операций.

POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "index" : { "_index" : "test", "_id" : "2" } }
{ "field1" : "value2" }

В случае успеха обновляется дата выгрузки в регистре сведений "Состояния индексов".

Просмотр логов в 1С

Для просмотра в 1С выгруженных данных используется обработка "Просмотр логов". На форме указывается индекс, количество запрашиваемых записей, отборы по полям и сортировка.

Для получения данных в ElasticSearch используется операторы Search API:

  • match_phrase - для полнотекстового поиска
  • range - для определения диапазона дат
POST journal/_doc/_search
{
  "from":0,
  "size":200,
  "query":
  {
    "bool":
    {
      "must":
      [
        {
          "range":
          {
            "Дата":
            {
              "gte":"2020-07-06T21:00:00Z",
              "lte":"2020-07-07T20:59:59Z"
            }
          }
        },
        {
          "match_phrase":
          {
            "ПредставлениеСобытия":"Транзакция. Начало"
          }
        },
        {
          "match_phrase":
          {
            "Транзакция":"08.07.2020 14:14:49 (77473)"
          }
        }
      ]
    }
  },
  "sort":
  {
    "Дата":
    {
      "order":"desc"
    }
  }
}

Заключение

Стек ELK представляет из себя мощный набор инструментов для эффективного решения широкого спектра задач сбора, хранения и анализа данных.

В статье дано поверхностное описание ElasticSearch и предоставлен вариант интеграции с 1С.

Во вложении доступна конфигурация с подсистемой "Логирование".  Тестировалась на платформе 8.3.13.1690.

Elasticsearch

См. также

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    1535    1    1    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18565    20    22    

18

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20710    13    19    

18

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    474    2    0    

5

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    92184    184    217    

337
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1327 15.07.20 13:58 Сейчас в теме
Минусы у этой схемы
Запускается через рег. задания которые могут зависать
Код доступен программисту/администратору базы.

Более продвинутый вариант с точки зрения системного администрирования https://infostart.ru/public/1073101/
2. kuleshov.x 101 15.07.20 14:41 Сейчас в теме
(1) Согласен, для выгрузки конкретно файлов логов (ТЖ, ЖР) такой вариант может быть предпочтительней, хотя у него тоже есть свои минусы. Описанная разработка больше ориентирована на выгрузку кастомных логов.
3. user612295_death4321 21.07.20 22:02 Сейчас в теме
Выгрузка ЖР происходит через ВыгрузитьЖурналРегистрации() или какие то хитрые механизмы ?
4. kuleshov.x 101 22.07.20 20:31 Сейчас в теме
(3) Да, через ВыгрузитьЖурналРегистрации()
5. bugagashenka 203 26.04.21 16:38 Сейчас в теме
(4) Тоже была попытка сделать выгрузку в MSSQL с помощью ВыгрузитьЖурналРегистрации(). Проблема в том, что большие порции выгружаются слишком долго и транспорт логов генерит паразитный траффик, причем больших объемов. Была даже попытка поминутной выгрузки в несколько потоков с загрузкой напрямую в MSSQL и мордой на 1С. Но, увы, скорости не шибко добавила. А, учитывая, что такие выгрузки могли покалечить хост, решили отказаться в пользу внешнего парсера + Elastic
Оставьте свое сообщение