Каталог решений - Перенос всех логов в Elasticsearch

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

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

В наличии

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

Категория:

Описание

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

has been added to your cart:
Оформление заказа