为什么 EKS 说我的 fluent-bit.conf 无效

Why does EKS say my fluent-bit.conf is not valid

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

for: "fluentbit-config.yaml": admission webhook "0500-amazon-eks-fargate-configmaps-admission.amazonaws.com" denied the request: fluent-bit.conf is not valid. Please only provide output.conf, filters.conf or parsers.conf in the logging configmap

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

它与我在网上找到的其他示例相匹配,但似乎我正在更新的集群上没有 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

根据 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

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

我想在 Opensearch 中查看日志时避免使用 hacky 正则表达式,这可以通过正确解析 'logs'.

来避免

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

通过 containerd 日志解析遇到了这个 example 的 fluentbit 配置,但它基于将解析器参数添加到 [INPUT] 部分,这在 Fargate 中被忽略,因为它可能由 AWS 管理。

非常不幸的是,fluentbit 等可观察性的关键组件在 AWS Fargate 上的文档太少了。