Go to file
2024-10-28 16:39:34 +03:00
go.mod Восстановление репозитория 2024-06-14 16:27:28 +03:00
go.sum Восстановление репозитория 2024-06-14 16:27:28 +03:00
log-processor.go Реализована пакетная отправка данных в эластики соответствующие настройки. Произведена чистка кода 2024-10-28 16:28:37 +03:00
README.md Обновить README.md 2024-10-28 16:39:34 +03:00

О программе

Программа для обработки журналов 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