Разбор журнала регистрации 1С

СВК
Published

Программа для обработки журналов регистрации 1С.

Данная программа позволяет преобразовать журнал регистрации 1С, используя словарь, в читаемый формат (JSON или CSV). Также возможна отправка обработанных данных в ElasticSearch (Opensearch). Написана на Go и работает как в Linux так и Windows.

В качестве входных данных используются файлы журналов "20230126000001.lgp". Для обработки берется файл имя которого совпадает с текущей датой, при смене даты в 00 часов данный файл будет закрыт и взят следующий. Первоначально, для обработки брался файл с датой модификации совпадающей с текущим днем, и временем модификации более поздним чем у остальных, но данный алгоритм работал не корректно в windows.

В качестве словаря для подстановки значений используется файл "1Cv8.lgf".

Типы объектов в словаре 1 – пользователи; 2 – компьютеры; 3 – приложения; 4 – события; 5 – метаданные; 6 – серверы; 7 – основные порты; 8 – вспомогательные порты.

С целью ускорения работы запуск процесса отправки записей в эластик сделан параллельно, т.е. каждая запись отправляется в отдельном потоке (goroutine) поэтому для исключения переполнения буфера соединений, в процедуру чтения файла (func tail()), введена задержка в 5 миллисекунд (time.Sleep(5 * time.Millisecond)) (время устанавливается в файле конфигурации). Также можно использовать пакетную обработку записей (отправку), т.е. отправлять в одном запросе несколько записей, что увеличивает скорость обработки поступающих данных.

Настройка

Передача параметров для работы программы возможна через файл настроек, через командную строку и через переменные окружения (но не все). Приоритетным является конфигурационный файл. Т.е. при запуске проверяется наличие файла конфигурации, и в случае если его нет проверяются параметры командной строки, если опции командной строки не заданы то проверяются переменные окружения.

Для создания файла настроек программу следует запустить с указанием опций:

log-processor -dir-config ~/tmp/123 -config processor.ini -create-config

Пути к каталогам и файлам можно переопределить через указание соответствующих параметров при запуске. После правки параметров программу можно запускать.

Использование

При первом запуске будут созданы недостающие каталоги (в случае отсутствия). После запуска программа получает последний файл (по дате модификации) в каталоге заданном опцией "-dir-in". И запускает потоковый процесс обработки данных. По мере чтения файла, производится проверка входного каталога на наличие новых файлов, и при обнаружении оного процесс чтения открытого файла будет остановлен и запущена обработка нового.

Позиция указателя в открытом файле сохраняется во временном файле типа "20230126000001.lgp.tmp", который будет удален при нормальном завершении работы с файлом. При ручном прерывании процесса обработки или аварийном завершении программы и последующем запуске процесс чтения файла (и запись выходного файла) будет продолжен с того места на котором произошло завершение.

Программа позволяет отправлять обработанные данные в ElasticSearch/OpenSearch опция "-es-send", сохранять в файлах формата csv и json: "-write-out-file" и "-out-format" соответственно, выводить в консоль - "-debug". Для всех операций используются соответствующие ключи запуска или параметры в файле настроек.

Для уменьшения количества записей можно задать список событий, которые будут исключены из итоговой выдачи (как в файл так и в эластик), разделенный точкой с запятой. Для этого используется параметр в файле конфигурации "excludeEvent":

excludeEvent=_$Transaction$_.Begin;\
_$Transaction$_.Commit

Запуск как служба Windows

Перед запуском службу следует зарегистрировать в системе средствами Windows:

sc.exe create "1C log processor 1" binPath="c:\1c-logprocessor\1c-logprocessor.exe -dir-config C:\1c-logprocessor\.config\ -run-win-service" DisplayName="1C log processor" type=own start=auto

Пути можно указать свои. Управление службой осуществляется через штатную оснастку системы.

Запуск нескольких экземпляров службы

Для одновременной обработки нескольких журналов, от разных процессов 1С (БД) возможно запустить несколько экземпляров парсера. Для этого требуется создать конфигурационные файлы, для каждого процесса 1С свой. В конфигурации указать уникальные полные пути dirIn, dirOut, dirTmp, имя индекса elasticsearch. Также наименование службы. И после этого зарегистрировать службу:

sc.exe create "1C log processor 1" binPath="c:\1c-logprocessor\1c-logprocessor.exe -dir-config C:\1c-logprocessor\.config\ -config config-1.ini -run-win-service" DisplayName="1C log processor 1" type=own start=auto
sc.exe create "1C log processor 2" binPath="c:\1c-logprocessor\1c-logprocessor.exe -dir-config C:\1c-logprocessor\.config\ -config config-2.ini -run-win-service" DisplayName="1C log processor 2" type=own start=auto
...

