Elastic + filebeat + ТЖ 1С

0. 186 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 186 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 186 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 2325 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 186 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 526 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 186 08.08.19 19:57 Сейчас в теме
(10) Для журнала регистрации есть сервис который его разбирает и складывает в эластик.
Сервис написан, но находится в процессе отладки.
Пример прилагаю в скриншоте.
При интересе пишите в личку могу отправить.
Прикрепленные файлы:
12. EGOLEGE 30.10.19 05:39 Сейчас в теме
14. EliasShy 50 10.12.19 07:57 Сейчас в теме
Добрый день.
Спасибо за статью - очень ценная информация.

Подскажите, какими настройками Filebeat удалось его заставить сообщение формировать не по концу строки, а полное - т.е. чтобы начиналось с маркера времени?
16. pashamak 186 10.12.19 18:15 Сейчас в теме
(14)Для многострочных событий используйте мультилайн, он описан выше
15. pashamak 186 10.12.19 15:59 Сейчас в теме
Если речь о скрине выше то это отдельный сервис написанный на .net. Он ставится отдельно и сам все разбирает.
Если речь про ТЖ то с работы pipeline не покажу.
Смотрите в строну нескольких регулярок.
18. EliasShy 50 19.12.19 14:09 Сейчас в теме
Коллеги. Настроили filebeat + ES и все прочее - собирается замечательно.
Но, при продолжительной работе не считывает следующий час (только после остановки сервиса filebeat) - может кто-то сталкивался?
19. pashamak 186 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 186 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 186 25.02.20 11:46 Сейчас в теме
(22) По скрину доступные поля уже есть в дискавере. Переформулирйте вопрос.
25. EZSuleyman 25.02.20 12:50 Сейчас в теме
Хотелось бы фильтровать логи по юзеру или по событию а данных полей у меня нет, поковырялся с разбором сообщений. Теперь он выдает поле usr но пустые строки(
Прикрепленные файлы:
26. pashamak 186 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 186 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 190 10.05.20 12:02 Сейчас в теме
Здравствуйте! Спасибо за статью. Не подскажете в чем может быть "беда": застрял на шаге "Create index pattern": в упор не видит никаких индексов типа "onec*", притом что в консоли все добавлено как в статье. "Загуглил" все что можно, не получается добавить индекс( ЧЯДНТ?
30. pashamak 186 11.05.20 07:18 Сейчас в теме
(29) Перед созданием паттерна необходимо создать сам индекс. Он создается либо вручную либо автоматически после обработки записей filebeat.
31. artkor 190 11.05.20 09:53 Сейчас в теме
(30) Спасибо. А где почитать про это (желательно с примерами) если Вы в курсе? Я пока "чайник" в этих вопросах)
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Санкт-Петербург
зарплата от 110 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С (Казань)
Казань
зарплата до 130 000 руб.
Полный день

Программист 1С (Новосибирск)
Новосибирск
зарплата до 130 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 180 000 руб.
Полный день