Объединение журналов между датой и временем с помощью filebeat

#elasticsearch #logstash #logstash-grok #filebeat

#elasticsearch #logstash #logstash-grok #filebeat

Вопрос:

Я пытаюсь использовать журналы для elasticSearch использования fileBeat (без Logstash)

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

 20161014 17:49:09.169 [ERROR] [Thread-2974] some.java.class.:70 - some.java.Exception: write failed. History: [requestHost=123-some.org.com, time=Fri Oct 14 17:49:05 GMT-07:00 2016, exception=java.net.SocketTimeoutException]
[requestHost=123-some.org.com, time=Fri Oct 14 17:49:07 GMT-07:00 2016, exception=java.net.SocketTimeoutException]
[requestHost=123-some.org.com, time=Fri Oct 14 17:49:09 GMT-07:00 2016, exception=java.net.SocketTimeoutException]
 Tried 3 times
        at java.lang.Thread.run(Thread.java:745)
20161014 17:49:09.169 [ERROR] [Thread-3022]
 

Я хочу объединить все строки между 2 датами (1-я и последняя строка)

Вот мой filebeat.yml фрагмент

  paths:
      - /test.log
      multiline.pattern: '^[0-9]{8}'
      multiline.negate: true
      multiline.match: after
 

Мне нужно знать, правильно regex

Я пытаюсь решить это без использования logstash

Комментарии:

1. Экранируя открытую скобку, вы удаляете ее мощность и сопоставляете с буквенной скобкой.

2. Я попробовал некоторые регулярные выражения на go playground (из документации filebeat), они работают, но на практике все они вызывают у меня одну и ту же проблему, я еще не ниндзя регулярных выражений, похоже, мне нужно потратить некоторое время и разобраться с этим или просто использовать logstash с фильтром GROK

3. Конфигурация с точками, представленная в этом вопросе, сработала для меня. Версия Filebeat — 6.8.14

Ответ №1:

Использование следующей конфигурации Filebeat с предоставленным образцом журнала приводит к двум событиям, где каждое сообщение начинается с даты.

Я запустил ./filebeat -c filebeat.yml -e -v -d "*" конфигурацию ниже для тестирования. Я также протестировал шаблон на игровой площадке Go.

filebeat.yml:

 filebeat:
  prospectors:
    - paths: ["input.txt"]
      multiline:
        pattern: '^[0-9]{8}'
        negate:  true
        match:   after
output:
  console:
    pretty: false
 

Вывод:

 {   
  "@timestamp": "2016-10-17T14:13:31.292Z",
  "beat": {
    "hostname": "host.example.com",
    "name": "host.example.com",
  },  
  "input_type": "log",
  "message": "20161014 17:49:09.169 [ERROR] [Thread-2974] some.java.class.:70 - some.java.Exception: write failed. History: [requestHost=123-some.org.com, time=Fri Oct 14 17:49:05 GMT-07:00 2016, exception=java.net.SocketTimeoutException]n[requestHost=123-some.org.com, time=Fri Oct 14 17:49:07 GMT-07:00 2016, exception=java.net.SocketTimeoutException]n[requestHost=123-some.org.com, time=Fri Oct 14 17:49:09 GMT-07:00 2016, exception=java.net.SocketTimeoutException]n Tried 3 timesn        at java.lang.Thread.run(Thread.java:745)",
  "offset": 519,
  "source": "input.txt",
  "type": "log"
}   
{   
  "@timestamp": "2016-10-17T14:17:21.686Z",
  "beat": {
    "hostname": "host.example.com",
    "name": "host.example.com",
  },  
  "input_type": "log",
  "message": "20161014 17:49:09.169 [ERROR] [Thread-3022]",
  "offset": 563,
  "source": "input.txt",
  "type": "log"
} 
 

Комментарии:

1. Я не вижу » n», и сообщения по-прежнему разбиты на части, это журналы log4j, как вы думаете, это имеет какое-то значение?

2. Какую версию Filebeat вы используете? Какая ОС? Я попробовал это на 5.0-rc1 в OS X, и все сработало нормально. Я не думаю, что тот факт, что они являются журналами log4j, имеет какое-либо значение.

3. Я использую filebeat version 1.3.1 (amd64) ubuntu 14.04.03. Если я смогу найти / записать регулярное выражение, которое начинается ^[0-9]{8} и заканчивается при следующем появлении того же ^[0-9]{8} , как вы думаете, это может решить мою проблему?

4. Я протестировал конфигурацию, которую я предоставил в версии 1.3.1, и она работает с приведенным вами образцом журнала. КСТАТИ, конфигурация, которую вы опубликовали в своем вопросе, недействительна для 1.3.1, поскольку отступ неправильный, и вы не можете использовать пунктирные клавиши, подобные multiline.pattern . Пожалуйста, попробуйте точную конфигурацию и команды, приведенные в моем ответе. Если они не работают, можете ли вы предоставить более крупный образец журнала с примерами того, как строки должны быть сгруппированы в события.

5. Огромное спасибо за настойчивые попытки решить мою проблему, все встало на свои места после избавления от точечных ключей