Обработка заданного файла

Для запуска обработки одного файла в режиме командной строки, достаточно указать имя файла используя опцию --file. Файл должен быть расположен в каталоге указанном в --dir-in. После обработки этого файла программа завершит свою работу.

Пример конфигурационного файла

[General]
; Каталог для входящих данных
dirIn=in
; Каталог для исходящих данных
dirOut=out
; Каталог для временных файлов
dirTemp=tmp
; Каталог для журнала работы программы
dirLog=log
; Имя файла словаря
dictFile=1Cv8.lgf
; Список объектов для выборки из словаря
objectTypes=1,2,3,4,5,6,7,8
; Расширение файлов журнало 1С (входящих)
logFileExtention=.lgp

[ElasticSearch]
; Включене отправки данных в ElasticSearch
sendToEs=false
; Адрес сервера ElasticSearch
esUrl=https://elastic:9200
; Пользователь для подключсения к ElasticSearch
esUser=user_name
; Пароль пользователя ElasticSearch
esPassword=user_password
; Отключить проверку SSL сертификатов при подключении
esSkipVerify=false
; Перфикс индекса в ElasticSearch
esIndexPrefix=test_log
; Пакетная вставка данных
esBulk=true
; Количество записей в одном "пакете"
esBulkRecordsQuantity=20

[Processing]
; Включение вывода обработанной информации в файл
writeOutFile=false
; Формат выходного файла
outFormat=csv
; Сдвиг времени (временная зона)
timeZoneOffset=+03:00
; Задержка чтения входного файла между строками
; Разрешены обозначения 'ns', 'us' ('µs'), 'ms', 's', 'm','h'
readDuration=5ms
; Список событий (поле "Event"), исключенных из выдачи, разделенный ";"
excludeEvent=

Опции командной строки

Usage of /tmp/go-build847101717/b001/exe/log-processor:
  -config string
        Файл настроек (default "config.ini")
  -create-config
        Создать файл настроек
  -debug
        Выводить данные в консоль
  -dict-file string
        Файл со словарём (DICT_FILE) (default "1Cv8.lgf")
  -dir-config string
        Каталог для файлов настройки (DIR_CFG) (default ".config")
  -dir-in string
        Каталог для исходных файлов (DIR_IN) (default "in")
  -dir-worklog string
        Каталог для лога работы (DIR_LOG) (default "log")
  -dir-out string
        Каталог для обработанных файлов (DIR_OUT) (default "out")
  -dir-temp string
        Каталог для временных файлов (TEMP) (default "tmp")
  -es-bulk
        Пакетная вставка записей в Elastic Search
  -es-bulk-quantity int
        Количество записей в одном запросе для пакетной вставки (default 10)
  -es-index-prefix string
        Префикс имени индекса Elastic Search (ELASTICSEARCH_INDEX_PREFIX)
  -es-password string
        Пароль пользователя Elastic Search (ELASTICSEARCH_PASSWORD)
  -es-send
        Отправлять данные в ElasticSearch
  -es-skip-verify
        Пропустить проверку сертификатов при подключении к Elastic Search
  -es-url string
        Адрес узла Elastic Search (ELASTICSEARCH_URL)
  -es-user string
        Имя пользователя Elastic Search (ELASTICSEARCH_USER)
  -file string
        Имя файла для обработки. Если требуется обработать один файл
  -log-file-ext string
        Расширение файлов с журналами (обрабатываемых логов) (LOG_FILE_EXT) (default ".lgp")
  -object-types string
        Список типов объектов словаря для выборки, разделённый запятой (OBJECT_TYPES) (default "1,2,3,4,5,6,7,8")
  -out-format string
        Формат данных на выходе (csv, json) (OUT_FORMAT) (default "csv")
  -run-win-service
        Запуск как службы Windows
  -tail-sleep string
        Задержка чтения входного файла. Разрешены обозначения 'ns', 'us' ('µs'), 'ms', 's', 'm','h') (default "5ms")
  -tz-offset string
        Сдвиг по времени от UTC (default "+03:00")
  -worklog-out string
        Направление вывода журнала работы программы (console, file) (default "file")
  -write-out-file
        Запись обработанных данных в файл

Исходники

Исходные коды лежат тут https://git.nuk-svk.ru/svk/1c-logprocessor. Если нужен собранный двоичный файл или пакет, то помогу собрать или выложу собранный (пишите в почту).