All Projects → NuclearAPK → go-techLog1C

NuclearAPK / go-techLog1C

Licence: other
1C technological log parser with periodic sending to Elasticsearch

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to go-techLog1C

TIL
Today I Learned
Stars: ✭ 43 (+95.45%)
Mutual labels:  kibana
ax
A CLI tool to query structured logs, including Kibana, Cloudwatch, Stackdriver, Docker and plain JSON file logs.
Stars: ✭ 51 (+131.82%)
Mutual labels:  kibana
docker-elk
ELK Stack on Docker
Stars: ✭ 43 (+95.45%)
Mutual labels:  kibana
WAZUH-OSSEC
WAZUH - The Open Source Security Platform Installation
Stars: ✭ 79 (+259.09%)
Mutual labels:  kibana
zeek2es
A Python application to filter and transfer Zeek logs to Elastic/OpenSearch. This app can also output pure JSON logs to stdout for further processing!
Stars: ✭ 16 (-27.27%)
Mutual labels:  kibana
mathlion
Mathlion is an advanced math plugin for Kibana's Timelion
Stars: ✭ 77 (+250%)
Mutual labels:  kibana
logCollect
日志收集解决方案,动态管理、轻量级日志收集客户端
Stars: ✭ 24 (+9.09%)
Mutual labels:  kibana
pandora
Small box of pandora to prototype your app with ready for use backend. This is just my compilation of different solutions occasionally applied in hackathons and challenges
Stars: ✭ 26 (+18.18%)
Mutual labels:  kibana
tsharkVM
tshark + ELK analytics virtual machine
Stars: ✭ 51 (+131.82%)
Mutual labels:  kibana
bcoin-es
Bitcoin with Elasticsearch and Kibana analytics
Stars: ✭ 27 (+22.73%)
Mutual labels:  kibana
microservice-elk
Creating microservice using Spring Boot, Eureka, Zuul, Sleuth, Zipkin and ELK Stack
Stars: ✭ 19 (-13.64%)
Mutual labels:  kibana
HTTPStatusCodes
HTTP Status Codes for 1C:Enterprise Platform
Stars: ✭ 23 (+4.55%)
Mutual labels:  1c
malice-kibana-plugin
Malice Kibana Plugin
Stars: ✭ 21 (-4.55%)
Mutual labels:  kibana
clinical nlp elastic
Clinical NLP Analysis with Elasticsearch and Kibana
Stars: ✭ 32 (+45.45%)
Mutual labels:  kibana
backends
monorepo for republik, publikator and assets backends based on NodeJS providing the GraphQL API used to power republik.ch.
Stars: ✭ 40 (+81.82%)
Mutual labels:  kibana
1C-Gitter
ПРОЕКТ БОЛЬШЕ НЕ РАЗВИВАЕТСЯ. Конфигурация 1С для выгрузки коммитов из хранилища в GIT
Stars: ✭ 31 (+40.91%)
Mutual labels:  1c
ElsQuery
Vue Elastic Search Query Builder
Stars: ✭ 27 (+22.73%)
Mutual labels:  kibana
ob-kb-percent
Kibana Percent Metric Visualization
Stars: ✭ 18 (-18.18%)
Mutual labels:  kibana
kibana graph
Interactive Network Graph Visualization For Kibana (unmaintained)
Stars: ✭ 38 (+72.73%)
Mutual labels:  kibana
IRP
IRP Core
Stars: ✭ 60 (+172.73%)
Mutual labels:  1c

go-techLog1C

Парсер технологического журнала, основанный на стеке технологий Golang goroutines + Redis + Elasticsearch.

Стек является кросс-платформенным.

Упрощенная схема взаимодействия

Запуск парсера

Необходимо иметь установленный инстанс СУБД Redis, а так же Elasticsearch (версия > 7.0) Непосредственно запустить парсер можно командой: go run

или собрать exe/bin командой: go build

Windows: собранный exe можно запускать через планировщик заданий с заданной периодичностью. В этом случае - в настройки задания планировщика нужно прописать рабочую папку в параметрах. Лучшей практикой является использование bat файла, примерное содержание:

@echo off
cd "S:\go-techLog1C\"
techLog1C.exe
echo on

Linux: используйте crontab. Пример запуска парсера с периодичностью 5 минут:

*/5**** /usr/local/techLog1C

Настройки парсера

Все настройки указываются в файле settings.yaml

