Разбор журнала регистрации 1С
Программа для обработки журналов регистрации 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. Если нужен собранный двоичный файл или пакет, то помогу собрать или выложу собранный (пишите в почту).