Разбор строкового параметра как json в Fluentd

#logging #fluentd

Вопрос:

Я использую Fluentd для потоковой передачи журналов из файлов и отправки их в MongoDB. Я сделал некоторые конфигурации, как показано ниже, но не смог извлечь строку в формате json.

Это пример журнала, который система записывает в файл

 2021-10-11T12:29:08.0328851Z stdout F {"level":"info","msg":"[map[counter:148] Basic counter is counting]","time":"2021-10-11T12:29:08.032Z"}
 

Это конфигурация fluend

 <source>
  @type tail
  path /var/log/containers/*.log
  pos_file fluentd-docker.pos
  read_from_head true
  tag kubernetes.*
  exclude_path ["/var/log/containers/fluent*"]
  <parse>
  @type multi_format
  <pattern>
    format json
    time_key time
    time_type string
    time_format "%Y-%m-%dT%H:%M:%S.%NZ"
    keep_time_key false
  </pattern>
  <pattern>
    format regexp
    expression /^(?<time>. ) (?<stream>stdout|stderr)( (?<logtag>.))? (?<log>.*)$/
    time_format '%Y-%m-%dT%H:%M:%S.%N%:z'
    keep_time_key false
  </pattern>
  </parse>
</source>
<match **>
  @type mongo  

  host "#{ENV['FLUENT_MONGO_HOST']}"
  port "#{ENV['FLUENT_MONGO_PORT']}"

  database admin
  collection logs

  # for capped collection  
  capped
  capped_size 1024m

  # authentication
  user "#{ENV['FLUENT_MONGO_USER']}"
  password "#{ENV['FLUENT_MONGO_PASSWORD']}"

  <inject>    
    # key name of timestamp    
    time_key time  
  </inject>  
  
  <buffer>    
    # flush    
    flush_interval 10s  
  </buffer>
</match>
 

Это и есть результат

введите описание изображения здесь

Я хочу удалить поля stream, logtag и log.

Это то, чего я хочу:

 {
   "level" : "info",
   "msg" : "Test message"
   "time" : 2021-10-11T12:46:15.376 00:00
}