Дык всегда можно переключиться в старый формат. В чем проблема?
BigData LogManager для 1С
Старый тупит, если б не тупил - данный топик не имел бы смысла
В каком плане тупит? Старый вариант же как раз лучше работает по скорости записи.
При чтении из него и поиске
Новый тупит не меньше, при достаточном объеме.
Вот поэтому и отрезаем выгруженные куски к чертям - они всё равно уже в ES.
Добрый день!
Дошли руки до сбора логов, поставили graylog.
Решил сначала собрать записи ЖР из текстовых файлов через filebeat в graylog.
Пока смотрятся только файлы данных *.lgp с такими настройками в yml
multiline.pattern: '^{\d{14}.+$' multiline.negate: true
События прилетают, но ни пользователя, ни метаданных, ни других полезных вещей не видно.
Как лучше сделать загрузку с определением значений массивов в 1Cv8.lgf? Pipeline видимо надо какой-то использовать, как его описать?
Может кто-нибудь поделиться наработками?
Спасибо
А там поддерживаются человекочитаемые имена метаданных и пользователи?
Да, поддерживает вроде, вот его статья на ИС https://infostart.ru/public/182820/
Формат логов в старом формате описан, например, тут: https://infostart.ru/public/182061/
по сути эта его программа разбирает логи и кладет в mssql.
а мне хотелось бы реализовать разбор ми отправку на filebeat без дополнительных шлюзов.
мне очень понравилась идея “Старый журнал + filebeat -> es”
Тут надо свой beat написать. Для разработки битов есть шаблон.
Я даже в какой-то момент начал эту задачу, но оно пока настолько концепт, что не публикую )
Она не обязательно кладет в MSSQL, она умеет сразу в эластик отправлять
Я не помню указывали или нет - пусть будет тут
Только это ТЖ, но пусть будет тут
У меня такая схема вышла: 1С ЖР => файлы, разбитые по дням => logstash => elasticsearch
Logstash’ем собираю ЖР из файлов с логами(lgp), фильтрую и загружаю в Elasticsearch, поиск и графики через Kibana. Из файла lgf составляю маппинг и отдаю его логсташу, чтобы была возможность видеть не только непонятные IDшники, но ещё и “human-readable” данные.
Сырых данных ЖР > 1ТБ. В эластике занимают места процентов на 20% меньше, благодаря сжатию.
Могу поделиться наработками, если кому интересно.
Мне было бы очень интересно, особенно про маппинг
А собственно файлы lgf каким образом парсятся?
ktb
alex
Конфиги логстеша: https://github.com/ggerogery/logstash-1c-security-logs
А собственно файлы lgf каким образом парсятся?
“В лоб”, скриптом на баше, который в репе лежит - lgp-to-yml.sh. Он по крону парсит lgf в формат словарей для logstash’а(“KEY”: “VALUE”). Потом, главное, правильно расставить интервалы, чтобы за секунду до получения событий логстешем словари были обновлены. Рабочий конфиг логстеша - logstash/conf.d/raw_files_1.conf. Там есть фильтры translate:
translate {
field => “[UserId]”
destination => “[User]”
dictionary_path => “/etc/logstash/conf.d/custom_mapping_1C/DB_NAME_UserId.yml”
refresh_interval => 104
fallback => “Nothing to match!”
}
в этом примере он будет смотреть в поле UserId, увидит там, например, запись 1984, в словаре DB_NAME_UserId.yml посмотрит, что 1984 - это Петров_А_А, которого и поместит в User
raw_files_1.conf - там описан пайплайн, который смотрит в диру с сырыми логами конкретной БД 1С, каждое отдельное событие склеивает в одну строку(codec multiline) и прогоняет через все фильтры(mutate’ты -> grok -> translate), готовый результат складывает в эластик. Логи 1С неоднородные слишком, у меня вышло 6 разных GROK паттернов, которые покрывают все логи.
Попробовал. Тестовая база разобралась хорошо, а рабочая нет. Все таки паттерны grok не подойдут под то что 1С сделала - у меня вылезло что в данных {P, {6 к примеру дополнительно 197 объектных полей. Предварительно получается неплохо, если я перед logstash файл прогоняю через рег-выражения, для приведения pattern.
Добрый день!
Пытаюсь получить наименование файла логов ТЖ 1с, но ничего не выходит. За пример взял часть кода из вашего сообщения:
{
"grok": {
"field": "source",
"patterns": [
"%{NUMBER:tempyymmddhh}.log"
]
}
}
в логах выдает ошибку:
(status=400): {“type”:“illegal_argument_exception”,“reason”:“field [source] not present as part of path [source]”}
Без данного куска, все работает и разбирается
полный pipeline
{
"description" : "onec tj pipeline",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{NUMBER:num_min}:%{BASE10NUM:num_sec}-%{NUMBER:duration},%{WORD:event1c},%{NUMBER:level}"]
}
},
{
"grok": {
"field": "message",
"patterns": [
"process=%{WORD:process1c}"
],
"on_failure": [
{
"set": {
"field": "process1c",
"value": ""
}
}
]
}
},
{
"grok": {
"field": "message",
"patterns": [
"Usr=%{WORD:usr}"
],
"on_failure": [
{
"set": {
"field": "usr",
"value": ""
}
}
]
}
},
{
"grok": {
"field": "message",
"patterns": [
"Context=%{WORD:context}"
],
"on_failure": [
{
"set": {
"field": "context",
"value": ""
}
}
]
}
},
{
"grok": {
"field": "source",
"patterns": [
"%{NUMBER:tempyymmddhh}.log"
]
}
}
]
}
Подскажите пожалуйста в чем может быть проблема?
Заранее благодарен!