我认为我只是不理解或遗漏了 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
注意:键并不总是位于完全相同的位置,大多数时候 cpu_count 是第一个,但并非总是如此。
答案1
关键(哈!)是添加一个将 Key=Value 对转换为字段。
但是,同时使用 CSV 和 Key=Value 转换器并不能达到您想要的效果,因为您不知道另一个分隔符。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)"
}