为什么 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 上的文档太少了。
我正在尝试在 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 上的文档太少了。