私はKubernetes
クラスタを持っていますが、ノード上のコンテナログを集計しようとしており、それらをMongoDB
に送信しようとしています。しかし、私はログレコード内の値に基づいてそれ自身で異なるMongoDBサーバーにログレコードを送ることができる必要があります。Fluentdはフィールド値に基づいてタグを作成します
私はfluent-plugin-kubernetes_metadata_filterプラグインを使用して、Kubernetesの追加情報をログレコードに添付しています。これらのフィールドの1つはkubernetes_namespace_name
です。このフィールドを使用して、mongodb出力プラグインとの照合に使用できるタグを作成することは可能ですか?
たとえば、以下は、私は1つの出力のみを使用していますが、アイデアは、フィールドkubernetes_namespace_name
の値に基づいて、そのMongoDBのデータベースにログを送信する複数持っていると流暢させることです。
<source>
@type tail
@label @KUBERNETES
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
time_format %Y-%m-%dT%H:%M:%S
tag kubernetes.*
format json
keep_time_key true
read_from_head true
</source>
<label @KUBERNETES>
<filter kubernetes.**>
@type kubernetes_metadata
kubernetes_url "#{ENV['K8S_HOST_URL']}"
bearer_token_file /var/run/secrets/kubernetes.io/serviceaccount/token
ca_file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
include_namespace_id true
</filter>
<filter kubernetes.**>
@type flatten_hash
separator _
</filter>
# < Tag 'kubernetes.namespace.default' is created here somehow >
<match kubernetes.namespace.default>
@type mongo
host "#{ENV['MONGO_HOST']}"
port "#{ENV['MONGO_PORT']}"
database "#{ENV['MONGO_DATABASE']}"
collection "#{ENV['MONGO_COLLECTION']}"
capped
capped_size 1024m
user "#{ENV['MONGO_USER']}"
password "#{ENV['MONGO_PASSWORD']}"
time_key time
flush_interval 10s
</match>
</label>
だから、私はそれ自身の流れに1つのソースと複数のラベルをそれぞれ持っている必要があることを意味しますか? – amofasser
設定にかなりの依存関係がありますが、これはうまくいくはずです。 –