【问题标题】:Why does EKS say my fluent-bit.conf is not valid为什么 EKS 说我的 fluent-bit.conf 无效
【发布时间】:2021-06-22 15:30:24
【问题描述】:

我正在尝试在 EKS + Fargate 上为 Kuberentes 设置 Fluent Bit。我能够将日志全部发送到 Cloudwatch 上的一个通用日志组,但现在当我添加 fluent-bit.conf 时:|到 data: 字段并尝试将更新应用到我的集群,我收到此错误:

for: "fluentbit-config.yaml": admission webhook "0500-amazon-eks-fargate-configmaps-admission.amazonaws.com" 拒绝请求:fluent-bit.conf 无效。请仅在日志配置映射中提供 output.conf、filters.conf 或 parrs.conf

对我来说最突出的是错误消息要求我只提供输出、过滤器或解析器配置。

它与我在网上找到的其他示例相匹配,但似乎我正在更新的集群上没有 fluent-bit.conf 文件之类的。我遵循的教程没有提到安装文件,所以我不知道为什么会出现这个错误。

我的 fluentbit-config.yaml 文件如下所示

kind: Namespace
apiVersion: v1
metadata:
  name: aws-observability
  labels:
    aws-observability: enabled
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: aws-logging
  namespace: aws-observability
  labels:
    k8s-app: fluent-bit
data:
  fluent-bit.conf: |
    @INCLUDE input-kubernetes.conf
    
  input-kubernetes.conf: |
    [INPUT]
        Name tail
        Parser docker
        Tag logger
        Path /var/log/containers/*logger-server*.log
        
  output.conf: |
    [OUTPUT]
        Name cloudwatch_logs
        Match logger
        region us-east-1
        log_group_name fluent-bit-cloudwatch
        log_stream_prefix from-fluent-bit-
        auto_create_group On

【问题讨论】:

    标签: amazon-web-services kubernetes logging amazon-eks fluent-bit


    【解决方案1】:

    根据docs(在该页面的最底部,是的,我们正在改进它们,对当前状态不满意)你有几个部分是不允许的Fargate 日志记录中 EKS 的上下文,更具体地说,可以进入 ConfigMap 的内容。您想要的是类似于以下内容的内容(注意:这是来自我正在使用的实际部署,稍作修改):

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: aws-logging
      namespace: aws-observability
    data:
      output.conf: |
         [OUTPUT]
            Name cloudwatch_logs
            Match *
            region eu-west-1
            log_group_name something-fluentbit
            log_stream_prefix fargate-
            auto_create_group On
         [OUTPUT]
            Name  es
            Match *
            Host blahblahblah.eu-west-1.es.amazonaws.com
            Port 443
            Index something
            Type  something_type
            AWS_Auth On
            AWS_Region eu-west-1
            tls   On
    
    

    使用此配置,您可以将日志流式传输到 CW 和 AES,因此如果不需要,请随意删除第二个 OUTPUT 部分。但是,您注意到那里不可能有其他部分,例如 input-kubernetes.conf

    【讨论】:

    • 好的,我明白你指的是什么了。因此,在使用 EKS Fargate 和 Fluent bit 时,您不能使用 fluent-bit.conf 或使用 @INCLUDE 运算符。你的回答肯定回答了我的问题迈克尔,但它确实让我想到了一个新问题。我可以在 CW 上为不同的日志记录服务创建不同的日志组吗?我打算用 [INPUT] 标记不同的日志,并将这些标记与不同的 [OUTPUTS] 匹配。如果您想在新帖子上讨论,我可以就此提出一个新问题。再次感谢您的回复。
    • 是的,您可以有多个 OUTPUT 部分用于不同的(如我所做的,CW 和 AES)或相同的目的地,Matching 用于不同的事情,但是,INPUT 部分是不允许,这是由 EKS/Fargate 内部管理的,在所谓的隐藏车(== 隐藏侧车)中。希望这是有道理的,正如我所说,正在更新所述文档页面以使其更清晰。
    【解决方案2】:

    我想知道是否有人设法按照 fluentbit conf documentation 使用解析器处理带有 fargate 'hide-car' 的 'log' 部分。这是我的 aws-logging 配置映射的 sn-p,它将日志推送到两个输出,但遗憾的是解析从未发生。

    我希望在 Opensearch 中查看日志时避免使用 hacky 正则表达式,这可以通过正确解析“日志”来避免。

    PS。我注意到 fluentbit 文档引用了所谓的“docker”解析器,但 fargate 节点使用 containerd 作为容器运行时,这可能是一个问题?

    data:
      filters.conf: |
        [FILTER]
            Name             kubernetes
            Match            kube.*
            Merge_Log           On
            Merge_Log_Key       log_proccessed
            Buffer_Size         0
            Kube_Meta_Cache_TTL 300s
            Parser docker
      flb_log_cw: 'true'
      output.conf: |
        [OUTPUT]
            Name cloudwatch_logs
            Match   *
            region eu-west-1
            log_group_name /aws/eks/bs-277-main/container
            log_stream_prefix log-
        [OUTPUT]
            Name  es
            Match *
            Host  vpc-my-amazing-os-endpoint.eu-west-1.es.amazonaws.com
            Port  443
            Index kubernetes
            Type  doc
            AWS_Auth On
            AWS_Region eu-west-1
            tls   On
      parsers.conf: |
        [PARSER]
            Name         docker
            Format       json
            Time_Key     time
            Time_Format  %Y-%m-%dT%H:%M:%S.%L
            Time_Keep    On
    

    遇到了这个example fluentbit config with containerd log parsing,但它基于将 Parser 参数添加到 [INPUT] 部分,在 Fargate 中被忽略,因为它可能由 AWS 管理。

    非常遗憾的是,像 fluentbit 这样的可观察性关键组件在 AWS Fargate 上的文档如此之少。

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      相关资源
      最近更新 更多