Сообщение копирования Logstash/Grok и другое поле для создания нового формата вывода

У меня есть следующий журнал в logstash:

{
    "message":"{\"name\":\"myapp\",\"hostname\":\"sensu-node-dev\",\"pid\":749,\"level\":50,\"err\":{\"message\":\"Cannot find module 'lol'\",\"name\":\"Error\",\"stack\":\"Error: Cannot find module 'lol'\\n    at Function.Module._resolveFilename (module.js:339:15)\\n    at Function.Module._load (module.js:290:25)\\n    at Module.require (module.js:367:17)\\n    at require (internal/module.js:16:19)\\n    at Object.<anonymous> (/srv/www/dev.site/app.js:27:6)\\n    at next (native)\\n    at Object.<anonymous> (/srv/www/dev.site/node_modules/koa-compose/index.js:29:5)\\n    at next (native)\\n    at onFulfilled (/srv/www/dev.site/node_modules/co/index.js:65:19)\\n    at /srv/www/dev.site/node_modules/co/index.js:54:5\",\"code\":\"MODULE_NOT_FOUND\"},\"msg\":\"Cannot find module 'lol'\",\"time\":\"2016-02-26T15:59:25.688Z\",\"v\":0}",
    "@version":"1",
    "@timestamp":"2016-02-26T15:59:35.317Z",
    "beat":{"hostname":"sensu-node-dev","name":"sensu-node-dev"},
    "count":1,
    "fields":null,
    "input_type":"log",
    "offset":83219,
    "source":"/var/log/bunyan/myapp-info.log",
    "type":"log",
    "host":"sensu-node-dev",
    "tags":["beats_input_codec_plain_applied","error"],
    "name":"myapp",
    "hostname":"sensu-node-dev",
    "pid":749,
    "level":50,
    "err":{"message":"Cannot find module 'lol'","name":"Error","stack":"Error: Cannot find module 'lol'\n    at Function.Module._resolveFilename (module.js:339:15)\n    at Function.Module._load (module.js:290:25)\n    at Module.require (module.js:367:17)\n    at require (internal/module.js:16:19)\n    at Object.<anonymous> (/srv/www/dev.site/app.js:27:6)\n    at next (native)\n    at Object.<anonymous> (/srv/www/dev.site/node_modules/koa-compose/index.js:29:5)\n    at next (native)\n    at onFulfilled (/srv/www/dev.site/node_modules/co/index.js:65:19)\n    at /srv/www/dev.site/node_modules/co/index.js:54:5","code":"MODULE_NOT_FOUND"},
    "msg":"Cannot find module 'lol'",
    "time":"2016-02-26T15:59:25.688Z",
    "v":0
}

Я хотел бы, чтобы logstash выводил следующее:

{
    title: "error message from host sensu-node-dev",
    text:"{\"name\":\"myapp\",\"hostname\":\"sensu-node-dev\",\"pid\":749,\"level\":50,\"err\":{\"message\":\"Cannot find module 'lol'\",\"name\":\"Error\",\"stack\":\"Error: Cannot find module 'lol'\\n    at Function.Module._resolveFilename (module.js:339:15)\\n    at Function.Module._load (module.js:290:25)\\n    at Module.require (module.js:367:17)\\n    at require (internal/module.js:16:19)\\n    at Object.<anonymous> (/srv/www/dev.site/app.js:27:6)\\n    at next (native)\\n    at Object.<anonymous> (/srv/www/dev.site/node_modules/koa-compose/index.js:29:5)\\n    at next (native)\\n    at onFulfilled (/srv/www/dev.site/node_modules/co/index.js:65:19)\\n    at /srv/www/dev.site/node_modules/co/index.js:54:5\",\"code\":\"MODULE_NOT_FOUND\"},\"msg\":\"Cannot find module 'lol'\",\"time\":\"2016-02-26T15:59:25.688Z\",\"v\":0}"
}

sensu-node-dev берется из поля host в исходном журнале. Поле text содержит то, что было в поле message в исходном журнале. Такое ощущение, что это должно быть тривиальной задачей.

Я смотрел на grok, и он совсем не подходит для начинающих! Я не уверен, нужно ли это делать в фильтре или в выводе в моем файле logstash .conf?


person basickarl    schedule 26.02.2016    source источник


Ответы (1)


Вы можете создать новое поле, даже используя значения из других полей:

mutate {
    add_field => { "title" => "error message from host %{host}" }
}

Вероятно, вы могли бы переименовать другие поля, чтобы разместить их там, где вы хотите:

mutate {
    rename => { "name" => "[text][name]" }
}

Если есть оставшиеся поля, которые вам не нужны, используйте mutate->remove_field.

person Alain Collins    schedule 26.02.2016