## О программе Программа для обработки журналов 1С. В качестве входных данных используются файлы журналов "20230126000001.lgp" (Для обработки берется файл имя которого совпадает с текущей датой). В качестве словаря для подстановки значений используется файл "1Cv8.lgf". Обработанные данные могут быть сохранены в файл как в JSON так и в CSV форматах. Также возможна отправка обработанных данных в ElasticSearch. Программа работает как в Linux так и Windows. !!! Внимание !!! С целью ускорения работы запуск процесса отправки записей в эластик сделан параллельно, т.е. каждая запись отправляется в отдельном потоке (goroutine) поэтому для исключения переполнения буфера соединений в процедуру чтения файла (func tail()) введена задержка в 5 миллисекунд (time.Sleep(5 * time.Millisecond)). Это костыль и пока нормального решения я не придумал. Типы ообъектов в словаре 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 [ElasticSearch] ; Включене отправки данных в ElasticSearch sendToEs=false ; Адрес сервера ElasticSearch esUrl=https://elastic:9200 ; Пользователь для подключсения к ElasticSearch esUser=user_name ; Пароль пользователя ElasticSearch esPassword=user_password ; Отключить проверку SSL сертификатов при подключении esSkipVerify=false ; Перфикс индекса в ElasticSearch esIndexPrefix=test_log [Processing] ; Включение вывода обработанной информации в файл writeOutFile=false ; Формат выходного файла outFormat=csv ; Сдвиг времени (временная зона) timeZoneOffset=+03:00 ; Задержка чтения входного файла между строками ; Разрешены обозначения 'ns', 'us' ('µs'), 'ms', 's', 'm','h' readDuration=5ms ; Список событий (поле "Event"), исключенных из выдачи, разделенный ";" excludeEvent= ```