go.mod | ||
go.sum | ||
log-processor.go | ||
README.md |
О программе
Программа для обработки журналов 1С.
В качестве входных данных используются файлы журналов "20230126000001.lgp" (Для обработки берется файл имя которого совпадает с текущей датой). В качестве словаря для подстановки значений используется файл "1Cv8.lgf".
Обработанные данные могут быть сохранены в файл как в JSON так и в CSV форматах. Также возможна отправка обработанных данных в ElasticSearch.
Программа работает как в Linux так и Windows.
!!! Внимание !!!
С целью ускорения работы запуск процесса отправки записей в эластик сделан параллельно, т.е. каждая запись отправляется в отдельном потоке (goroutine) поэтому, для исключения переполнения буфера соединений, в процедуру чтения файла (func tail()) введена задержка в 5 миллисекунд (time.Sleep(5 * time.Millisecond)).
Для уменьшения нагрузки на систему и задержек в отправке данных, рекомендуется использовать пакетную отправку данных в индексы opensearch (elasticsearch).
Типы ообъектов в словаре 1 – пользователи; 2 – компьютеры; 3 – приложения; 4 – события; 5 – метаданные; 6 – серверы; 7 – основные порты; 8 – вспомогательные порты.
Опции командной строки
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
Запись обработанных данных в файл
Настройка
Передача параметров для работы программы возможна через файл настроек, через командную строку и через переменные окружения (но не все). Приоритетным является конфигурационный файл. Т.е. при запуске проверяется наличие файла конфигурации, и в случае если его нет проверяются параметры командной строки, если опции командной строки не заданы то проверяются переменные окружения.
Для создания файла настроек программу следует запустить с указанием опций:
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
; Наименование службы windows
serviceName=1C Log Processor
[ElasticSearch]
; Включене отправки данных в ElasticSearch
sendToEs=false
; Получать список узлов кластера ElasticSearch
esDiscoverNode=true
; Адрес сервера ElasticSearch
esUrl=https://elastic:9200
; Пользователь для подключсения к ElasticSearch
esUser=user_name
; Пароль пользователя ElasticSearch
esPassword=user_password
; Отключить проверку SSL сертификатов при подключении
esSkipVerify=false
; Перфикс индекса в ElasticSearch
esIndexPrefix=test_log
; Пакетная вставка данных
esBulk=true
; Количество записей в одном "пакете"
esBulkRecordsQuantity=10
[Processing]
; Включение вывода обработанной информации в файл
writeOutFile=false
; Формат выходного файла
outFormat=csv
; Сдвиг времени (временная зона)
timeZoneOffset=+03:00
; Задержка чтения входного файла между строками
; Разрешены обозначения 'ns', 'us' ('µs'), 'ms', 's', 'm','h'
readDuration=5ms
; Список событий (поле "Event"), исключенных из выдачи, разделенный ";"
excludeEvent=_$Transaction$_.Begin;\
_$Transaction$_.Commit