Elastic + filebeat + ТЖ 1С

0. 185 18.06.19 12:38 Сейчас в теме
Рассмотрим как можно обрабатывать удобно большой объем информации с простой структурой.
Это удобно для анализа логов ТЖ, поскольку типовыми механизмами он невозможен.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Kluch 19.06.19 17:40 Сейчас в теме
Хорошая статья.
А как указать, что нужно загружать шаблон индекса из файла json. Вроде есть такая возможность, но что-то не получается:

setup.template.json.enabled: true
setup.template.json.name: "onectj"
setup.template.json.path: ${path.config}/my_template.json

И есть ли возможность также указать файл с pipeline в настройках?
Чтобы не вызывать:
PUT _template/onectj
PUT _ingest/pipeline/onectj_pipeline
3. pashamak 185 20.06.19 06:04 Сейчас в теме
(1) Добрый день.
Спасибо!
По документации имя pipeline нужно указывать в настройках, о его загрузке из настроек речи нет.
Подробнее здесь https://www.elastic.co/guide/en/beats/filebeat/7.0/elasticsearch-output.html.

К шаблону предъявляются требования.
В логах есть ошибка загрузки шаблона?

Пример двух разных ошибок некорректного разбора шаблона:

2019-06-20T09:44:23.605+0700 ERROR pipeline/output.go:100 Failed to connect to backoff(elasticsearch(http://localhost:9200)): Connection marked as failed because the onConnect callback failed: Error loading Elasticsearch template: could not unmarshal json template: json: cannot unmarshal array into Go value of type map[string]interface {}

2019-06-20T09:56:59.672+0700 ERROR pipeline/output.go:100 Failed to connect to backoff(elasticsearch(http://localhost:9200)): Connection marked as failed because the onConnect callback failed: Error loading Elasticsearch template: could not unmarshal json template: invalid character '}' after top-level value
(1)

Приложил пример шаблона приведенного в статье.
У меня после удаления шаблона в эластике он загрузился из json корректно.
Прикрепленные файлы:
onectj.json
4. Kluch 21.06.19 13:10 Сейчас в теме
(3) Добрый день.
В логах в консоли как я понимаю пишет: Template already exists and will not be overwritten и загружает шаблон по умолчанию.
Ошибки в моем шаблоне нет, через PUT _template он загружается.

Логи в файл тоже не собираются (выводятся на экран в консоли).

Думаю проблема в задании путей. Что-то не пойму как их указывать?
"E:\\ELK_Stack_7.0.0\\filebeat-7.0.0\\logs" - с двумя слешами
"E:\ELK_Stack_7.0.0\filebeat-7.0.0\logs" - с одним слешем
E:\ELK_Stack_7.0.0\filebeat-7.0.0\logs - без кавычек
${path.config}/logs - или может так?

В секции filebeat.inputs работает так:

paths:
- D:\Logs_ELK\*.log
7. pashamak 185 23.06.19 19:30 Сейчас в теме
(4) Проблема в существовании шаблона, он его не может обновить без включенной настройки замены.
Можно (1 ) удалить существующий шаблон или (2) указать замену шаблон в настройках.
1. DELETE _template/[имя шаблона]
2. Описано здесь https://www.elastic.co/guide/en/beats/filebeat/7.0/configuration-template.html
setup.template.overwrite
A boolean that specifies whether to overwrite the existing template. The default is false.
2. starik-2005 2303 19.06.19 21:25 Сейчас в теме
В последнее время инструменты для линуха стали появляться в винде и винда становится похожа на линух. Ну а консольку можно через подсистему линуха засунуть к мелкомягким - и будет все хорошо.
5. ALex_1C_8 21.06.19 15:15 Сейчас в теме
Может не внимательно читал, но я так и не понял. Как решаете проблему многострочных событий в ТЖ.
6. Kluch 21.06.19 16:31 Сейчас в теме
(5) По идее есть настройка в разделе filebeat.inputs:
multiline.pattern:

Например:

multiline.pattern: '(\d\d:\d\d)\.(\d+)-(\d+)'
8. pashamak 185 23.06.19 19:32 Сейчас в теме
(5) Это не описывал в статье.
Посмотрите по (6) описание в доке https://www.elastic.co/guide/en/beats/filebeat/7.0/filebeat-reference-yml.html
13. Darklight 27 09.12.19 14:02 Сейчас в теме
Интересная статья, но не для начинающих (всё-таки основы тут не разбираются - нужно вникакать в принципы описания взаимодействий filebeat и elasticserach по другим статьям - не про разбор 1С ТЖ).

Вот, я так и не смог разобраться - как формируется дата события - части времени берутся из строки события ТЖ и помещаются в заданные для них поля индекса. Но, во-первых, там нет полного времени ни даты ни часа - это всё находится в имени файла, а оно в filebeat тут никак не разбирается. А, во-вторых, так и не понятно - как потом формируется timestamp записи в Elasticsearch (поле - которое указывается при создании паттерна индекса в kibana)? Можете это подробнее пояснить?

Так же жаль, что не уделили времени в статье обработке событий, разделённых на несколько строк. Ну, в (8),(9) конечно дали намёк - что нужно включить обработку таких строк в filebeat и определять перенос строки - когда начало перенесённой строки не совпадает с партерном описания времени (то это перенесённая строка - хотя это и не совсем надёжно). Но всё- равно стоило бы это описать в статье - ибо для 1C ТЖ это рядовая ситуация и не самая простая при обработке ТЖ классическими путём
9. Repich 525 31.07.19 10:17 Сейчас в теме
(5)
input {
file {

codec => multiline {
pattern => "^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]"
negate => true
what => "previous"
}
17. EliasShy 50 11.12.19 07:00 Сейчас в теме
(9) это настройка для logstash насколько понимаю
для filebeat будет

multiline.pattern: '^[0-9][0-9]:[0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9]'
multiline.match: after
multiline.negate: true

Только после чтения документации понимаешь почему after и почему negate - по-наитию сначала ставил before и negate false
10. serge_focus 4 08.08.19 14:43 Сейчас в теме
Привет

А для файлового ЖР у Вас есть pipeline и Настройка.yml?
Хочу перевести ЖР в старый формат
11. pashamak 185 08.08.19 19:57 Сейчас в теме
(10) Для журнала регистрации есть сервис который его разбирает и складывает в эластик.
Сервис написан, но находится в процессе отладки.
Пример прилагаю в скриншоте.
При интересе пишите в личку могу отправить.
Прикрепленные файлы:
12. EGOLEGE 30.10.19 05:39 Сейчас в теме
14. EliasShy 50 10.12.19 07:57 Сейчас в теме
Добрый день.
Спасибо за статью - очень ценная информация.

Подскажите, какими настройками Filebeat удалось его заставить сообщение формировать не по концу строки, а полное - т.е. чтобы начиналось с маркера времени?
16. pashamak 185 10.12.19 18:15 Сейчас в теме
(14)Для многострочных событий используйте мультилайн, он описан выше
15. pashamak 185 10.12.19 15:59 Сейчас в теме
Если речь о скрине выше то это отдельный сервис написанный на .net. Он ставится отдельно и сам все разбирает.
Если речь про ТЖ то с работы pipeline не покажу.
Смотрите в строну нескольких регулярок.
18. EliasShy 50 19.12.19 14:09 Сейчас в теме
Коллеги. Настроили filebeat + ES и все прочее - собирается замечательно.
Но, при продолжительной работе не считывает следующий час (только после остановки сервиса filebeat) - может кто-то сталкивался?
19. pashamak 185 03.02.20 13:09 Сейчас в теме
20. EliasShy 50 07.02.20 10:48 Сейчас в теме
(19) Разобрались уже. Часовые логи ТЖ обрабатываются с задержкой полтора-два часа
21. user597855_platonov92 17.02.20 18:53 Сейчас в теме
Добрый день!
Большое спасибо за подробную статью!
Есть вопрос по добавлению даты создания лога. В ТЖ дата пишется частично в названии файла "20021318.log" и остальная часть идет в строке самого файла "03:59.817001-0 *************". Каким образом можно объединить эти значения и преобразовать в дату для дальнейшего использования в фильтрах?
23. pashamak 185 25.02.20 11:43 Сейчас в теме
(21) Вижу следующие пути решения
1. Через переменные yml можно передавать в pipeline данные. При передаче даты можно с нее брать день и время с файла. Более подробно не вспомню как это делается. Здесь немного о переменных https://www.elastic.co/guide/en/elasticsearch/reference/7.x/settings.html
2. Написать скрипт и вытаскивать дату с транзакции если она есть
3. Ставить текущую дату поскольку журнал разбирается в потоке
22. EZSuleyman 25.02.20 11:16 Сейчас в теме
Добрый день! Статья хорошая только вот есть одна загвоздка. Я новичек в ES и прошу вашей помощи. Вроде все делал по вашей статье но никак не получается вывести Available fields в Дисковере. Сортировка только по стандартным полям. В чем может быть проблема?
Прикрепленные файлы:
24. pashamak 185 25.02.20 11:46 Сейчас в теме
(22) По скрину доступные поля уже есть в дискавере. Переформулирйте вопрос.
25. EZSuleyman 25.02.20 12:50 Сейчас в теме
Хотелось бы фильтровать логи по юзеру или по событию а данных полей у меня нет, поковырялся с разбором сообщений. Теперь он выдает поле usr но пустые строки(
Прикрепленные файлы:
26. pashamak 185 25.02.20 15:06 Сейчас в теме
(25)Проверьте отрабатывает ли выделение пользователя. Например, в сообщении примера этого поля нет.
27. EZSuleyman 26.02.20 16:20 Сейчас в теме
(26)Я тестировал и проверил, видимо kibana не хочет брать русскоязычные символы. Так например
POST _ingest/pipeline/_simulate
{
  "pipeline": {
  "description" : "parse multiple patterns",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{NUMBER:num_min}:%{BASE10NUM:num_sec}-%{WORD:duration},%{WORD:event1c},%{WORD:level_event},process=%{WORD:process_name},Usr=%{WORD:usr}"]
      }
    },  
    {
        "grok": {
          "field": "message",
          "patterns": [
            "process=(%{DATA:process},|%{GREEDYDATA:process})"
          ],
          "on_failure": [
            {
              "set": {
                "field": "process",
                "value": ""
              }
            }
          ]
        }
    }
  ]
},
"docs":[
  {
    "_source": {
      "message": "16:40.991013-1,SCALL,0,process=ragent,Usr=Administrator,ClientID=248,Interface=0459eaa0-589f-4a6d-9eed-c1a7461c8e3f,IName=IClusterRegistry,Method=18,CallID=915855,MName=getServersList"
    }
  }
  ]
}
Показать


Но если только заменить Administrator на Администратор то выдает ошибку:

{
  "docs" : [
    {
      "error" : {
        "root_cause" : [
          {
            "type" : "illegal_argument_exception",
            "reason" : "Provided Grok expressions do not match field value: [16:40.991013-1,SCALL,0,process=ragent,Usr=Администратор,ClientID=248,Interface=0459eaa0-589f-4a6d-9eed-c1a7461c8e3f,IName=IClusterRegistry,Method=18,CallID=915855,MName=getServersList]"
          }
        ],
        "type" : "illegal_argument_exception",
        "reason" : "Provided Grok expressions do not match field value: [16:40.991013-1,SCALL,0,process=ragent,Usr=Администратор,ClientID=248,Interface=0459eaa0-589f-4a6d-9eed-c1a7461c8e3f,IName=IClusterRegistry,Method=18,CallID=915855,MName=getServersList]"
      }
    }
  ]
}
Показать


Уже и с кодировками игрался, не знаю в чем проблема((
Кстати с контекстом та же беда. Вроде все последовательно делал, изучал.
28. pashamak 185 29.02.20 11:58 Сейчас в теме
(27)Используйте свой формат, поскольку предполагаемый, к сожалению, не работает с кириллицей.
Список обозначений и их соответствие регулярным выражениям можно посмотреть здесь https://github.com/elastic/elasticsearch/blob/7.5/libs/grok/src/main/resources/patterns/grok-patterns.
Ниже привел пример своего формата "MyUserName".
Ссылка на описание в документации
https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html, раздел "Custom patterns".
Прикладываю скрин с результатом теста.

POST _ingest/pipeline/_simulate
{
  "pipeline": {
  "description" : "parse multiple patterns",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{NUMBER:num_min}:%{BASE10NUM:num_sec}-%{WORD:duration},%{WORD:event1c},%{WORD:level_event},process=%{WORD:process_name}"]
      }
    },
    {
        "grok": {
          "field": "message",
          "patterns": [
            "Usr=%{MyUserName:usr}"
          ],
          "pattern_definitions" : {
          "MyUserName" : "[а-яА-Яa-zA-Z]*"
        }
        }
    }
  ]
},
"docs":[
  {
    "_source": {
      "message": "16:40.991013-1,SCALL,0,process=ragent,Usr=Админ,ClientID=248,Interface=0459eaa0-589f-4a6d-9eed-c1a7461c8e3f,IName=IClusterRegistry,Method=18,CallID=915855,MName=getServersList"
    }
  }
  ]
}
Показать
Прикрепленные файлы:
29. artkor 187 10.05.20 12:02 Сейчас в теме
Здравствуйте! Спасибо за статью. Не подскажете в чем может быть "беда": застрял на шаге "Create index pattern": в упор не видит никаких индексов типа "onec*", притом что в консоли все добавлено как в статье. "Загуглил" все что можно, не получается добавить индекс( ЧЯДНТ?
30. pashamak 185 11.05.20 07:18 Сейчас в теме
(29) Перед созданием паттерна необходимо создать сам индекс. Он создается либо вручную либо автоматически после обработки записей filebeat.
31. artkor 187 11.05.20 09:53 Сейчас в теме
(30) Спасибо. А где почитать про это (желательно с примерами) если Вы в курсе? Я пока "чайник" в этих вопросах)
Оставьте свое сообщение
Вопросы с вознаграждением