Загрузка логов журнала регистрации 1С из MS SQL в ElasticSearch

01.09.16

База данных - Журнал регистрации

Еще один инструмент хранения и визуализации логов журнала регистрации 1С

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

Входная задача: Небольшая конфигурация на 1С Предприятие 8.2. Максимальная суточная активность - 150 чел. Информационная база генерирует ~ 0,5 млн записей логов в рабочие дни. Логи необходимо хранить в сторонней БД MS SQL. Также необходим гибкий инструмент хранения и визуализации логов, как текущего так и  прошлого периода (3-5 лет). Использовать стек ELK (Elastic + Logstash + Kibana).

Решение: Будет реализована следующая инфраструктура:

Последовательность действий:

1. Запись журнала регистрации 1С в базу MS SQL;

2. Отправка логов 1С из MS SQL в ElastisSearch;

3. Визуализация логов 1С в Kibana.

Реализация.

Запись журнала регистрации 1С в базу MS SQL

Механизм реализовал Алексей Бочков, описание и исходники в статье //infostart.ru/public/182820/

Для того, чтобы Logstash понимал, какие записи уже были отправлены в Elastic, а какие появились с момента последнего запуска - необходимо в таблице Events создать инкрементное поле id_log типа bigint (+ 8 байт на запись).  Для этого в MS SQL Server Management Studio достаточно выполнить запрос:

USE [log1c]
ALTER TABLE [log1c].[dbo].[Events] ADD id_log bigint identity

где log1c - имя базы данных с логами.

В итоге, имеем базу данных MS SQL с актуальными логами информационной базы 1С, которые периодически  считываются из файла ЖР. 

Отправка логов 1С из MS SQL в ElastisSearch

На том, как устанавливать стек ELK (Elastic + Logstash + Kibana) останавливаться не буду, т.к. в Интернет есть много подробной информации. Например, установка на Windows, установка на Linux.

ПО на сервера установлено, переходим к настройке. Для загрузки из базы MS SQL в Logstash будем использовать jdbc-input-plugin

На сервере Logstash внесем изменения в конфигурационный файл 

input {
  jdbc {
    jdbc_driver_library => "C:\logstash-2.3.4\jdbc2\sqljdbc_4.2\rus\sqljdbc41.jar"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_connection_string => "jdbc:sqlserver://10.4.2.147\MSSQLSERVER:1433;DatabaseName=log1c"
    jdbc_user => "logstash"
    jdbc_password => "Qwerty123"
    jdbc_fetch_size => "100000"
    #clean_run => true
    last_run_metadata_path => "C:\logstash-2.3.4\last_run\last_run"
    statement_filepath => "C:\logstash-2.3.4\bin\SQLQuery.sql"
    schedule => "* * * * *"
    tracking_column => id_log
    use_column_value => true
  }
}

filter {
  date{
    target => "datetime"
    match => ["datetime", "YYYY-MM-dd HH:mm:ss.SSS", "MMM dd YYYY HH:mm:ss.SSS", "ISO8601"]    
  }
}

output { 
  elasticsearch {
    hosts => "10.4.2.90:9200"
    index => "log1c-%{index_elastic}"
  }
}

Разберем настройки подробнее. 

jdbc_driver_library - путь к библиотеке jdbc драйвера, скачиваем с официального сайта

jdbc_driver_class  - класс jdbc драйвера. Для MS SQL это "com.microsoft.sqlserver.jdbc.SQLServerDriver"

jdbc_connection_string => "jdbc:sqlserver://10.4.2.147\MSSQLSERVER:1433;DatabaseName=log1c" - 10.4.2.147 - IP адрес сервера MSSQL, MSSQLSERVER - Instance Name заданный при установке, 1433 - порт, log1c - БД с логами.

jdbc_user, jdbc_password - логин/пароли для доступа к БД

jdbc_fetch_size - размер выборки из БД

tracking_column - имя колонки, значение которой будет отслеживаться (то самое инкрементное поле id_log)

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

use_column_value => true - включаем использование отслеживаемого столбца (на запрос будет добавляться условие Where, в параметр sql_last_value будет вставлено значение из файла last_run_metadata_path)

statement_filepath => "C:\logstash-2.3.4\bin\SQLQuery.sql" - путь к файлу с запросом SQL

schedule => "* * * * *" - расписание, периодического выполнения запроса к БД, в формате Cron.

Текст запроса в файле "C:\logstash-2.3.4\bin\SQLQuery.sql"

