Думаю, я просто не понимаю или упускаю из виду основную концепцию Graylog и его экстракторов. Я просто хочу взять свои пары ключ-значение, разделенные запятыми, и разбить их на соответствующие поля.
Пример сообщения журнала
2016-01-22 18: 04: 05,639 - host_info_log - INFO - ' cpu_count=2,user_cpu=0.0,system_cpu=0.0,idle_cpu=100.0,total_memory=3955.07,avail_memory=3717.3,percent_memory=6.0,used_memory=523.44,free_memory=3431.63,active_memory=378.54,inactive_memory=67.38,swap_memory_used=0.0,swap_memory_total=0.0,swap_memory_free=0.0,swap_memory_percent=0.0
Note: keys are not always in the exact same location, most of the time cpu_count is first, but not always.
Ключ (ха!) - добавить в поля преобразователь для пар ключ = значение.
Использование конвертеров CSV и Key = Value не дает того, что вы хотите однако ни один из них не знает другого разделителя. Ключ = Значение предполагает пробелы. Таким образом, одним из решений является использование экстрактора «Заменить на регулярное выражение», чтобы превратить запятую в пробел, и добавить в конце Key = Value (не забудьте нажать кнопку «Добавить»).
Добавьте условие строки по соображениям производительности и во избежание неправильного извлечения .
Окончательный результат выглядит примерно так:
{
"extractors": [
{
"condition_type": "string",
"condition_value": "host_info_log",
"converters": [
{
"type": "numeric",
"config": {}
},
{
"type": "tokenizer",
"config": {}
}
],
"cursor_strategy": "copy",
"extractor_config": {
"regex": ",",
"replacement": " ",
"replace_all": true
},
"extractor_type": "regex_replace",
"order": 0,
"source_field": "message",
"target_field": "host_info_log",
"title": "serverfault http://serverfault.com/q/751126/241174"
}
],
"version": "1.3.3 (0fda9dc)"
}