#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
}