2017-09-05 10 views
0

私は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> 

答えて

0

代わりにタグを使用する、ことができますFluentdのgrepフィルタを使用してフィルタリングを行うには、メッセージの内容を使用します。 kubernetesメタデータフィルタの後に、データフラットナの前にフィルタを追加できます。これにより、キーkubernetes_namespace_nameを指定し、その中の値に基づいてルーティングすることができます。ラベルを使用してMongoDBの出力を追加すると、プロセスのワークフローを分けることができます。

ドキュメント:https://docs.fluentd.org/v0.12/articles/filter_grep

例:

<filter kubernetes.**> 
    @type grep 
    <regexp> 
    key kubernetes_namespace_name 
    pattern cool 
    </regexp> 
</filter> 

<YOUR MONGO CONFIG HERE> 
+0

だから、私はそれ自身の流れに1つのソースと複数のラベルをそれぞれ持っている必要があることを意味しますか? – amofasser

+0

設定にかなりの依存関係がありますが、これはうまくいくはずです。 –

関連する問題