SELECT 
	  e.*
	  ,i.[Name] AS "InfobaseName"
	  ,a.[Name] AS "AppName_str"
	  ,c.[Name] AS "ComputerName_str"
	  ,et.[Name] AS "EventName"
	  ,mp.[Name] AS "MainPorts"
	  ,sp.[Name] AS "SecondPortsName"
	  ,md.[Name] AS "MetadataName"
	  ,md.[Guid] AS "MetadataGUID"
	  ,s.[Name] AS "ServerName"
	  ,u.[Name] AS "UserName_str"
	  ,u.[Guid] AS "UserGUID"
	  ,FORMAT(e.[datetime], 'yyyy-MM', 'en-US') as 'index_elastic'
FROM [log1c].[dbo].[Events] e
  left join [log1c].[dbo].[Infobases] i		ON (e.[InfobaseCode] = i.[Code])
  left join [log1c].[dbo].[Applications] a	ON (e.[InfobaseCode] = a.[InfobaseCode]		AND e.[AppName] = a.[Code])
  left join [log1c].[dbo].[Computers] c		ON (e.[InfobaseCode] = c.[InfobaseCode]		AND e.[ComputerName] = c.[Code])
  left join [log1c].[dbo].[EventsType] et	ON (e.[InfobaseCode] = et.[InfobaseCode]	AND e.[EventID] = et.[Code])
  left join [log1c].[dbo].[MainPorts] mp	ON (e.[InfobaseCode] = mp.[InfobaseCode]	AND e.[MainPortID] = mp.[Code])
  left join [log1c].[dbo].[SecondPorts] sp	ON (e.[InfobaseCode] = sp.[InfobaseCode]	AND e.[SecondPortID] = sp.[Code])
  left join [log1c].[dbo].[Metadata] md		ON (e.[InfobaseCode] = md.[InfobaseCode]	AND e.[MetadataID] = md.[Code])
  left join [log1c].[dbo].[Servers] s		ON	(e.[InfobaseCode] = s.[InfobaseCode]	AND e.[ServerID] = s.[Code])
  left join [log1c].[dbo].[Users] u		ON (e.[InfobaseCode] = u.[InfobaseCode]		AND e.[UserName] = u.[Code])
WHERE 
  e.id_log > :sql_last_value

Итого, при первом запуске Logstash в Elastic выгрузятся все записи из БД log1c (sql_last_value=0), при последующем запуске будут считываться только вновь добавленные записи (последнее считанное значение id_log будет храниться в файле last_run_metadata_path и передаваться в качестве переменной через sql_last_value)

Визуализация логов 1С в Kibana

Если ElasticSearch и Kibana установлены на одном сервере, то дефолтных настроек будет достаточно. В нашем случае - на разных серверах, поэтому необходимо внести правки в конфигурационные файлы.
Для ElasticSearch в файл elasticsearch.yml

network.host: ["127.0.0.1", "10.4.2.90"]
network.port: 9200
discovery.zen.ping.unicast.host: [IP_адреса]

Для Kibana - файл  kibana.yml

server.port: 5601
server.host: "10.4.2.91"
elasticsearch.url: "10.4.2.90:9200"

Самая приятная часть - анализ и визуализация логов. Вводим в браузере "10.4.2.91:5601", на вкладке Settings создаем новый шаблон индекса:

На вкладке Discover появятся все логи журнала регистрации 1С:

Запрос на сервер Elastic для отбора всех ошибок ЖР:

{
  "query": {
    "match": {
      "eventtype": {
        "query": "E",
        "type": "phrase"
      }
    }
  }
}

Все поиски и визуализации можно вывести на dashboard, задать период анализа логов (например за последний час) и частоту обновления из Elastic.

Возможности резервного копирования и восстановления в ElasticSearch реализованы очень интересно. Управление через HTTP запросы в формате JSON.
Сначала, необходимо создать репозиторий.

curl -XPUT 'http://l0.4.2.90:9200/_snapshot/backup1' -d '{
"type": "fs",
"settings": {
"location": "/elastic-backup",
"compress": true
}
}'

где type - тип хранилища, куда будут складываться бэкапы. Для дефолтной установки доступна только файловая система. С дополнительными плагинами можно реализовать хранение на Azure Cloud, HDFS и AWS S3.
location - путь хранения
compress - сжимать ли бэкапы, по умолчанию true.

Репозиторий создан, можно бэкариповать - создадим snapshot1 в репозитории backup1:

curl -XPUT "10.4.2.90:9200/_snapshot/backup1/snapshot1?wait_for_completion=true"

Для восстановления данных:

curl -XPOST "10.4.2.90:9200/_snapshot/backup1/snapshot1/_restore"

Посмотреть текущие индексы:

curl -XGET "10.4.2.90:9200/_cat/indices/?pretty"

Удалить индекс "log1c-2014-02" - все логи за февраль 2014 г.:

curl -XDELETE "10.4.2.90:9200/log1c-2014-02/?pretty"

