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

Публикация № 545895

Администрирование - Администрирование данных 1С - Журнал регистрации

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

Еще один инструмент хранения и визуализации логов журнала регистрации 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

Специальные предложения

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

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

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

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

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

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

Люди в теме и так это знают, а те кто не в теме идут лесом в гугел.
isn@nk-nw.ru; kalyaka; DenisF8; Новиков; +4 Ответить
2. vano-ekt 841 06.09.16 17:37 Сейчас в теме
3. lustin 07.09.16 17:31 Сейчас в теме
4. pahalovo 08.09.16 02:33 Сейчас в теме
(3) Есть ли beats для sqlite логов?
5. JohnyDeath 298 09.12.16 06:49 Сейчас в теме
(0) Без промежуточной MSSQL базы не делали? На основании, например, Beats, который упомянут в (3)
6. farukshin 105 09.12.16 20:51 Сейчас в теме
(5) Евгений, без MSSQL базы не делал, только в планах.
7. newgluk 85 30.08.17 14:20 Сейчас в теме
было бы интересно посмотреть на практические кейсы в Kibana. Т.е., ради чего городить огород? Какие запросы, аналитику можно получить? Какая скорость обработки?
andreycompany; +1 Ответить
8. ImHunter 200 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 фильтры или схема целиком.
Оставьте свое сообщение

См. также

Быстрый способ удаления записей из журнала регистрации 1С

Журнал регистрации Чистка базы v8 Бесплатно (free)

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

06.08.2020    1458    DataReducer    3    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    6485    Scorpion4eg    8    

ELK. Время изумительных историй!

Журнал регистрации Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    8769    slozhenikin_com    27    

Версионирование регистров сведений

Журнал регистрации Практика программирования v8 Бесплатно (free)

Моя реализация механизма мониторинга изменений регистра сведений.

17.09.2019    3940    KonS    10    

Переход на 64-х разрядный сервер 1С

Журнал регистрации Администрирование данных 1С v8 Бесплатно (free)

Переход с 32-х разрядной версии сервера 1С на 64-х разрядную с сохранением данных журналов регистрации информационных баз, используемых в 32-х разрядной версии.

05.04.2019    20105    ids79    12    

Мониторинг активности пользователя

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Работает ли пользователь с программой? Сколько времени пользователь работает в программе? Что пользователь делает в программе? - эти вопросы стандартно решаются или просмотром журнала регистрации, или с помощью внешних программ. В данной статье будет предложен способ, как следить за активностью пользователей, используя небольшую доработку конфигурации. Бонусом системы мониторинга является автоматическое завершение сеансов пользователей, не работающих с программой длительное время.

11.10.2018    15167    postovalov    25    

Все, что вы хотели знать о журнале регистрации

Журнал регистрации v8 Бесплатно (free)

Исследование файла Журнала регистраций в формате lgd.

22.09.2018    21898    Fox-trot    25    

Кто запустил анализ журнала регистрации?

Журнал регистрации v8 Бесплатно (free)

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

16.09.2017    19227    metmetmet    42    

Подробный журнал регистрации изменений

Журнал регистрации v8 Бесплатно (free)

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

24.07.2017    12345    user700035_6550355    16    

Сжатие журнала регистрации в формате SQLite (.lgd) с помощью программы "DB Browser for SQLite".

Журнал регистрации v8 Россия Бесплатно (free)

Если журнал регистрации базы 1С заметно увеличился, Вы не сможете оперативно искать в нем нужную информацию. Более того, работа с таким журналом может вызывать блокировку работы всех пользователей. Для предотвращения разрастания журнала необходимо устранять настройками запись ненужных событий и перемещать в архивы события с неактуальными датами. Избавиться от уже записанной ненужной информации можно с помощью программы DB Browser for SQLite указанным в этой статье способом.

04.06.2017    26857    DrSender    6    

Запись в журнал регистрации изменений дополнительных сведений

Журнал регистрации v8 УТ11 УУ Бесплатно (free)

Небольшая доработка программы "Управление торговлей 11" для записи информации в журнал регистрации изменений дополнительных сведений (регистр сведений) по объектам. Должна работать на всех релизах.

04.05.2017    32337    Mortiferus    5    

Ошибка формата файла журнала регистрации, database disk image is malformed

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Ошибка формата файла журнала регистрации по причине: sqlite3_step failed: database disk image is malformed db: C:\Program Files\1cv8\srvinfo\reg_1541\34eda2fe-bcf4-485e-ab47-4f302319f59a\1Cv8Log\1Cv8.lgd sql: SELECT severity, date, connectID, session, transactionStatus, transactionDate, transactionID, userCode, computerCode, appCode, eventCode, comment, metadataCodes, sessionDataSplitCode, dataType, data, dataPresentation, workServerCode, primaryPortCode, secondaryPortCode FROM EventLog WHERE date<3155378867999999 AND eventCode IN (1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42) ORDER BY date DESC

27.09.2015    87847    mrWatson    29    

Анализ журнала регистрации для автонастройки списка выгружаемых объектов в обработке ВыгрузкаЗагрузкаДанныхXML82.epf

Журнал регистрации Практика программирования Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Сказ о том, как с помощью слегка модифицированной обработки ВыгрузкаЗагрузкаДанныхXML82.epf решить задачу "Выгрузить из базы-источника все объекты, которые заданный пользователь изменил в указанный период". Данная публикация может быть интересна тем, кто хочет узнать: а) как программно анализировать журнал регистрации и б) как программно настраивать список выгружаемых объектов в обработке ВыгрузкаЗагрузкаДанныхXML82.epf.

06.08.2015    19258    q_i    2    

Журнал регистрации 1С: путь к пониманию процессов клиента

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Как понять процессы документооборота клиента, имея доступ к его базе и не общаясь с ним.

11.06.2015    16620    Kindman1980    23    

Облегчение вызовов журнала регистрации с отбором по объекту

Журнал регистрации v8 1cv8.cf Бесплатно (free)

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

24.03.2015    13248    tarassov    7    

Формат файлов журнала регистрации 1С 8.1/8.2 - ELF/LOG/LGF/LGP

Журнал регистрации v8 1cv8.cf Бесплатно (free)

В статье детально описан формат текстовых файлов журнала регистрации 1С 8.1 - ELF/LOG и 1С 8.2 - LGF/LGP

09.04.2013    80030    Антон Ширяев    32    

Версионирование объектов в программе «Управление торговлей для Украины 3.0»

Журнал регистрации Администрирование данных 1С v8 УТ10 Украина Бесплатно (free)

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

13.02.2013    26198    aharechko    21    

Автоматизация укорачивания журнала регистрации

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Автоматизированная периодическая очистка разросшегося журнала регистрации на сервере с сохранением удаляемых частей на другом диске.

14.11.2012    30543    Stamper    8    

Контроль изменения документов

Журнал регистрации v8 1cv8.cf Россия Бесплатно (free)

Надоело ловить за руку тех кто изменяет документы задним числом, после их распечатывания? Постоянно мучают мысли, а все ли документы в БД правильно оформлены и подписаны? Если так, читайте дальше

17.11.2011    25221    pzu    14