Думаю, я просто не понимаю или упускаю из виду основную концепцию 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 free_memory = 523.44 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
Примечание: ключи не всегда находятся в одном и том же месте, большую часть времени cpu_count является первым, но не всегда.
Ключ (ха!) - добавить конвертер пар ключ = значение в поля.
Однако использование конвертеров 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)"
}