Более полный список команд по работе с ElasticSearch - тема для отдельной статьи.

Замечания:
1) В данной статье не рассматриваются вопросы безопасности/разграничения доступа к ElasticSearch/Kibana, настройка сертификатов, кластеризация и масштабирование ElasticSearch, т.к. это не входило в изначальную задачу.
2) Выбранная архитектура миграции логов 1С -> MS SQL -> ELK обусловлена только лишь поставленной задачей. В Production логи не будут храниться в БД и ElasticSearch, дублирую друг друга.
3) Размер БД в 500 ГБ уже требует большого количества ресурсов и операций чтения с диска при выполнении запроса от Logstash к MS SQL. Можно было бы на MS SQL создать архивную БД, в которую выгружать прочитанные Logstash'ом данные. Тогда таблица, в которую пишутся данные из 1С и читаются в Logstash, будет иметь небольшой объем (буфер).

Итоги по задаче. В ходе выполнения задачи, была достигнута главная цель статьи - демонстрация механизма получения и анализа данных в ElasticSearch из БД MS SQL.

Спасибо.

P.S. Возможно, вам будет интересна предыдущая статья Мониторинг количества сеансов 1С на базе PRTG

ElasticSearch Logstash Kibana MS SQL журнал регистрации логи 1С

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42626    12    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

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

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

4800 руб.

03.09.2016    42303    33    24    

37

LogManager - Внешний журнал регистрации в SQL

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55574    52    16    

47

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    31105    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

5000 руб.

28.11.2018    19624    13    6    

37

Регламентное сокращение журнала регистрации

Инструменты администратора БД Журнал регистрации Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    1383    14    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    3139    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

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

3 стартмани

26.09.2023    1829    11    doom2good    10    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Makushimo 160 06.09.16 09:49 Сейчас в теме
Тема интересная, но акцент сделан на тех. составляющую.
А вот с представлением темы подкачал.
поймал себя на мысли, а зачем читать так много букав неонятно о чем.

Что это? Зачем это?

Допустим, я не в теме ни разу, но [возможно] это будет полезным для меня или моего работодателя. А в статье нет общего введения. Демонстрации того, что это решение дает. без технических подробностей, Чтобы войти в контекст.

То есть автор отправит меня в гугел, мол иди изучай, ведь это ТЕБЕ надо... А я вот тут технические моменты выложу. Кому надо тот поймет.

И на втором третьем абзаце сливаю эту статью фтопку.

Автор, зачем ты это выкладываешь. похвастаться?

Люди в теме и так это знают, а те кто не в теме идут лесом в гугел.
Symbiat; isn@nk-nw.ru; kalyaka; DenisF8; Новиков; +5
2. vano-ekt 124 06.09.16 17:37 Сейчас в теме
3. lustin 07.09.16 17:31 Сейчас в теме
(0) Beats же, Beats https://www.elastic.co/products/beats/filebeat и т.д.

next generation logstash forwarder
+
4. pahalovo 08.09.16 02:33 Сейчас в теме
(3) Есть ли beats для sqlite логов?
+
5. JohnyDeath 301 09.12.16 06:49 Сейчас в теме
(0) Без промежуточной MSSQL базы не делали? На основании, например, Beats, который упомянут в (3)
+
6. farukshin 120 09.12.16 20:51 Сейчас в теме
(5) Евгений, без MSSQL базы не делал, только в планах.
+
7. newgluk 87 30.08.17 14:20 Сейчас в теме
было бы интересно посмотреть на практические кейсы в Kibana. Т.е., ради чего городить огород? Какие запросы, аналитику можно получить? Какая скорость обработки?
Symbiat; andreycompany; +2
8. ImHunter 315 27.09.17 09:35 Сейчас в теме
Тоже занялся применением ElasticSearch. Пока так, для эксперимента. По установке стека сервисов под Win нашел оч подробную статью.
+
9. user1112695 28.01.19 10:57 Сейчас в теме
Сделал связку: ЖР 1C в файлах --> logstash --> elasticsearch.
Logstash парсит сырые логи 1С, подменяет данные с IDшниками на человекочитаемые данные(должны быть в файлах lgf), результат шлет в эластик.
Исходники тут - https://github.com/ggerogery/logstash-1c-security-logs, может кому-то пригодятся GROK фильтры или схема целиком.
Symbiat; +1
10. kser87 2439 31.08.21 15:54 Сейчас в теме
Может не журнала регистрации, а технологического журнала все же?
+
11. popro 24.06.22 16:48 Сейчас в теме
Если получаются записи вида "Metadata:Nothing to match! " это logstash плохо отработал?
+
Внимание! Тема сдана в архив