У меня есть конфигурация Fluentd, которая берет журналы из определенного пространства имен K8s (app-ns
) и использует мультипарсер для анализа вывода как JSON или игнорирует какой-либо специальный анализ. В настоящее время это выглядит следующим образом:
<system>
log_level info
</system>
<match kubernetes.**>
@type rewrite_tag_filter
<rule>
key $['kubernetes']['namespace_name']
pattern ^(.+)$
tag $1.${tag}
</rule>
</match>
<filter app-ns.**>
@type parser
format multi_format
time_parse false
suppress_parse_error_log true
ignore_key_not_exist true
key_name log
reserve_data true
hash_value_field app_log
<parse>
@type multi_format
<pattern>
format json
</pattern>
<pattern>
format none
</pattern>
</parse>
</filter>
<filters for other namespaces>
<match kubernetes.** kubelet.** docker.** kube-proxy.** kube-apiserver.** kube-controller-manager.** kube-scheduler.** default.** kube-system.** ap-ns.** <other namespaces> >
@type kinesis_streams
@id out_kinesis_streams
<configs for kinesis>
</match>
<match **>
@type null
</match>
В этом пространстве имен есть службы, использующие протоколирование JSON, которые вызывают конфликт в полях нашего стека ELK, что приводит к удалению журналов. Я надеюсь добиться того, чтобы одно развертывание было разрешено анализировать как JSON, но мои попытки не сработали.
Я думал примерно так:
<match app-ns.**>
@type rewrite_tag_filter
<rule>
key $['kubernetes']['container_name']
pattern <regex for container to match on>
tag app-ns-json
</rule>
</match>
<filter app-ns-json.**>
@type parser
format multi_format
time_parse false
suppress_parse_error_log true
ignore_key_not_exist true
key_name log
reserve_data true
hash_value_field app_log
<parse>
@type multi_format
<pattern>
format json
</pattern>
<pattern>
format none
</pattern>
</parse>
</filter>
Но я не могу заставить его работать. Когда я попробовал это, нет журналов дошло до нашего стека ELK.
Любые предложения будут оценены!