Получение нескольких полей из сообщения в filebeat и logstash

Я пишу журналы в файл журнала из своего приложения Django, оттуда я отправляю эти журналы в elasticsearch. Поскольку я также хочу разделить поля, я использую logstash между filebeat и elasticsearch.

Вот пример поля журнала:

2019-03-19 13:39:06 файл журнала INFO save_data {'field1': None, 'time': '13: 39: 06 ',' mobile ':' 9876543210 ',' list_item ': "[{' item1 ' : 10, 'item2': 'путь / к / файлу'}] ", 'response': '{some_complicated_json}}', 'field2': 'некоторые данные', 'date': '19 -03-2019 ', 'field3': 'некоторые другие данные'}

Я попытался написать шаблон соответствия GROK, но все поля попадают в поле message:

%{TIMESTAMP_ISO8601:temp_date}%{SPACE} %{WORD:logfile} %{LOGLEVEL:level} %{WORD:save_data} %{GREEDYDATA:message}  

Как я могу написать шаблон соответствия GROK, который может разложить указанную выше запись в журнале.


person sid8491    schedule 27.03.2019    source источник
comment
JSON в журналах имеет фиксированную структуру?   -  person Nishant    schedule 27.03.2019
comment
@NishantSaini нет, могут быть разные поля в json.   -  person sid8491    schedule 27.03.2019
comment
Это может помочь: stackoverflow.com/questions/33937936/   -  person Nishant    schedule 27.03.2019
comment
@NishantSaini огромное спасибо, это помогло.   -  person sid8491    schedule 01.04.2019


Ответы (1)


Я не знаю, как это можно сделать с помощью Grok, но мы делаем это с помощью json-процессор в эластичном конвейер загрузки узла. Что-то вроде этого:

{
    "my-log-pipeline": {
        "description": "My log pipeline",
        "processors": [{
            "json": {
                "field": "message",
                "target_field": "messageFields"
            }
        }]
    }
}

Затем вам просто нужно указать источнику (filebeat / logstash) использовать этот конвейер при загрузке.

person Adam T    schedule 27.03.2019