188 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
## О программе
 | 
						||
 | 
						||
Программа для обработки журналов 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
 | 
						||
```
 |