Свободные, многоуровневые вложенные экранированные строки JSON внутри JSON - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь разобрать логи из стороннего приложения - что я не могу изменить - чтобы отправить его в эластичный.Вот псевдокод структуры журнала:

{
"field": "value",
"otherField" : "{\field\": {\"innerfield\":123123}}\r",
(...)
}

После этой документации и после попытки использовать этот плагин и многие, многие другие решения, я имеюсложить на нем.

Моя цель - иметь его в форме:

{
"field": "value",
"otherField" : { 
   "field": {
     "innerfield":123123
    }
 }",
 (...)
}

1 Ответ

1 голос
/ 09 апреля 2019

Попробуйте следующее:

<source>
  @type dummy
  tag dummy
  dummy [
    {"name": "value", "json": "{\"foo\": \"bar\", \"baz\": 1}"},
    {"name": "value", "json": "{\"foo\": \"bar\", \"baz\": 2}"},
    {"name": "value", "json": "{\"foo\": \"bar\", \"baz\": 3}"},
    {"name": "value", "json": "{\"foo\": \"bar\", \"baz\": 4}"},
    {"name": "value", "json": "{\"foo\": \"bar\", \"baz\": 5}"}
  ]
</source>

<filter dummy>
  @type parser
  key_name json
  reserve_data true
  remove_key_name_field true
  hash_value_field parsed
  <parse>
    @type json
  </parse>
</filter>

<match dummy>
  @type stdout
</match>

Результат:

2019-04-09 12:19:35.042904619 +0900 dummy: {"name":"value","parsed":{"foo":"bar","baz":1}}
2019-04-09 12:19:36.044483191 +0900 dummy: {"name":"value","parsed":{"foo":"bar","baz":2}}
2019-04-09 12:19:37.046293186 +0900 dummy: {"name":"value","parsed":{"foo":"bar","baz":3}}
2019-04-09 12:19:38.048007580 +0900 dummy: {"name":"value","parsed":{"foo":"bar","baz":4}}

См. Последний документ: https://docs.fluentd.org/v1.0/articles/filter_parser#reserve_time

...