2016-10-15 2 views
0

Я пытаюсь нажать журналы elasticSearch с помощью fileBeat (Нет Logstash)Объединить журналы между датой/временем с использованием filebeat

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

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 датами (первая и последняя строка)

Вот мой filebeat.yml сниппет

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

мне нужно знать правильный regex

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

+0

убегая открытый кронштейн, вы удаляете свою силу и согласование на буквальном кронштейне. –

+0

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

ответ

2

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

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

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 times\n  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" 
} 
+0

Я не вижу «\ n», и сообщения все еще разбиты на части, это журналы log4j, вы думаете, что это имеет значение? –

+0

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

+0

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

Смежные вопросы