# Расположение логов тех журнала 1С
patch: "D:\\tmp\\1C_event_log\\1C_event_log"
#
# Удалять табуляции в контекстных строках
delete_tabs_in_contexts: true
#
# Заменять постфиксы виртуальных таблиц в контекстах, например #tt36 на #tt 
# Может использоваться для группировки контекстов
delete_postfix_in_name_virtual_tables: true
#
# Параметры подключения к Redis
redis_addr: "localhost:6379"
redis_login: ""
redis_password: ""
redis_database: 0
#
# Параметры подключения к Elasticsearch
elastic_addr: "http://localhost:9200"
elastic_login: ""
elastic_password: ""
elastic_maxretries: 10
elastic_bulksize: 2000000
#
# Правила формирования индекса Elasticsearch
# Пример: "tech_journal_{event}_yyyyMMddhh", где event - CONN, EXCP, etc...
elastic_indx: "tech_journal_{event}_yyyyMMddhh"
#
# Типы событий тех журнала, которые могут содержать длинные строки '...' и переносы строк \n
tech_log_details_events: "Context|Txt|Descr|DeadlockConnectionIntersections|ManagerList|ServerList|Sql|Sdbl"
#
# Путь, где будут распологаться логи программы
patch_logfile: "D:\\tmp\\techLogData\\log"
#
# Глубина фиксации ошибок при работе программы:
#   1 - только ошибки
#   2 - ошибки и предупреждения 
#   3 - ошибки, предупреждения и информация
log_level: 3
#
# Уровень параллелизма
maxdop: 14
#
# 0 - отключена сортировка файлов по размеру, 1 - сортировка по убыванию, 2 - сортировка по возрастанию
# полезно включать при массовых операциях, для равномерного распределения файлов по потокам
sorting: 0

Redis

NoSQL key-value СУБД. В стеке выполняет роль кэша, для хранения параметров файлов, которые обрабатываются в текущий момент времени и те, которые были обработаны (последняя позиция файла). Почему не используется простой текстовый файл? Все просто - парсер работает в многопоточном режиме, что требует доступ до файла в режиме записи из нескольких потоков. Redis позволяет решать следующие кейсы:

  1. Если файла тех. журнала уже нет, то при запуске парсера анализируются ключи в redis базе и проверяется существование файлов. Если файлы не существуют - ключи таких файлов удаляются.
  2. Так же при запуске еще одного инстанса парсера - будут пропущены файлы тех. журнала, обрабатываемые другими инстансами.

Рекомендуется задать параметр в config файле redis_database, который задает номер базы (в redis 16 баз, от 0 до 15, по умолчанию используется база с индексом 0).

Redis для Windows

Elasticsearch

Используется как конечная точка хранения распарсенных логов 1С. Нереляционная база данных Elasticsearch позволяет достаточно оперативно получать необходимую информацию, используя поисковые обратные индексы. В связке с Kibana - можно строить выборки, используя декларативный KSQL язык запросов. При использовании расширения XPACK (30 day free trial) можно задействовать модуль машинного обучения (Machine Learning), что позволит выявлять аномалии и различные зависимости от показателей тех журнала, например утечки памяти.

Elasticsearch особенности настроек:

Elasticsearch работает на JVM, поэтому очень требователен к настройкам памяти. По умолчанию размер кучи установлен в 1Gb, что крайне мало при массовой операции вставки документов в индексы Elasticsearch.

  1. XMX/XMS рекомендуется установить равным половине оперативной памяти, доступной физической/виртуальной машине. Например, если у вас 16Gb, то возможный вариант настройки: -Xms8G -Xmx8G Документация

  2. Очистка старых индексов (использование index lifecycle policy). Чем детальнее технологический журнал - тем сильнее будет расти его объем, а значит и индексы в Elasticsearch, это может привести к нехватке свободного места на дисках, где хранятся индексы. Лучшая практика - спустя N дней удалять индексы. Все что необходимо - задать политику жизненного цикла индексов https://www.elastic.co/guide/en/elasticsearch/reference/current/set-up-lifecycle-policy.html После этого задать темплейт, который будет включать индексы тех журнала

PUT _template/tech_journal_template
{
  "index_patterns": ["tech-*"],                 
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "tech_journal_policy"    
  }
}

Чтобы ее применить к уже существующим индексам, нужно выполнить следующий запрос

PUT tech_*/_settings
{
  "index.lifecycle.name": "tech_journal_policy" 
}

Известные проблемы:

  1. circuit_breaking_exception,  [request] Data too large, data for [<reused_arrays>] would be larger than limit of: Измените параметры XMX/XMS
  2. es_rejected_execution_exception: rejected execution of coordinating operation Уменьшите уровень параллелизма (maxdop), подберите оптимальный размер блока на единицу bulk операции (elastic_bulksize), увеличьте параметр elastic_maxretries в config файле.
  3. Долгая индексация, update mapping index. После загрузки каждого документа - если не задана карта индекса - карта создается, что создает накладные расходы, при количестве документов > 1 млн, обновление карты может не уложиться в таймаут по умолчанию (30 сек.). Поэтому, рекомендуется создавать map карты индекса (см. каталог maps)
  4. При вставке записей в Elasticsearch возникает ошибка [400] validation_exception: Validation Failed: 1: this action would add... Необходимо увеличить количество шардов
curl -u USER:PASSWD -X PUT localhost:9200/_cluster/settings -H "Content-Type: application/json" -d '{ "persistent": { "cluster.max_shards_per_node": "3000" } }'
{"acknowledged":true,"persistent":{"cluster":{"max_shards_per_node":"3000"}},"transient":{}}
  1. Время событий в Кибане показывается относительно UTC. Все что необходимо сделать - выставить в настройках необходимый часовой пояс Настройки часового пояса
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].