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

15.07.20

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Подсистема "Логирование":
.cf 64,29Kb
46
46 Скачать (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С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    17780    19    22    

16

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

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

5040 руб.

04.05.2021    19844    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1168    1    0    

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

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