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

15.07.20

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

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

Скачать файлы

Наименование Файл Версия Размер
Подсистема "Логирование":
.cf 64,29Kb
42
.cf 64,29Kb 42 Скачать

Проблемы 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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15729    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17545    6    15    

13

Интеграция с сервисом vetmanager

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

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16357    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25736    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС 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    88576    160    215    

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

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