BigData LogManager для 1С

Мне было бы очень интересно, особенно про маппинг

А собственно файлы 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 паттернов, которые покрывают все логи.

6 Симпатий

Попробовал. Тестовая база разобралась хорошо, а рабочая нет. Все таки паттерны 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"
	  ]
	}
	}
  ]
}

Подскажите пожалуйста в чем может быть проблема?

Заранее благодарен!