繁体   English   中英

流利地基于字段值创建标签

[英]Fluentd create a tag based on a field value

我有一个Kubernetes集群,我试图在该集群中聚合节点上的容器日志并将其发送到MongoDB 但是我需要能够根据日志记录本身的值将日志记录发送到不同的MongoDB服务器。

我正在使用fluent-plugin-kubernetes_metadata_filter插件将来自Kubernetes的其他信息附加到日志记录。 这些字段之一是kubernetes_namespace_name 是否可以使用该字段创建一个标签,我可以将其与mongodb输出插件进行匹配。

例如。 在下面,我仅使用一个输出,但想法是使用多个输出,并让fluent根据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>

您可以使用消息内容使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM