【问题标题】:how to add multiple outputs in fluentd-kubernetes-daemonset in kubernetes如何在 kubernetes 的 fluentd-kubernetes-daemonset 中添加多个输出
【发布时间】:2020-09-09 04:45:22
【问题描述】:

我正在使用 fluentd daemonset docker image 并通过使用以下 code-sn-ps 的方式使用 fluentd 将日志发送到 ES:

  containers:
    - name: fluentd
      image: fluent/fluentd-kubernetes-daemonset:v1.4.2-debian-elasticsearch-1.1
      env:
        - name: FLUENT_ELASTICSEARCH_HOST
          value: "my-aws-es-endpoint"
        - name: FLUENT_ELASTICSEARCH_PORT
          value: "443"
        - name: FLUENT_ELASTICSEARCH_SCHEME
          value: "https"
        - name: FLUENT_ELASTICSEARCH_USER
          value: null
        - name: FLUENT_ELASTICSEARCH_PASSWORD
          value: null

但发生的问题是针对 DR/HA,我们也即将将日志保存到 S3。我的问题是,我们是否可以在 fluentd-kubernetes-daemonset 中添加多个输出,例如 S3、Kinesis 等 kubernetes?

【问题讨论】:

    标签: amazon-s3 kubernetes amazon-kinesis fluentd


    【解决方案1】:

    这取决于您如何将 Fluentd 部署到集群。您是否使用像 Helm 或 Skaffold 这样的模板引擎?

    如果是这样,它们内部应该有一个 configmap / 配置选项来自定义部署并提供您自己的输入。例如,可以通过在此处添加输出来定义 Helm fluentd:

    https://github.com/helm/charts/blob/master/stable/fluentd/values.yaml#L97

    这应该允许您制作多个流,以便将流式数据输出到多个位置。

    我注意到在您提供的特定 Docker 映像中,他们在 Ruby 中有一些模板化的项目。该配置特别允许您将卷挂载到 fluentd 文件夹中的conf.d/https://github.com/fluent/fluentd-kubernetes-daemonset/blob/master/templates/conf/fluent.conf.erb#L9

    也许是/etc/fluentd,但我建议在本地运行映像并自己检查。

    只要你的配置文件以.conf 结尾,你就可以添加任何你想要的东西。

    【讨论】:

    • 感谢您的回答,但主要问题是图像 fluent/fluentd-kubernetes-daemonset:v1.4.2-debian-elasticsearch-1.1 仅支持一个弹性搜索输出。我想要的是同时使用 s3 和 kinesis 作为输出以及如何将这些插件安装为 k8s pod 中的守护程序集?
    • @PPShein 添加的输出相对容易,但您需要确保使用复制打开文档的多个流:docs.fluentd.org/output/copy。插件通过 k8s 在 initContainer 中完成。这就是我在我的系统中所做的。
    【解决方案2】:

    如第一个答案中所述 - 您需要覆盖整个配置。 你正在寻找output type "copy"

    <match **>
      @type copy
      <store>
        @type elasticsearch
        ...
      </store>
      <store>
        @type s3
        ...
      </store>
      <store>
        @type kinesis_streams
        ...
      </store>
    </match>
    

    提示:因为每个&lt;store&gt; 都会很长,所以如果存储数量越多,它的可读性就会越差。我通常将每个商店都包装在一个标签中以增加可读性:

    <match **>
      @type copy
      <store>
        @type relabel
        @label @es
      </store>
      <store>
        @type relabel
        @label @s3
      </store>
      <store>
        @type relabel
        @label @stream
      </store>
    </match>
    
    <label @es>
      <match **>
        @type elasticsearch
        ...
      </match>
    </label>
    
    <label @s3>
      <match **>
        @type s3
        ...
      </match>
    </label>
    
    <label @stream>
      <match **>
        @type kinesis_streams
        ...
      </match>
    </label>
    

    现在您可以将标签移动到单独的配置文件中。 除了可读性之外,这还有更多好处:

    • 每个标签都是 fluentd 内部的一个独立事件流,因此它可以实现一组单独的过滤器,而不会影响其他标签。当您想要过滤要发送到不同商店的内容时,这非常有用,例如只有 INFO 要流式传输,所有级别都流式传输到 ES。
    • 标签可重复使用,您可以从多个地方调用它。假设您有两个来源 - 将两者发送到同一个标签。

    【讨论】:

    • 感谢您的回答,但配置多个输出并没有那么困难。主要问题是图像fluent/fluentd-kubernetes-daemonset:v1.4.2-debian-elasticsearch-1.1 仅支持一个elasticsearch 输出。我想要的是同时使用 s3 和 kinesis 作为输出,以及如何将这些插件安装为 k8s pod 中的守护程序集?
    • FROM fluent/fluentd-kubernetes-daemonset:v1.4.2-debian-elasticsearch-1.1; RUN gem install fluent-plugin-kinesis ? . S3 应该是预先构建的。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多